Forum: Mikrocontroller und Digitale Elektronik Probleme beim (Wieder)beschreiben mit J-Link und CY8C4025 µC


von Michael (Gast)


Lesenswert?

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 ;)

von PSoC-Benutzer (Gast)


Lesenswert?

Hast Du den Chip schon mit einem KitProg oder MiniProg3 probiert 
anzusprechen?

Das QFN-24 Gehäuse hat einen dedizierten XRES-Eingang, der auch benötigt 
wird für die Programmierung und debuggen. Dein Programmier-Gerät 
verwendet den XRES?

Die SWD-Signale werden nicht zufällig zur Laufzeit umprogrammiert zu 
IOs?

PSoC-Benutzer

von Til S. (Firma: SEGGER) (til_s)


Lesenswert?

Was mir schon einige Male passiert ist, dass ich ein Programm per J-Link 
in ein Device geladen habe, was dann dafür sorgte, dass der J-Link nicht 
mehr dran kam. Das können dann so Sachen sein, wie die JTAG/SWD Pins 
unabsichtlich deaktiviert oder die PLL vermurkst. Oft gibt es dann 
Tricks, wie man doch wieder dran kommt.


Am besten du postest deine Frage noch einmal bei uns im Forum, 
https://forum.segger.com/. Die J-Link Kollegen lesen da mit und helfen 
dir bestimmt gerne weiter. Du kannst uns natürlich auch eine Support 
Email schicken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.