Forum: Mikrocontroller und Digitale Elektronik Erste Experimente mit XMC2Go & Linux


von Klaus R. (klausro)


Lesenswert?

Ich habe jetzt mal ausprobiert, in wie weit man mit Linux auf den XMC2Go 
zugreifen kann. Segger bietet ja unter 
http://www.segger.com/jlink-software.html ja eine CLI Software für Linux 
an. Ich habe die .tgz 32 bit Software ausgewählt. Die Eingabe der 
Seriennummer umgeht man, in dem man "I do not have a serial number 
because I own an eval board with J-Link on-board. How can I download 
J-Link software for it?" auswählt.

Laut README.txt im Archiv muss man die Datei "99-jlink.rules" nach 
/etc/udev/rules.d/ kopieren. Neustart...

Jetzt kann man mit JLinkExe auf den XMC2Go zugreifen.
1
klaus@LittlX:~/JLink_Linux_V480h_i386$ ./JLinkExe 
2
SEGGER J-Link Commander V4.80h ('?' for help)
3
Compiled Feb 28 2014 21:50:35
4
DLL version V4.80h, compiled Feb 28 2014 21:50:32
5
Firmware: J-Link Lite-XMC4200 Rev.1 compiled Jan 10 2014 20:31:33
6
Hardware: V1.00
7
S/N: 591013957 
8
VTarget = 3.300V
9
Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000
10
Info: TotalIRLen = ?, IRPrint = 0x..000000000000000000000000
11
No devices found on JTAG chain. Trying to find device on SWD.
12
Info: Found SWD-DP with ID 0x0BB11477
13
Info: Found Cortex-M0 r0p0, Little endian.
14
Info: FPUnit: 4 code (BP) slots and 0 literal slots
15
Cortex-M0 identified.
16
Target interface speed: 100 kHz
17
J-Link>

Ein paar Commandos gehen, andere anscheinden nicht.
h (Halt) und g (Go), mem, savebin gehen. r (Reset) nicht:
1
J-Link>r
2
Reset delay: 0 ms
3
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.
4
Info: SYSRESETREQ has confused core. Trying to reconnect and use VECTRESET.
5
6
WARNING: Failed to reset CPU. VECTRESET has confused core.
7
8
WARNING: CPU did not halt after reset.
9
10
WARNING: CPU could not be halted
11
Info: Core did not halt after reset, trying to disable WDT.
12
13
WARNING: CPU did not halt after reset.
14
15
WARNING: CPU could not be halted
16
17
WARNING: Could not set S_RESET_ST
18
Info: SYSRESETREQ has confused core. Trying to reconnect and use VECTRESET.
19
20
WARNING: Failed to reset CPU. VECTRESET has confused core.
21
22
WARNING: CPU did not halt after reset.
23
24
WARNING: CPU could not be halted
25
Info: Core did not halt after reset, trying to disable WDT.
26
27
WARNING: CPU did not halt after reset.
28
29
WARNING: CPU could not be halted
30
31
WARNING: Could not set S_RESET_ST
32
J-Link>

loadbin habe ich jetzt wegen eines noch fehlenden, passenden Programmes 
nicht ausprobiert. Unter 
http://www.infineon.com/cms/de/product/microcontrollers/32-bit-industrial-microcontrollers-based-on-arm-registered-cortex-tm-m/32-bit-xmc4000-industrial-microcontrollers-arm-registered-cortex-tm-m4/xmc-development-tools-software-and-kits/xmc-2go/channel.html?channel=db3a304344134c7a01441ff8216974d9 
(puh, was für ein Link) findet man die "Initial Start" Software. Mal 
sehen, ob ich das Linker Script für meinen arm-none-eabi-gcc 4.8.3 
nehmen kann und ich das kompiliert bekomme. Ich bevorzuge Makefiles, 
weniger Eclipse & Co.

: Bearbeitet durch User
von Klaus R. (klausro)


Lesenswert?

