Forum: Mikrocontroller und Digitale Elektronik SAMD21E18 SWD


von Daniel K. (robopcb)


Lesenswert?

Hallo zusammen,

diese Frage wurde das eine oder andere mal angesprochen, aber meiner 
Meinung nach nicht wirklich beantwortet.
Ich möchte ein kleines Board designen, basierend auf einem SAMD21. Zur 
ersten Durchführung verschiedener Tests haben ich mir folgendes Board 
bestellt: https://wiki.protoneer.co.nz/NANO-ARM
Nun zu meinem persönlichen Feind - Bootloader. Zuvor habe ich immer mit 
8bitter gearbeitet, sodass das mein erstes Cortex Projekt ist. Nun zu 
meiner konkreten Frage, wie bekomm ich am elegantesten den Bootloader 
auf das uC? Ich habe leider nur sehr wenig Platz weswegen ich SWD 
bevorzugen würde. Dazu habe ich folgende Anleitung gefunden: 
https://learn.adafruit.com/proper-step-debugging-atsamd21-arduino-zero-m0/lets-go

Sehe ich es richtig, dass es die Beste Lösung wäre, einen Atmel ICE JTAG 
Programmer zu nutzen und dann folgende Ports auf dem PCB zugänglich 
machen, und diese mit dem Programmer in Kombination mit Atmel Studio zu 
flashen?


    Vref / Vtarget - Logic voltage of the chip, in this case 3.3V
    GND to common ground
    SWDIO to SWDIO
    SWCLK to SWCLK


Vielen Dank im Voraus

von 6a66 (Gast)


Lesenswert?

Daniel K. schrieb:
> Ich habe leider nur sehr wenig Platz weswegen ich SWD
> bevorzugen würde.

ARM hat eine Standardschnittstelle vorgeschlagen, die aus einem 
10poligen mini Steckverbinder besteht: Cortex Debug Connector (Seite2):

http://infocenter.arm.com/help/topic/com.arm.doc.faqs/attached/13634/cortex_debug_connectors.pdf

Adapter für 10polig auf 20polig gibt es hier:
https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-20-10/

Damit hannst Du an jeder Standard JTAG Schnittstelle andocken.

BTW: Reset mit aufzulegen hat sich imemr gelohnt :)

Und: es ist nicht zwingend nötig den 10poligen zu verwenden, prinzipiell 
reicht irgendein 6poliger den due dann von hand umsetzt. ABER: Die 
Standardlösung ist halt am elegantesten zu bedienen (e.g. Segger jlink 
lite, ...).

rgds

von Christopher J. (christopher_j23)


Lesenswert?

Daniel K. schrieb:
> Sehe ich es richtig, dass es die Beste Lösung wäre, einen Atmel ICE JTAG
> Programmer zu nutzen und dann folgende Ports auf dem PCB zugänglich
> machen, und diese mit dem Programmer in Kombination mit Atmel Studio zu
> flashen?

Ja, SWD ist mit Sicherheit der sinnvollste Weg den Controller zu 
bespielen. Einen Bootloader benötigt man nicht zwingend. Bei der Art des 
Steckers bzw. dem Pin-Layout bin ich voll bei 6a66.

von Uwe B. (Firma: TU Darmstadt) (uwebonnes)


Lesenswert?

Ich weiss nicht, ob die Warnung auch auf SWD mit dem D21 zutrifft, für 
den D20 gibt es aber auf dem Blackmagic Debug Probe Gitter Kanal eine 
Bericht, der für den SAMD20 nicht ermutigend ist:
https://gitter.im/blacksphere/blackmagic
I've tried the BMP with the SAMD20 (pretty much the same chip sans USB 
and DMA) and the experience was terrible. ATSAMD needs a lot of special 
treatment e.g. if you lock it up due missing or messing up one of the 
many mandatory busy wait loops and I'm not convinced BMP will have the 
required work arounds built-in. A year ago I needed a heavily patched 
OpenOCD and lots of custom commands to work around the quirks.
YMMV may wary of course.

: Bearbeitet durch User
von 6a66 (Gast)


Lesenswert?

Uwe B. schrieb:
> Ich weiss nicht, ob die Warnung auch auf SWD mit dem D21 zutrifft, für
> den D20 gibt es aber auf dem Blackmagic Debug Probe Gitter Kanal eine
> Bericht, der für den SAMD20 nicht ermutigend ist:
> https://gitter.im/blacksphere/blackmagic

Dann nimm etwas, was ordentlich unterstützt wird. Je näher Du an den 
Empfehlungen bleibst desto wahrscheinlicher ist es, dass es klappt. Beim 
Segger hätte ich da keine Bedenken. Und der Jlink EDU kostet weniger als 
die BlackmagicProbe.
Alles was nicht mainstream ist kostet entweder Geld oder Zeit,

rgds

von Daniel K. (robopcb)


Lesenswert?

Vielen Dank für eure Beiträge

6a66 schrieb:
> Alles was nicht mainstream ist kostet entweder Geld oder Zeit,

Also Zeit nehmen solche Projekte immer in Anspruch, und ich weiß 
natürlich nicht wie es euch geht, aber wenn man sich hinsetzt und solch 
ein Projekt plant und durchführt dann sollte immer die bestmögliche 
Lösung erziehlt werden. Und wenn das bedeutet dass man etwas mehr Zeit 
bei der Planung braucht, dann ist das so...

Aber eure Beiträge machen mich definitiv nachdenklich ob man nicht doch 
auf einen 8bit AVR setzen sollte, wie z.B. ein AT32U4 - der hätte den 
Bootloader direkt an Board. Und verfügt ebenfalls über eine USB und eine 
UART Schnittstelle, was für mich besonders wichtig wäre.

von Maxx (Gast)


Lesenswert?

Der SAMD21 besitzt einen ROM Bootloader, der aktiv ist, wenn noch kein 
gültiges Image auf dem Flash ist, oder wenn er anderweitig (z.B. per 
GPIO @ Startup) aktiviert worden ist. Damit kannst du auch ohne SWD 
deinen eigenen Bootloader aufspielen.

http://ww1.microchip.com/downloads/en/AppNotes/Atmel-42366-SAM-BA-Bootloader-for-SAM-D21_ApplicationNote_AT07175.pdf

Allerdings ist JTAG/SWD zum Debuggen immer sehr nützlich. Wenn Platz 
sollte man das also vorziehen.


Die Probleme beim Debuggen und special Treatment kann ich nicht 
nachvollziehen. Das einzige Problem war bisher, dass im 
Auslieferungszustand Watchdog allways on enabled it, dass in die 
laufende Debug-Session hereinfuschen kann. Im Debug-Fall einfach als 
erstes die Konfigurationsregister (User Area) den Watchdog ausschalten + 
Power Cycle. Und dann ist der harmlos wie ein Kätzchen. Sogar die 
Wiederaufnahme einer unterbrochenen Verbindung geht hier (SAMD21J18 + 
IAR + Segger J Link) ohne Probleme durch Pausieren + Fortfahren.

von Quant (Gast)


Lesenswert?

Maxx schrieb:
> Der SAMD21 besitzt einen ROM Bootloader

Nein hat er nicht.

Ich benutze einen Atmel ICE das geht super.

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.