Hallo zusammen.
Ich bin allmählich ratlos und komme bei einem Problem nicht mehr weiter.
Ich möchte einen Cypress Controller vom Typ CY8C4025LQI-S401 mit einem
SEGGER J-Link Base beschreiben. Der Controller wird über eine extra
Spannungsversorgung betrieben, also nicht über den J-Link. Dazu nutze
ich für die Programmierung das SWD-Interface, also kein J-Tag.
Vorweg: Bisher habe ich (gute) Erfahrung mit der Programmierung von PICs
gemacht, also auch nur mit deren ICSP-Schnittstelle.
Die Hex-Datei will ich mit dem JLink Commander in den Chip laden.
Funktioniert soweit alles auch. Ich versorge die PCB mit dem Netzteil
und stecke das USB-Kabel an den J-Link. Hier mal der Log:
1 | C:\Program Files (x86)\SEGGER\JLink_V622a>jlink
|
2 | SEGGER J-Link Commander V6.22a (Compiled Nov 28 2017 17:56:48)
|
3 | DLL version V6.22a, compiled Nov 28 2017 17:56:10
|
4 |
|
5 | Connecting to J-Link via USB...O.K.
|
6 | Firmware: J-Link V10 compiled Nov 28 2017 11:45:53
|
7 | Hardware version: V10.10
|
8 | S/N: 50112345
|
9 | License(s): GDB
|
10 | VTref = 3.303V
|
11 |
|
12 |
|
13 | Type "connect" to establish a target connection, '?' for help
|
14 | J-Link>connect
|
15 | Please specify device / core. <Default>: CY8C4025XXX-SXXX
|
16 | Type '?' for selection dialog
|
17 | Device>
|
18 | Please specify target interface:
|
19 | J) JTAG (Default)
|
20 | S) SWD
|
21 | TIF>s
|
22 | Specify target interface speed [kHz]. <Default>: 4000 kHz
|
23 | Speed>500
|
24 | Device "CY8C4025XXX-SXXX" selected.
|
25 |
|
26 |
|
27 | Connecting to target via SWD
|
28 | Found SW-DP with ID 0x0BC11477
|
29 | Scanning AP map to find all available APs
|
30 | AP[1]: Stopped AP scan as end of AP map has been reached
|
31 | AP[0]: AHB-AP (IDR: 0x04770031)
|
32 | Iterating through AP map to find AHB-AP to use
|
33 | AP[0]: Core found
|
34 | AP[0]: AHB-AP ROM base: 0xF0000000
|
35 | CPUID register: 0x410CC601. Implementer code: 0x41 (ARM)
|
36 | Found Cortex-M0 r0p1, Little endian.
|
37 | FPUnit: 4 code (BP) slots and 0 literal slots
|
38 | CoreSight components:
|
39 | ROMTbl[0] @ F0000000
|
40 | ROMTbl[0][0]: E00FF000, CID: B105100D, PID: 000BB4C0 ROM Table
|
41 | ROMTbl[1] @ E00FF000
|
42 | ROMTbl[1][0]: E000E000, CID: B105E00D, PID: 000BB008 SCS
|
43 | ROMTbl[1][1]: E0001000, CID: B105E00D, PID: 000BB00A DWT
|
44 | ROMTbl[1][2]: E0002000, CID: B105E00D, PID: 000BB00B FPB
|
45 | Cortex-M0 identified.
|
46 | J-Link>erase
|
47 | Erasing device (CY8C4025xxx-Sxxx)...
|
48 | J-Link: Flash download: Total time needed: 0.120s (Prepare: 0.053s, Compare: 0.0
|
49 | 00s, Erase: 0.051s, Program: 0.000s, Verify: 0.000s, Restore: 0.015s)
|
50 | Erasing done.
|
51 | J-Link>loadfile D:\Test.hex
|
52 | Downloading file [D:\Test.hex]...
|
53 | J-Link: Flash download: Bank 0 @ 0x00000000: 1 range affected (32768 bytes)
|
54 | J-Link: Flash download: Total time needed: 1.196s (Prepare: 0.151s, Compare: 0.0
|
55 | 27s, Erase: 0.050s, Program: 0.827s, Verify: 0.027s, Restore: 0.111s)
|
56 | Writing target memory failed.
|
Hierzu ist zu sagen (um einigen Tipps zur Fehlersuche vorzugreifen): Er
hat den Chip gefunden, das Interface ist wirklich auf SWD, der richtige
Controller wurde gewählt und die Geschwindigkeit habe ich
vorsichtshalber auf 500kHz gestellt.
Das Löschen des Chips funktioniert und war erfolgreich. Das Beschreiben
funktioniert soweit wohl auch (die richtige Status-LED leuchtet), auch
wenn er sagt "Writing target Memory failed". Durch Googlen bin ich
darauf gestoßen, dass ihm hier wohl mehr Infos zum Speicherbereich oder
so fehlen, und somit das failed ok sein soll. Das wäre auch gleich meine
erste Frage, ob das WIRKLICH so ist. Das die richtige LED an ist, heißt
ja nicht, dass das komplette Programm richtig im Flash ist.
Zu erwähnen ist hier, dass ich das Netzteil aus und wieder anschalten
muss, damit das Programm bootet.
Habe ich dies gemacht, kann ich nichts mehr mit dem Controller machen.
Selbst wenn das Programm falsch/nicht geschrieben wäre. Will ich z.B.
ein neues Programm überspielen oder einfach nur den Flash löschen, kommt
folgendes:
1 | J-Link>erase
|
2 | Erasing device (CY8C4025xxx-Sxxx)...
|
3 |
|
4 | **************************
|
5 | WARNING: CPU could not be halted
|
6 | **************************
|
7 |
|
8 |
|
9 | ****** Error: Can not read register 16 (XPSR) while CPU is running
|
10 | Can not read register 20 (CFBP) while CPU is running
|
11 | Can not read register 0 (R0) while CPU is running
|
12 | Can not read register 1 (R1) while CPU is running
|
13 | Can not read register 2 (R2) while CPU is running
|
14 | Can not read register 3 (R3) while CPU is running
|
15 | Can not read register 4 (R4) while CPU is running
|
16 | Can not read register 5 (R5) while CPU is running
|
17 | Can not read register 6 (R6) while CPU is running
|
18 | Can not read register 7 (R7) while CPU is running
|
19 | Can not read register 8 (R8) while CPU is running
|
20 | Can not read register 9 (R9) while CPU is running
|
21 | Can not read register 10 (R10) while CPU is running
|
22 | Can not read register 11 (R11) while CPU is running
|
23 | Can not read register 12 (R12) while CPU is running
|
24 | Can not read register 14 (R14) while CPU is running
|
25 | Can not read register 15 (R15) while CPU is running
|
26 | Can not read register 17 (MSP) while CPU is running
|
27 | Can not read register 18 (PSP) while CPU is running
|
28 |
|
29 | ****** Error: Failed to prepare for programming.
|
30 | Could not preserve target memory.
|
31 | ERROR: Erase returned with error code -1.
|
32 | J-Link>h
|
33 |
|
34 | **************************
|
35 | WARNING: CPU could not be halted
|
36 | **************************
|
37 |
|
38 | J-Link>r
|
39 | Reset delay: 0 ms
|
40 | Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
|
41 |
|
42 | **************************
|
43 | WARNING: CPU could not be halted
|
44 | **************************
|
45 |
|
46 |
|
47 | ****** Error: CCG2 (reset): Timeout while waiting for CPU to halt after reset. M
|
48 | anually halting CPU.
|
Zur Info: Die Kommandos r und h stehen für r(eset) und h(alt).
Ich komme nun nicht mehr ran irgendwas zu machen, da die CPU läuft. Das
wäre meine nächste Frage: Es ist wohl richtig, dass die CPU läuft, aber
ich will ja den Speicher löschen, also sollte der Programmer doch bitte
die CPU anhalten!? Dann frage ich mich, wie die CPU laufen kann, wenn
ich (aus testzwecken) zusätzlich zum J-Link den Reset-Button gedrückt
halte und lösche (es erscheint die selbe Fehlermeldung).
Was funktioniert, ist den J-Link Commander neu zu starten, wieder zu
connecten, alles einzustellen. Danach kann ich wieder halten, löschen,
usw.
Ich selber habe weder die Software geschrieben, noch den Schaltplan
gezeichnet, kann diese Personen aber jeder Zeit anrufen.
Der Softwareentwickler konnte dies jedenfalls nicht nachvollziehen oder
erklären. Allerdings arbeitet er auch mit dem Cypress MiniProg3 und
programmiert aus dem PSoC Creator direkt heraus.
Ich bin ratlos und weiß nicht, wieso er nicht das tut, was er soll ;)