Hm... erase geht irgendwie auch nicht:
1
J-Link>device SWD-DP
2
Info: The selected device "SWD-DP" is unknown to this version of the J-Link software.
3
Info: Selected "UNSPECIFIED".
4
Info: Device "SWD-DP" selected (0 KB flash, 0 KB RAM).
5
Reconnecting to target...
6
Info: Found SWD-DP with ID 0x0BB11477
7
Info: Found Cortex-M0 r0p0, Little endian.
8
Info: FPUnit: 4 code (BP) slots and 0 literal slots
9
J-Link>erase
10
Erasing device (Unspecified)...
11
Erasing done.
12
J-Link>g
Das Geblinke geht munter weiter... oder missverstehe ich "erase"? Das 
"device" Kommando vor "erase" scheint wichtig zu sein, ohne wird erase 
nicht angenommen.

von Klaus R. (klausro)


Lesenswert?

Die Seite http://www.segger.com/jlink-flash-download.html Abschnitt 
"Download into flash memory for development purposes" am Ende der Seite 
beschreibt, wie man mit JLinkExe flashen kann. Leider scheint dazu ein 
funktionierendes Reset-Kommando nötig zu sein. Ich habe es jetzt mal 
ohne probiert:
1
J-Link>loadbin xmc2go.bin 0x10001000
2
Loading binary file... [xmc2go.bin]
3
Writing bin data into target memory @ 0x10001000.
4
J-Link>g
5
J-Link>verifybin xmc2go.bin 0x10001000
6
Loading binary file xmc2go.bin
7
Reading 1472 bytes data from target memory @ 0x10001000.
8
Verify failed @ address 0x10001098.
9
Expected C0 read 40J-Link>g
Obwohl eine Fehelmeldung kommt, blinkt es nach wie vor. Entweder wird 
gar nichts geflashed oder es liegt ein anderes Problem vor. Das binary 
xmc2go.bin habe ich aus dem XMC2Go_Testprogram_V1.1.elf mittels
1
arm-none-eabi-objcopy -O binary XMC2Go_Testprogram_V1.1.elf xmc2go.bin
aus der Initial-Start-Software von Infineon generiert. Evtl. sollte ich 
mal direkt bei Segger nachfragen.

: Bearbeitet durch User
von Klaus R. (klausro)


Lesenswert?

Dann mache ich mal mit meinem Monolog weiter: Also, mit DAVE geht 
flashen und Debuggen. Unter Linux nach wie vor kein Erfolg. Erase und 
loadbin bringen keine Fehlermeldung, verändern aber auch nicht den Flash 
Inhalt. Habe jetzt mal Segger angeschrieben.

von Sönke P. (snke_p)


Lesenswert?

"device" (als Befehl oder Kommandozeilenoption --device)  ist für 
JLinkExe notwendig und gibt den µC-Typen an.

device xmc1100-64 müsste es beim XMC2Go sein.

von Marc P. (marcvonwindscooting)


Lesenswert?

Hat schon jemand was mit dem seriellen Bootlader probiert?
Hat --device geholfen?

von SEGGER - Alex (Gast)


Lesenswert?

Hi Klaus,

also, ich steige mal in den "Monolog" (inzwischen sind ja auch andere 
dabei) ein...

1) Der J-Link Commander muss das Device kennen, damit er die 
Flash-Programmierung durchführen kann. "SW-DP" ist kein gültiger 
Device-Name...
Eine Liste von gültigen Device-Namen findest Du hier:
http://www.segger.com/jlink_supported_devices.html

2) Die Infineon XMC-Serie ist etwas "speziell", besonders was Reset ("r" 
Kommando) angeht. Damit dieser funktioniert, muss ebenfalls das Device 
bekannt sein.

3) Auf dem XMC 2Go ist meines Wissens nach ein ein XMC1100 mit 64KB 
Flash verbaut.
Korrektes Device wäre also "XMC1100-0064"

Wir (SEGGER) empfehlen aber generell, dem J-Link schon beim Connect das 
Device mitzuteilen.
Demnach sollte Dein Aufruf für den J-Link Commander, wie folgt aussehen:

./JLinkExe -device XMC1100-0064 -if SWD -speed 4000

Funktionieren nun:
Reset ("r")
loadbin
erase

?

Kurzes Feedback wäre nett.

Gruß,
Alex

von klausro (Gast)


Lesenswert?

Hallo, danke für das Feedback. Da ich z.Zt. unterwegs bin, kann ich erst 
morgen am späten Nachmittag testen. Melde mich dann wieder.

von Marc P. (marcvonwindscooting)


Lesenswert?

SEGGER - Alex schrieb:
> Wir (SEGGER) empfehlen aber generell, dem J-Link schon beim Connect das

Hi Alex,

schoen dass Du hier hilfst. So bin ich darauf aufmerksam geworden, dass 
ihr Manuals anbietet um freie Software fuer das JLink zu erstellen. 
Respekt!

Nun spiele ich mit dem Gedanken, mir ein JLink zuzulegen, um per JTAG zu 
programmieren und vielleicht mal etwas zu debuggen. Ich brauch normal 
keinen Debugger ausser meinem Hirn ;-) Folglich hab ich mich mit der 
Thematik noch nicht auseinandergesetzt.

Meine Vorgaben sind allerdings recht strikt:
Auf mein System (Gentoo Linux, 64bit) kommt nichts vorkompiliertes, d.h. 
Source Code und bauen oder es kommt NICHT drauf. Ich installier keinen 
Licence key und tipp keine Aktivierungscodes oder eine Seriennummer ein. 
Wenn ich schon etwas ehrlich kaufe, dann will ich 'ne Leistung dafuer, 
nicht Pflichten und Kryptospielchen.

Ich brauche keine IDE, Kommandozeile reicht.

Targets: ARM, sonst nichts.

Nun variiert die Preisspanne der JLink in eurem Webshop beachtlich. Ich 
denke der JLink BASE waere die richtig Wahl fuer mich?
Mit der Software bin ich vermutlich (bei meinen Vorgaben) bei OpenOCD 
richtig!? Und das JLink BASE braucht dann nicht doch wieder irgendwo 
eine Seriennummer, einen Aktivierungscode oder aehnlich im Protokoll 
versteckt?

von Klaus R. (klausro)


Lesenswert?

Hallo Alex,

SEGGER - Alex schrieb:
> ./JLinkExe -device XMC1100-0064 -if SWD -speed 4000
>
> Funktionieren nun:
> Reset ("r")
> loadbin
> erase

ja, das wars. Flashen, Reset, Erase usw. funktioniert. Super, Danke!
Es ist schon toll, wenn man so unkompliziert Support bekommt. Ich war 
(bis jetzt) kein JLink Benutzer und bin erst durch das XMC2Go darauf 
gekommen. Funktioniert gut (wenn man weiß, wie). Es ist schon toll, dass 
ihr auch Linux Support liefert. Das ist nicht selbstverständlich!

Danke, Klaus

von Klaus R. (klausro)


Lesenswert?

Hi, auch wenn es etwas gedauert hat: Hier 
http://eleceng.dit.ie/frank/arm/BareMetalXMC2Go/index.html ist 
ausführlich die Programmierung des xmc2go unter Linux beschrieben.

von Florian (Gast)


Lesenswert?

Welche Adresse hast du den bei dem Befehl loadbin angegeben? Wenn ich 0 
angebe scheint er dies zu tun und meldet OK, jedoch geht danach nichts 
mehr.

Stecke ich es wieder aus/ein dann ist wieder die original Anwendung 
drauf.

von Florian (Gast)


Lesenswert?

Habe sie schon gefunden: 0x10001000

von letrend (Gast)


Angehängte Dateien:

Lesenswert?

irgendwie wars dann doch zu viel stress den xmc zum laufen zu bringen. 
man kann den sensor auch abbrechen und per i2c zb mit einem arduino due 
interfacen. Hier ein rudimentaerer sketch: 
https://github.com/Roboy/MagneticSensor3D

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.