Forum: Mikrocontroller und Digitale Elektronik Wie werden fabrikneue ATSAM geflasht?


von Bauform B. (bauformb)


Lesenswert?

Im Februar 2004 schrieb ein unbekannter Autor¹
1
Moderne Controller besitzen einen Bootloader. Dies ist ein im Controller
2
befindliches Programm, dessen Aufgabe es ist das eigentliche Programm
3
in den Speicher zu laden. Bootloader gibt es in vielfältiger Ausprägung.
4
Zumeist ist es ein fest im Controller integriertes Programm wie beim
5
C166 oder 68HC11. Dieses ermöglicht das Laden des Programms über die
6
Serielle Schnittstelle.

Damit könnte man auch fabrikneue Chips über eine sowieso vorhandene 
Schnittstelle vom PC aus flashen -- ohne J-Link oder ähnliches. Das 
lohnt sich noch viel mehr, wenn in einem Gerät mehrere uC verbaut sind. 
Nur einer müsste mit dem PC verbunden sein und der könnte die restlichen 
flashen -- ganz ohne ein zusätzliche Stecker und Kabel.

Auf dem Weg könnte auch ein Benutzer selbst Updates machen. Dabei dürfte 
sogar der Strom ausfallen, der Bootloader selbst wäre praktisch 
unkaputtbar, auch, weil der nie ein Update braucht. Bei selbstgebauten 
Bootloadern kommt man eher in Versuchung und kann damit das Gerät 
schrotten.

Zurück in die Gegenwart: Mit STM32, EFM32, LPCxxx ist das alles 
Realität, aber
PittyJ schrieb:
> Ich fand die ATSAMD irgendwie in der Zeit sehen geblieben,
> so aus dem letzten Jahrtausend.

Anscheinend haben nur die ATSAME70/S70/V70 so einen Bootloader. Wie 
werden die anderen ATSAM in der Kleinserie programmiert, also ohne 
Nadelbett und Roboter? Nutzt man den Programmier-Service von Microchip? 
Fummelt man wirklich dieses filigrane 10-polige SWD-Flachkabel an jeden 
einzelnen Baustein? Oder was übersehe ich da?

Die SWD-Schnittstelle an sich ist ja nicht schlecht, klein und stark und 
quasi genormt. Aber gerade deshalb möchte man ja keinen anderen Stecker 
verwenden. Oder?

Falls mehrere uC auf einer Platine sitzen, könnte einer die restlichen 
per Bit-Bang-SWD programmieren. Die Pins muss man eben opfern. Aber die 
Software? Laut "ARM Debug Interface® Architecture Specification" ist 
fast alles optional und müsste deshalb von Atmel dokumentiert werden. 
Ziemlich aussichtslos, oder kennt jemand eine "lib"?


1) https://www.mikrocontroller.net/articles/Bootloader

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Bauform B. schrieb:

> Nutzt man den Programmier-Service von Microchip?

Nö.

> Fummelt man wirklich dieses filigrane 10-polige SWD-Flachkabel an jeden
> einzelnen Baustein?

Was gibt es da zu fummeln? Auf dem Board ist ein Stecker, dort steckt 
man sich an, fertig.

> Die SWD-Schnittstelle an sich ist ja nicht schlecht, klein und stark und
> quasi genormt. Aber gerade deshalb möchte man ja keinen anderen Stecker
> verwenden. Oder?

Oder.

> Falls mehrere uC auf einer Platine sitzen, könnte einer die restlichen
> per Bit-Bang-SWD programmieren.

Wozu? Weil du zu faul bist, das Kabel umzustecken und eine andere 
Firmware zu brennen? OMG!

> Die Pins muss man eben opfern. Aber die
> Software? Laut "ARM Debug Interface® Architecture Specification" ist
> fast alles optional und müsste deshalb von Atmel dokumentiert werden.
> Ziemlich aussichtslos, oder kennt jemand eine "lib"?

Wozu? Klingt so al ob du ein Problem suchst, das nicht da ist.

von Frank K. (fchk)


Lesenswert?

Bauform B. schrieb:

> Anscheinend haben nur die ATSAME70/S70/V70 so einen Bootloader. Wie
> werden die anderen ATSAM in der Kleinserie programmiert, also ohne
> Nadelbett und Roboter? Nutzt man den Programmier-Service von Microchip?
> Fummelt man wirklich dieses filigrane 10-polige SWD-Flachkabel an jeden
> einzelnen Baustein? Oder was übersehe ich da?

Üblicherweise werden Leiterplatten in einem Nutzen gefertigt und später 
vereinzelt. Bei der üblichen maschinellen Bestückung findet diese auch 
vor der Vereinzelung statt. Dabei hat man einen Rahmen mit 
Passerbohrungen und eventuell Testcoupons für Impedanzkontrolle.

JTAG erlaubt den Aufbau einer Kette, in der alle Controller eines 
Nutzens hintereinander geschaltet sind. Man kann den Rahmen und die 
Frässtege nutzen, um diese Kette zu erstellen und auf einen Stecker am 
Nutzenrand zu führen. So kann man dann alle Controller eines Nutzens 
ohne Umzustecken programmieren und ggf auch den gesamten Nutzen per JTAG 
Boundary Scan testen. Bei der Vereinzelung werden die Verbindungen dann 
getrennt, und die Boards können später einzeln geupdatet werden.

SWD kann keine Kette bilden. Daher ist bei Controllern, die kein JTAG 
haben, so nicht anwendbar. Hier müsste man ggf. mit externen 
Multiplexern im Programmier-Rig arbeiten.

Wenn Deine Serie so klein ist, dass Du nicht mit Nutzen arbeitest, dann 
kannst Du genauso gut den manuellen Weg gehen.

Andere Möglichkeit: Pogo-Pins a la TagConnect. Probe draufhalten, 
Programmieren, nächster. Auchh wenn die TagConnect-Kabel teuer sind - so 
viele brauchst Du ja nicht.

fchk

: Bearbeitet durch User
von W.S. (Gast)


Lesenswert?

Bauform B. schrieb:
> Anscheinend haben nur die ATSAME70/S70/V70 so einen Bootloader. Wie
> werden die anderen ATSAM in der Kleinserie programmiert, also ohne
> Nadelbett und Roboter?

Was die Bootlader betrifft: Da gibt es eine breite Vielfalt von µC mit 
Bootlader bis hin zu µC ohne alles. Bei Nuvoton z.B. wird Flash in einem 
extra Bereich (LDROM) außerhalb des normalen Adreßbereiches vorgehalten, 
wo man seinen eigenen Bootlader hineinprogrammieren könnte.

Für Bastel-LP baut man sich am besten einen passenden Steckverbinder mit 
auf die LP. Für Serienfertigung ist das zu unbequem, da hab ich bislang 
irgendwo am LP-Rand ein paar Kontaktflächen vorgesehen, wo man dann per 
Nadeladapter draufpieksen kann. Am Rand deshalb, weil man da zumeist am 
besten den Kontaktdruck erzeugen kann, ohne dabei auf irgendwelche 
Bauteile drücken zu müssen. Also für Serien eine Programmierfassung für 
die LP.

W.S.

von Rudolph R. (rudolph)


Lesenswert?

Ich flashe über den SWD Stecker einen Bootloader auf meine ATSAM.
Mein CAN Bootloader arbeitet mit dem von mir gewünschten Protokoll bei 
den Parametern die ich für den Bus brauche - Datenrate / Identifier.
Unser USB Bootloader arbeitet mit unserer Produkt-ID und Vendor-ID
Die Bootloader kennen die Platinen und blinken mit der Debug-LED.

Ich habe jetzt auch Platinen mit GD32C103CBT6.
Die haben einen eingebauten Bootloader der auch USB unterstützt.
Dieser Bootloader hat zum einen eine fest vergebene Produkt-ID und 
Vendor-ID, ob das wirklich DFU ist bin ich noch nicht sicher und die 
Enumeration scheitert erst einmal mit dazugehörigen Fehlern unter 
Windows, weil ich einen Quarz angeschlossen habe.
Und ohne Software auf dem Gerät muss Boot0 auf High gezogen werden, 
dafür musste ich auf die Platinen extra einen Taster eindesignen. Und da 
ich kein Freund von Resets über das USB-Kabel bin habe ich zusätzlich 
noch einen Reset-Taster mit drauf gepackt.

Also wenn ich mir das so ansehe, dann möchte ich eigentlich einen 
eigenen USB Bootloader per SWD auf den GD32C103CBT6 flashen.
Und meine Platine hat einen Standard SWD Anschluss, das scheint bei 
STM32 Boards leider völlig unüblich zu sein.

von Bauform B. (bauformb)


Lesenswert?

Frank K. schrieb:
> Üblicherweise werden Leiterplatten in einem Nutzen gefertigt und später
> vereinzelt.
> Wenn Deine Serie so klein ist, dass Du nicht mit Nutzen arbeitest,
> dann kannst Du genauso gut den manuellen Weg gehen.

Na klar, es wäre ja auch schon ein Fortschritt, früher mussten 5 EPROMs 
programmiert werden. Aber am Wochenende darf man doch mal kucken was 
geht ;)

Nutzen sind das nächste Problem. Ein Beispiel für 1+6 uC wäre ein 
6-phasiger DC/DC-Wandler. Das ist eine Platine ungefähr im DIN-A4 
Format. Die geht ohne Nutzen, aber was ist mit Europakarten? Da müssen 
mindestens die langen Kanten glatt sein, also gibt es bisher auch keinen 
Nutzen.

> JTAG erlaubt den Aufbau einer Kette

Diese Mehrfach-Programmierung wäre die klassische JTAG-Aufgabe. 
Natürlich haben die beliebten M0+ kein JTAG.

> Pogo-Pins a la TagConnect. Probe draufhalten, Programmieren, nächster.

Hab' ich leichtsinnigerweise gemacht, "das werden ja nur 10 Stück". 
Inzwischen sind es bald 500 geworden, aber schön nach und nach, damit 
keiner auf Idee kommt, die Platine zu ändern.


W.S. schrieb:
> Für Bastel-LP baut man sich am besten einen passenden Steckverbinder mit
> auf die LP. Für Serienfertigung ist das zu unbequem, da hab ich bislang
> irgendwo am LP-Rand ein paar Kontaktflächen vorgesehen

Sag' ich doch. Noch bequemer wären natürlich die sowieso vorhandenen 
Stecker, nur will man auf denen keine SWD-Signale haben.

> Da gibt es eine breite Vielfalt von µC mit Bootlader

Ja? Verrat mir welche Cortex-M von Atmel?

von ... (Gast)


Lesenswert?

Mit einem PICKIT2!

von Bauform B. (bauformb)


Lesenswert?

Rudolph R. schrieb:
> Ich flashe über den SWD Stecker einen Bootloader auf meine ATSAM.

Genau das spart man bei vielen anderen uC. Deshalb hoffte ich, dass es 
auch für die ATSAM eine andere Lösung als SWD gibt.

> ohne Software auf dem Gerät muss Boot0 auf High gezogen werden,
> dafür musste ich auf die Platinen extra einen Taster eindesignen.

Ja, direkt geschenkt gibt es nichts. Ich hab' für BOOT und RESET mal 
einen HC4060 und 5 Kleinteile spendiert, damit wird der integrierte 
Bootloader per seriellem Break gestartet. Das ist Mega komfortabel bei 
der Entwicklung, funktioniert aber eben auch für Updates ohne das Gerät 
zu zerlegen.

> Und meine Platine hat einen Standard SWD Anschluss, das scheint bei
> STM32 Boards leider völlig unüblich zu sein.

Wer verbaut denn auch irgendwelche Demo-Boards?

von W.S. (Gast)


Lesenswert?

Rudolph R. schrieb:
> Und ohne Software auf dem Gerät muss Boot0 auf High gezogen werden,
> dafür musste ich auf die Platinen extra einen Taster eindesignen.

Dafür werde ich dich bei passender Gelegenheit mal nach Kräften 
bedauern.

Sowas macht man mit passenden Kontaktflächen auf der LP, wo eben auch 
Reset und Boot (bei ARM's) anliegen, ansonsten je nach Controller. Wenn 
es auf der LP nur ein paar Kontaktflächen sind, dann trägt das 
kostenmäßig nicht auf.

Es wird nur dann schwierig, wenn der Controller mehr an 
Versorgungsspannung beim Programmieren braucht als beim normalen Lauf - 
sowas ist mir aber noch nicht untergekommen.

W.S.

von Rudolph R. (rudolph)


Lesenswert?

Bauform B. schrieb:
>> Ich flashe über den SWD Stecker einen Bootloader auf meine ATSAM.
>
> Genau das spart man bei vielen anderen uC.

Und was genau spart man sich da?
Ob man sich nun einen Standard SWD auf die Platine baut oder einen 
eigenen SWD oder Teile um per USB/Seriell Adapter den eingebauten 
Bootloader mitsamt Umschaltung von Boot0 zu nutzen - wo ist der 
Unterschied?
Vor allem wenn man dann trotzdem einen eigenen Bootloader braucht?
Nur kann man über den SWD dann auch gleich noch Debuggen.

von Lothar (Gast)


Lesenswert?

Bauform B. schrieb:
> Verrat mir welche Cortex-M von Atmel?

Deswegen nimmt man Cortex-M von Atmel nur wenn es nicht anders geht.

Es gibt noch die Möglichkeit, welche mit Arduino Bootloader zu 
bestellen.

Der hat aber gegenüber dem ROM-Bootloader von anderen Herstellern den 
Nachteil, dass das Programm nicht mehr bei 0x0000 beginnen kann.

Ich hatte schon mal gefragt, warum Atmel ganz früher mal ROM-Bootloader 
standardmässig hatte z.B. bei den AT89 / FLIP und dann auf einmal nicht 
mehr, konnte keiner sagen.

von W.S. (Gast)


Lesenswert?

Rudolph R. schrieb:
> Vor allem wenn man dann trotzdem einen eigenen Bootloader braucht?
> Nur kann man über den SWD dann auch gleich noch Debuggen.

Was du nur mit dem ewigen Ruf nach Debuggen hast? Wenn ein µC auf einer 
Leiterplatte sitzt und alles zusammen in ein Gerät eingebaut wird, dann 
wird vermutlich kein Kunde, der dieses Gerät kauft, auf den Gedanken 
kommen, dort irgend etwas debuggen zu wollen.

Also, für den Entwickler des Gerätes mag die Debug-Möglichkeit durchaus 
interessant sein, nicht jedoch für Fertigung, Versand, Verkauf und 
Kunden. Und wenn man da irgend einen teuren Steckverbinder oder einen 
zusätzlichen Schaltkreis oder sonstwas, das Geld kostet, einbaut bloß um 
debuggen zu können, dann ist das unökonomisch. Und ein ab Hersteller im 
Chip befindlicher Bootlader, der obendrein auch noch in einem anderen 
Speichervolumen steht, was nicht zum normalen Programmspeicher gehört, 
stört nicht mit sich selbst die Firmware. Er hat aber (hoffentlich) die 
zwei großen Vorteile: erstens sollte er die zum Chip genau passenden 
Programmieralgorithmen haben und zweitens sollte er mit der Außenwelt 
über ein Interface verkehren, was kein spezielles und damit auch teures 
Programmiergeschirre erfordert. Und das gilt auch für den Bastler, 
sofern dieser ein paar Sekunden Zeit hat für's Brennen und nicht 
vornehmlich mit dem Debugger "programmiert".

W.S.

von Bauform B. (bauformb)


Lesenswert?

Rudolph R. schrieb:
> Bauform B. schrieb:
>>> Ich flashe über den SWD Stecker einen Bootloader auf meine ATSAM.
>>
>> Genau das spart man bei vielen anderen uC.
>
> Und was genau spart man sich da?

Arbeit in der Produktion, das Gefummel mit den SWD-Kabeln. Ein USB-Kabel 
zum PC reicht dann für alle uC auf der Platine.

> Ob man sich nun einen Standard SWD auf die Platine baut oder einen
> eigenen SWD oder Teile um per USB/Seriell Adapter den eingebauten
> Bootloader mitsamt Umschaltung von Boot0 zu nutzen - wo ist der
> Unterschied?

Für die Entwicklung will man natürlich einen SWD-Stecker, später muss 
der nicht mehr bestückt werden. In der Produktion will man Stecker für 
Grobmotoriker und davon möglichst wenig. Beim Kunden will man garkeine 
Stecker anfassen (wenigstens, wenn sowieso etwas PC-ähnliches verbaut 
ist).

> Vor allem wenn man dann trotzdem einen eigenen Bootloader braucht?

Den braucht man eben nur, wenn die Anwendung den braucht. Und dann ist 
er praktisch ein Teil des normalen Anwendungsprogramms. Jedenfalls von 
der Handhabung in der Produktion her.

von Bauform B. (bauformb)


Lesenswert?

Lothar schrieb:
> Deswegen nimmt man Cortex-M von Atmel nur wenn es nicht anders geht.
>
> Es gibt noch die Möglichkeit, welche mit Arduino Bootloader zu
> bestellen.

Microchip bietet auch einen Programmier-Service, sogar für 0(!) bis 500 
Stück. Notfalls würde ich da meinen eigenen Bootloader flashen lassen.

> Der [Arduino-Bootloader] hat aber gegenüber dem ROM-Bootloader
> von anderen Herstellern den Nachteil, dass das Programm nicht
> mehr bei 0x0000 beginnen kann.

Naja, es muss irgendeinen Mechanismus zur Auswahl Bootloader/Anwendung 
geben. Ansonsten ist das doch egal.

> Ich hatte schon mal gefragt, warum Atmel ganz früher mal ROM-Bootloader
> standardmässig hatte z.B. bei den AT89 / FLIP und dann auf einmal nicht
> mehr, konnte keiner sagen.

Unglaublich. Und es kommt schlimmer: Viele Typen gibt es immer noch mit 
Bootloader, aber nur im WLCSP mit 0.4mm Pitch.

von Bauform B. (bauformb)


Lesenswert?

W.S. schrieb:
> Er hat aber (hoffentlich) die zwei großen Vorteile: erstens sollte er
> die zum Chip genau passenden Programmieralgorithmen haben und zweitens
> sollte er mit der Außenwelt über ein Interface verkehren, was kein
> spezielles und damit auch teures Programmiergeschirre erfordert.

Vor allem erstens, und das ohne Updates für das Programmiergerät.
Warum gibt es dafür einen Minuspunkt? Wer war das?

von M. Н. (Gast)


Lesenswert?

Also den internen Bootloader nutzen denke ich für Produktion nur wenige.
UARt ist einfach ein Krampf, weil langsam und was anderes macht auch 
nicht wirklich Sinn.

Wenn du das Ganze richtig machst, hast du irgendwo Testpunkte auf der 
Platine wo sich in der Fertigungsstraße der Nadeladapter andockt und 
dann kannst du über JTAG dein Programm reinpumpen. In der Regel muss ja 
eh noch mehr gemacht werden als das Programmieren. In der Regel müssen 
zumindes tirgendwelche Spannungen geprüft, eventuell analogwerte 
abgeglichen, LEDs getestet... werden.

Zu teilen machen wir das so:
- Über JTAG wird mittels Boundary SCAN die umliegende HW getestet. 
(Verbindung zum EEPROM wird geprüft etc.). Dann wird die FW 
reingeschrieben.
- JTAG geht manchen aber zu Recht irgendwie auf den Keks. Teilweise 
haben wir deshalb eine Test-Firmware, die wir ebenfalls über JTAG 
reinflashen. Dann wird über UART mit dieser Test-SW kommuniziert und man 
kann alles mal wackeln lassen. Wenn der Test dann durch ist, wird das 
finale Programm über JTAG reingebrannt.

Es gibt keinen richtigen Grund einen Bootloader zu verwenden. (So gut 
wie)Jeder Chip hat einen JTAG Port und kann da mit ordentlich 
Geschwindigkeit geflasht werden.

Wenn du ganz groß bist kannst du natürlich auch dein fertiges Programm 
an den Chiphersteller schicken und dir dort eine Teilenummer dafür holen 
und dann brennen sie dir das im Endmessen rein.

Bauform B. schrieb:
> Anscheinend haben nur die ATSAME70/S70/V70 so einen Bootloader. Wie
> werden die anderen ATSAM in der Kleinserie programmiert, also ohne
> Nadelbett und Roboter? Nutzt man den Programmier-Service von Microchip?
> Fummelt man wirklich dieses filigrane 10-polige SWD-Flachkabel an jeden
> einzelnen Baustein? Oder was übersehe ich da?

Also selbst für Kleinserie lohnt sich ein "Nadeladapter". Ich habe 
selbst privat einen: 
https://www.digikey.de/en/products/detail/tag-connect-llc/TC2050-IDC-NL/2605367?utm_adgroup=Accessories&utm_source=google&utm_medium=cpc&utm_campaign=Dynamic%20Search_EN_Product&utm_term=&productid=&gclid=EAIaIQobChMImMCS4LTw-AIVBbDtCh1Y1APEEAAYASAAEgLF9PD_BwE

Über die Jahre habe ich das Geld für den Stecker glaube ich schon durch 
gesparte Wannenstecker wieder drin., obwohl ich ihn mir initial nur 
zugelegt habe, weil ich es interessant fand und damit spielen wollte. 
Für eine Firma ist sowas natürlich überhaupt keine Investition. Einfach 
Testpunkte auf die Platine und gut isses.

von Lothar (Gast)


Lesenswert?

M. H. schrieb:
> Also den internen Bootloader nutzen denke ich für Produktion nur wenige.
> UARt ist einfach ein Krampf, weil langsam und was anderes macht auch
> nicht wirklich Sinn.

Je nachdem welche Schnittstelle drauf ist bieten die meisten Hersteller 
ROM-Bootloader für UART, USB, CAN, Ethernet

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:
> Aber gerade deshalb möchte man ja keinen anderen Stecker verwenden.
> Oder?

Wenn dich der 10polige genormte Stecker stört: letztlich kannst du ihn 
auf drei Leitungen reduzieren, also genauso viel oder wenig wie bei 
einer UART (GND, SWCLK, SWDIO). Die Referenzspannung muss ja nicht 
unbedingt wirklich vom Target kommen, wenn man mit einem UART-Protokoll 
programmiert, würde sie auch nicht daher kommen.

Außerdem ist das SWD-Protokoll ja auch genormt, du kannst also 
irgendwas nehmen, was SWD spricht. Wenn es die denn mal wieder zu 
kaufen gibt, kann das ein MPSSE-fähiger FTDI sein, den kannst du dann 
auch gleich mit drauf montieren auf was auch immer als 
Inbetriebnahme-Einrichtung nötig ist (oder wenn du willst, auch gleich 
mit aufs Board selbst, bei einem FT2232 kann der zweite Kanal dann noch 
eine UART übernehmen).

Niemand schreibt dir vor, dass es unbedingt ein Atmel-ICE sein muss … 
selbst einen STlink kannst du dafür nehmen, ich fand die immer nur 
irgendwie ein bissel "störrischer" und habe es lieber andersrum gemacht 
(Atmel-ICE für STM32Fxxx).

von Bauform B. (bauformb)


Lesenswert?

M. H. schrieb:
> In der Regel muss ja eh noch mehr gemacht werden als das
> Programmieren. In der Regel müssen zumindes tirgendwelche
> Spannungen geprüft, eventuell analogwerte abgeglichen,
> LEDs getestet... werden.

Genau, und dafür reichen meistens die Stecker, die sowieso vorhanden 
sind und das SWD-Kabel wäre ein Stecker mehr.

> Teilweise haben wir deshalb eine Test-Firmware, die wir ebenfalls
> über JTAG reinflashen. Dann wird über UART mit dieser Test-SW
> kommuniziert und man kann alles mal wackeln lassen. Wenn der Test
> dann durch ist, wird das finale Programm über JTAG reingebrannt.

Mit dem STM32-Bootloader kann ich das Testprogramm sogar ins RAM laden, 
der EFM32-Bootloader kann nur Flash.

> Es gibt keinen richtigen Grund einen Bootloader zu verwenden. (So gut
> wie)Jeder Chip hat einen JTAG Port und kann da mit ordentlich
> Geschwindigkeit geflasht werden.

Rein zum flashen geht SWD doch genauso gut, es könnte sogar schneller 
sein?

> Wenn du ganz groß bist kannst du natürlich auch dein fertiges Programm
> an den Chiphersteller schicken und dir dort eine Teilenummer dafür holen
> und dann brennen sie dir das im Endmessen rein.

Groß ist relativ, die Preisliste bei Microchip fängt mit 0-500 an :)

> Also selbst für Kleinserie lohnt sich ein "Nadeladapter". Ich habe
> selbst privat einen:

Zum Debuggen taugt das nicht, also muss ich den Platz für den 10-poligen 
Stecker sowieso spendieren. Und der braucht weniger Platz als ein 
Tag-Connect mit Führungsstiften. Alles schon probiert :(

von Bauform B. (bauformb)


Lesenswert?

Jörg W. schrieb:

> Wenn dich der 10polige genormte Stecker stört: letztlich kannst du ihn
> auf drei Leitungen reduzieren, also genauso viel oder wenig wie bei
> einer UART (GND, SWCLK, SWDIO).

Da fehlt auf jeden Fall noch Reset. Aber der große Unterschied ist: UART 
braucht in dem Vergleich NULL Pins, weil die Signale sowieso für das 
Gerät gebraucht werden. Gegen den 10-poligen an sich habe ich garnichts, 
das ist der Standard und alles andere wäre nur anders bzw. hätte andere 
Nachteile.

> Außerdem ist das SWD-Protokoll ja auch genormt, du kannst also
> irgendwas nehmen, was SWD spricht. Wenn es die denn mal wieder zu
> kaufen gibt, kann das ein MPSSE-fähiger FTDI sein, den kannst du dann
> auch gleich mit drauf montieren auf was auch immer als
> Inbetriebnahme-Einrichtung nötig ist (oder wenn du willst, auch gleich
> mit aufs Board selbst, bei einem FT2232 kann der zweite Kanal dann noch
> eine UART übernehmen).

Selbst das ist mit einem UART-Bootloader einfacher, dafür reicht der 
simpelste FT230X.

> Niemand schreibt dir vor, dass es unbedingt ein Atmel-ICE sein muss #
> selbst einen STlink kannst du dafür nehmen, ich fand die immer nur
> irgendwie ein bissel "störrischer" und habe es lieber andersrum gemacht
> (Atmel-ICE für STM32Fxxx).

Black Magic Probe, auch nicht lieferbar, aber sowas ist ja in jedem 
ordentlichen Haushalt vorhanden ;)

Aber schön langsam macht ihr mich nachdenklich...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:

>> Wenn dich der 10polige genormte Stecker stört: letztlich kannst du ihn
>> auf drei Leitungen reduzieren, also genauso viel oder wenig wie bei
>> einer UART (GND, SWCLK, SWDIO).

> Da fehlt auf jeden Fall noch Reset.

Ist optional, braucht man nicht immer und unbedingt, insbesondere nicht 
im Auslieferungszustand.

Wenn man drüber debuggen will, sollte man es aber auf jeden Fall dabei 
haben, um für alle Fälle gerüstet zu sein.

> Aber der große Unterschied ist: UART
> braucht in dem Vergleich NULL Pins, weil die Signale sowieso für das
> Gerät gebraucht werden.

Muss nicht bei jedem so sein. Kann auch gut sein, dass andere für den 
Rest dann USB bevorzugen.

> Selbst das ist mit einem UART-Bootloader einfacher, dafür reicht der
> simpelste FT230X.

Nur debuggen kann man damit nicht.

Wenn ich das gleiche Board aber während der Entwicklungsarbeit debuggen 
können möchte, was ich dann später auch ausliefere, dann brauche ich eh 
SWD drauf, in der einen oder anderen Form.

Wie schon (mal) geschrieben, bei einem früheren Brötchengeber haben wir 
dann tasächlich einfach einen FT2232 drauf gepackt. Das spart die 
Stöpselei mit dem SWD-Kabel, man kann damit flashen und debuggen und hat 
außerdem noch einen UART-Kanal.

Blöd nur, dass die Chipkrise die Dinger auf längere Zeit ins Reich des 
Unobtainium verlagert hat. :(

von Rudolph R. (rudolph)


Lesenswert?

Bauform B. schrieb:
> M. H. schrieb:
>> In der Regel muss ja eh noch mehr gemacht werden als das
>> Programmieren. In der Regel müssen zumindes tirgendwelche
>> Spannungen geprüft, eventuell analogwerte abgeglichen,
>> LEDs getestet... werden.
>
> Genau, und dafür reichen meistens die Stecker, die sowieso vorhanden
> sind und das SWD-Kabel wäre ein Stecker mehr.

Wenn man nur die Hälfte liest und quotet hast Du Recht.
Aber irgendwie zieht sich das durch den ganzen Thread, Du liest nur 
einen Teil und hast keine Argumente.
M.H. hat berichtet das ganz ohne Stecker zu machen, zwei Nadeln mehr auf 
dem Adapter machen ja nichts.

Wir haben eine Platine in Kleinst-Serie, da lohnt sich der Nadel-Adapter 
nicht, für die Basis-Inbetriebnahme messe ich mehrere Spannungen auf dem 
Board nach die auf keinem Stecker liegen.
Theorethisch hätte der Aurix Controller auf der Platine auch einen 
ROM-Bootloader über die serielle Schnittstelle, aber benutzen will den 
niemand und so wurde nicht mal der Versuch unternommen den regulär 
benutzbar zu machen. Da ist ein DAP Anschluss drauf, 10pol 1,27mm wie 
SWD, über den wird einer unser eigenen Bootloader geflasht.

Bauform B. schrieb:
>> Es gibt keinen richtigen Grund einen Bootloader zu verwenden. (So gut
>> wie)Jeder Chip hat einen JTAG Port und kann da mit ordentlich
>> Geschwindigkeit geflasht werden.
>
> Rein zum flashen geht SWD doch genauso gut, es könnte sogar schneller
> sein?

Wie er schrieb, über JTAG machen die einen Boundary Scan, damit ist JTAG 
da schon mal gesetzt und ob der Controller überhaupt SWD unterstützt ist 
quasi egal.

Bauform B. schrieb:
>> Also selbst für Kleinserie lohnt sich ein "Nadeladapter". Ich habe
>> selbst privat einen:
>
> Zum Debuggen taugt das nicht, also muss ich den Platz für den 10-poligen
> Stecker sowieso spendieren. Und der braucht weniger Platz als ein
> Tag-Connect mit Führungsstiften. Alles schon probiert :(

Mir sind die Tag-Connect auch zu fett, in dem Raster und vor allem mit 
den Löchern drum herum und Durchkontaktiert.
Ein Teil meiner Platinen hat für SWD einen BM05B-SRSS drauf, das ist ein 
einreihiger 5pol Stecker im 1mm Raster. V+/SWCLK/SWDIO/Reset/GND.
Funktioniert super und braucht nur ca. 50% von dem normalen SWD Stecker 
in 1,27mm.
Nur brauche ich dafür eine zusätzliche Adapter-Platine, sowas wird 
schnell sehr lästig wenn man die Platine nicht nur selber nutzt.

Jörg W. schrieb:
> Wenn dich der 10polige genormte Stecker stört: letztlich kannst du ihn
> auf drei Leitungen reduzieren, also genauso viel oder wenig wie bei
> einer UART (GND, SWCLK, SWDIO). Die Referenzspannung muss ja nicht
> unbedingt wirklich vom Target kommen, wenn man mit einem UART-Protokoll
> programmiert, würde sie auch nicht daher kommen.

Über den Verzicht von Reset bin ich bei einem ATSAMC21 schon mal 
gestolpert, der Controller war nicht mehr ansprechbar. Und bei VRef 
kommt es halt auf den Adapter an, mit einem JLink Edu Mini auf 3,3V 
dürfte das gar kein Problem sein, der AtmelICE dürfte so nicht 
funktionieren.

Lothar schrieb:
> Je nachdem welche Schnittstelle drauf ist bieten die meisten Hersteller
> ROM-Bootloader für UART, USB, CAN, Ethernet

Ja, sowas gibt es.
Nur, wie ich oben schrieb, was macht man wenn der CAN-Bootloader mit den 
falschen Identifiern arbeitet und/oder den falschen Paramern? Dazu noch 
das Protokoll. Richtig, einen eigenen CAN-Bootloader flashen.

Ich meine bei den LPC zum Beispiel war das so das man die ROM Funktionen 
für einen eigenen Bootloader nutzen kann, das macht den eigenen 
Bootloader schlanker und robuster, wenn ich sowas hätte würde ich auch 
versuchen das zu benutzen. Nur trotzdem nicht den ganzen Bootloader.

So, jetzt habe ich ein Steuergerät und will dieses über den im 
Controller eingebauten ROM-Bootloader flashen, der CAN liegt ja schon 
auf meinem Stecker.
Wie starte ich den ROM Bootloader?
Ein Jumper geht gar nicht, das Signal auf den vorhandenen Stecker zu 
legen ist auch keine Option.
Den ROM Bootloader immer zu starten geht nur wenn der zum einen schnell 
genug die Applikation startet und zum anderen den Bus nicht stört.
Den ROM Bootloader per Software zu starten geht erst wenn man Software 
auf dem Gerät hat.

Oder im Falle von dem GD32C103CBT6 - wie bringen ich dem USB ROM 
Bootloader bei von alleine zu starten und dabei keine Fehler in Windows 
zu erzeugen?
Eher gar nicht, einfach nur das USB-Kabel zu stecken wird nichts.
Die Windows-Fehler sind evtl. weg wenn ich einen 25MHz Quarz verwende, 
der Test steht noch aus, eigentlich wollte ich 16MHz verwenden und 
musste den schon auf 8MHz ändern.

Beim RP2040 ist es glaube ich so das der Bootloader automatisch startet 
wenn das Flash leer ist, zumindest passiert das nachdem man die Datei 
flash_nuke.uf2 geflasht hat, dann kommt nach dem Anstecken vom USB Kabel 
automatisch der UF2 Bootloader hoch auch ohne das man den Boot-Taster 
betätigen muss.
Ich bin kein Freund von dem UF2 oder dem RP2040, aber das der Bootloader 
automatisch startet wenn kein Programm da ist - nice.
Nur, wie aktualisiert man die Software ohne den Boot-Taster zu 
betätigen?

von Marc X. (marc_x)


Lesenswert?

M. H. schrieb:
> Also selbst für Kleinserie lohnt sich ein "Nadeladapter". Ich habe
> selbst privat einen:
> 
https://www.digikey.de/en/products/detail/tag-connect-llc/TC2050-IDC-NL/2605367?utm_adgroup=Accessories&utm_source=google&utm_medium=cpc&utm_campaign=Dynamic%20Search_EN_Product&utm_term=&productid=&gclid=EAIaIQobChMImMCS4LTw-AIVBbDtCh1Y1APEEAAYASAAEgLF9PD_BwE

Ich würde Tag-Connect nicht als Nadeladapter bezeichnen, zu viel 
Verwechslungsgefahr mit richtigen Prüfadaptern, welche sich für 
Kleinserie definitiv nicht lohnen, je nach Komplexität eines solchen 
Prüfadapters kann man den Gegenwert eines gut ausgestatteten 
Mittelklasse Fahrzeugs dafür hinlegen.

Ich war mal für einen Hersteller von ICT Hardware mit eigenem Adapterbau 
(Federkontakt und Starrnadel) tätig, praktisch gibt es nach oben keine 
Begrenzung, wenn der Prüfadapter speziell dafür entwickelte Elektronik 
enthält, für ein einfaches Modell, dessen Nadeln direkt auf die 
Anschlussblöcke verdrahtet wurde, war man aber schon mit 5000€ bis 
15000€ dabei (je nach Art und Anzahl der benötigten Nadeln)

Aber so muss ich sagen ist Tag-Connect schon ne schöne Sache.

von Bauform B. (bauformb)


Lesenswert?

Rudolph R. schrieb:
> Wenn man nur die Hälfte liest und quotet hast Du Recht.
> Aber irgendwie zieht sich das durch den ganzen Thread, Du liest nur
> einen Teil und hast keine Argumente.

Natürlich lese ich alles, ich will doch etwas lernen. Eben "Wie werden 
fabrikneue ATSAM geflasht?" oder anders gefragt "stört sich jemand außer 
mir am fehlenden Bootloader?". Die Frage ist beantwortet, anscheinend 
hat die Mehrheit keinen Stress mit SWD/JTAG in der Fertigung.

Für die Frage sollte ich garkeine Argumente haben, ich will ja 
niemandem zu etwas überreden. Ich versuche nur zu erklären, wie und 
warum ich diesen Stecker sparen will. Mit dem STM32-Bootloader 
funktioniert es ja problemlos, davon bin ich wohl verwöhnt.

> So, jetzt habe ich ein Steuergerät und will dieses über den im
> Controller eingebauten ROM-Bootloader flashen, der CAN liegt ja schon
> auf meinem Stecker.
> Wie starte ich den ROM Bootloader?
> Ein Jumper geht gar nicht, das Signal auf den vorhandenen Stecker zu
> legen ist auch keine Option.
> Den ROM Bootloader immer zu starten geht nur wenn der zum einen schnell
> genug die Applikation startet und zum anderen den Bus nicht stört.
> Den ROM Bootloader per Software zu starten geht erst wenn man Software
> auf dem Gerät hat.

Auch das kann schief gehen. Wenn ein Update abgebrochen wird oder jemand 
eine falsche Firmware aufspielt, kann der Bootloader nicht mehr 
gestartet werden. In dem Fall hilft es auch nichts, wenn der Bootloader 
immer startet, es ist ja Firmware vorhanden. Selbst CRC über die 
komplette Firmware hilft nur gegen ein abgebrochenes Update. Taster oder 
Jumper will niemand, also bleibt nur ein Signal vom Programmiergerät 
oder übergeordneten Rechner.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rudolph R. schrieb:
> Über den Verzicht von Reset bin ich bei einem ATSAMC21 schon mal
> gestolpert, der Controller war nicht mehr ansprechbar.

Ja, schrieb ich ja: für einen neuen (unprogrammierten) Controller sollte 
es immer ohne funktionieren.

Ich würde ansonsten auch nicht drauf verzichten, vor allem nicht, wenn 
damit wirklich debuggt werden soll.

> Und bei VRef
> kommt es halt auf den Adapter an, mit einem JLink Edu Mini auf 3,3V
> dürfte das gar kein Problem sein, der AtmelICE dürfte so nicht
> funktionieren.

Man kann es aber halt auf der Seite des ICE "synthetisieren". Ist ja nur 
das Referenzpotenzial für die Pegelwandler. Wenn man weiß, dass auf dem 
Board 3,3 V sind, dann kann man die genauso gut extern einspeisen und 
braucht (wenn der Platz wirklich knapp ist) einen Draht weniger am 
Connector.

von Bauform B. (bauformb)


Lesenswert?

Bauform B. schrieb:
>> Niemand schreibt dir vor, dass es unbedingt ein Atmel-ICE sein muss #
>> selbst einen STlink kannst du dafür nehmen, ich fand die immer nur
>> irgendwie ein bissel "störrischer" und habe es lieber andersrum gemacht
>> (Atmel-ICE für STM32Fxxx).
>
> Black Magic Probe, auch nicht lieferbar, aber sowas ist ja in jedem
> ordentlichen Haushalt vorhanden ;)

Für die ATSAMC21 und C20 braucht man wahrscheinlich einen Programmer und 
die spezielle PC-Software von Atmel. Die Chips haben eine Device Service 
Unit zwischen den SWD-Pins und dem ARM-Kern:
1
13.5.1 I/O Lines
2
The SWCLK pin is by default assigned to the DSU module to allow
3
debugger probe detection and to stretch the CPU reset phase.
4
For more information, refer to 13.6.3. Debugger Probe Detection.
Weil diese Unit der "Intellectual Property Protection" dient, dürfte es 
aussichtslos sein, diese Chips mit der BMP zu flashen oder zu debuggen.

Die ATSAMx70 stehen auch nicht in dieser Liste 
https://black-magic.org/knowledge/faq.html, aber das sind halbwegs 
normale Chips, die müsste man selbst nachrüsten können.

: Bearbeitet durch User
von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:

> Für die ATSAMC21 und C20 braucht man wahrscheinlich einen Programmer und
> die spezielle PC-Software von Atmel.

Müsste ich mir mal ein Demoboard beschaffen.

> Die ATSAMx70 stehen auch nicht in dieser Liste
> https://black-magic.org/knowledge/faq.html, aber das sind halbwegs
> normale Chips, die müsste man selbst nachrüsten können.

SAME70 haben wir mit FT2232 programmiert und debuggt.

von Lothar (Gast)


Lesenswert?

Wir hatten hier schon öfter bei EFM32 und EFM8 dass man über SWD nicht 
mehr rein kam. Das Problem ist unten beschrieben.

Der EFM8 hat aber einen Bootloader im schreibgeschützten Flash ab 0xFA00 
und damit kann man auch dann das Programm ab 0x0000 löschen und der uC 
funktioniert wieder.

Beim EFM32 ist (wie auch beim Arduino) der Bootloader ab 0x0000 und das 
Programm ab 0x1000 und es ist zu schaffen, den Bootloader zu 
überschreiben und nicht mehr über SWD rein zu kommen, dann kann man das 
Board wegwerfen.

Daher ist ein ROM Bootloader (wie bei LPC) oder ein geschützter 
Bootloader (wie bei EFM8) durchaus wichtig, nicht nur für Field Updates.

https://community.silabs.com/s/article/unlock-a-bricked-efm32?language=en_US

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Lothar schrieb:
> Beim EFM32 ist (wie auch beim Arduino) der Bootloader ab 0x0000

"Beim Arduino" ist sehr allgemein, da es mittlerweile ja auch Arduinos 
auf ARM-Basis gibt.

Bei den AVRs ist der Bootloader nicht ab Adresse 0. Bei den ganz 
kleinen, die keine SPM protection kennen, könnte man ihn theoretisch 
dahin legen, aber solche werden bei Arduinos eh nicht benutzt. Bei allen 
anderen muss zumindest der Teil, der den SPM-Befehl ausführt, im für den 
Bootloader reservierten Bereich im hinteren Teil des Flashs liegen (das 
selbst dann, wenn man keinen Bootloader benutzen will, sondern bspw. aus 
der Applikation heraus Konfigurationdaten oder dergleichen in den Flash 
schreiben möchte).

> Daher ist ein ROM Bootloader (wie bei LPC) oder ein geschützter
> Bootloader (wie bei EFM8) durchaus wichtig, nicht nur für Field Updates.

Nur, weil das bei den EFMs so ist, heißt das nicht, dass das überall so 
sein muss. Andere Controller lassen sich über das Debuginterface 
wiederherstellen, aber dafür wird die bereits erwähnte /RESET-Leitung 
dann benötigt (damit man verhindern kann, dass die bereits gestartete 
Firmware das Debuginterface deaktiviert).

von Rudolph R. (rudolph)


Lesenswert?

Bauform B. schrieb:
> Für die ATSAMC21 und C20 braucht man wahrscheinlich einen Programmer und
> die spezielle PC-Software von Atmel.

Die ATSAMC21 flashe ich auch gelegentlich mal mit einem Segger JLink Edu 
Mini.
Ich habe gerade mal das Segger J-Flash Lite V7-66b gestartet, da sind 
alle ATSAMC20 und ATSAMC21 drin zu finden.
Nur wenn man den ATSAMC2x mit 5V betreibt sollte man zum Flashen nicht 
den kleinen JLink verwenden, der ist nur für 3,3V.
Damit geht das auch in der Kommandozeile, mit Linux oder MacOS.
Und den JLink kann man auch mit dem Microchip Studio benutzen.

von Rudolph R. (rudolph)


Lesenswert?

Lothar schrieb:
> Daher ist ein ROM Bootloader (wie bei LPC) oder ein geschützter
> Bootloader (wie bei EFM8) durchaus wichtig, nicht nur für Field Updates.

Den Bootloader-Bereich kann man mindestens bei den ATSAMC2x und ATSAMD5x 
/ ATSAME5x schützen, der Bootloader sollte allerdings auch nicht so 
stumpf sein sich selber zu löschen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rudolph R. schrieb:
> der Bootloader sollte allerdings auch nicht so stumpf sein sich selber
> zu löschen.

Das halte ich eigentlich für ein essenzielles Feature eines Bootloaders. 
:-)

von Bauform B. (bauformb)


Lesenswert?

Lothar schrieb:
> Beim EFM32 ist (wie auch beim Arduino) der Bootloader ab 0x0000 und das
> Programm ab 0x1000 und es ist zu schaffen, den Bootloader zu
> überschreiben und nicht mehr über SWD rein zu kommen, dann kann man das
> Board wegwerfen.

Eine wertvolle Warnung, danke. Allerdings behauptet der Beitrag hinter 
deinem Link, dass man es reparieren kann? Zumindest mit dem richtigen 
Spezialwerkzeug? Ja, das muss man erstmal haben...


Rudolph R. schrieb:
> Ich habe gerade mal das Segger J-Flash Lite V7-66b gestartet, da sind
> alle ATSAMC20 und ATSAMC21 drin zu finden.

Das will ich doch stark hoffen. Alternativen sind immer gut, aber es ist 
eben auch Spezialwerkzeug. Warum funktioniert sowas beim STM32 viel 
einfacher und ohne Tricks? Ja, o.k., connect under reset könnte man als 
Trick bezeichnen. Aber: die STM32 haben ein Selbstzerstörungs-Bit das 
wirklich und endgültig funktioniert :)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:
> Warum funktioniert sowas beim STM32 viel einfacher und ohne Tricks?

Was genau funktioniert da "einfacher und ohne Tricks"?

Ich habe zwischen STM32 und SAMxx in dieser Hinsicht keine großen 
Unterschiede erlebt. Beide sind da eher einfach in der Handhabung.

von Bauform B. (bauformb)


Lesenswert?

Jörg W. schrieb:
> Bauform B. schrieb:
>> Warum funktioniert sowas beim STM32 viel einfacher und ohne Tricks?
> Was genau funktioniert da "einfacher und ohne Tricks"?

Die STM32 haben diese "Device Service Unit" nicht, oder sie ist so 
transparent, dass ich noch nicht darüber gestolpert bin. Beim ATSAMC2x 
verstehe ich das Reference Manual so, dass der Debugger da irgendwas 
"entriegeln" muss. Wenn ich das falsch verstehe, ist es ein Mangel des 
Manuals ;) Jedenfalls wird es mit der BMP erstmal nicht funktionieren 
und der target driver wäre deutlich komplizierter als normal.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich sehe da nichts in der Beschreibung, was du "entriegeln" müsstest.

Es steht nur, dass man mit einer Fuse (NVMCTRL) da Zugriffe sperren 
kann, das ist ein ganz gewöhnliches Locking, damit man den Flash gegen 
Auslesen schützen kann. Sowas wird STM32 ganz sicher auch haben. :-)

von Rudolph R. (rudolph)


Lesenswert?

Jörg W. schrieb:
> Rudolph R. schrieb:
>> der Bootloader sollte allerdings auch nicht so stumpf sein sich selber
>> zu löschen.
>
> Das halte ich eigentlich für ein essenzielles Feature eines Bootloaders.
> :-)

In der Tat, aber man erlebt auch immer wieder Überraschungen. :-)
Ich habe zum Beispiel mal Marlin auf eine 3D Drucker Platine mit einem 
M1284 geflasht und das Binary war knapp zu groß.
Ich hoffe nur, dass das am vom Hersteller installierten Arduino 
Bootloader lag das der sich selber zerlegt hat.

Bauform B. schrieb:
> Das will ich doch stark hoffen. Alternativen sind immer gut, aber es ist
> eben auch Spezialwerkzeug. Warum funktioniert sowas beim STM32 viel
> einfacher und ohne Tricks?

Selbst ein USB/Seriell Wandler fällt doch unter Spezialwerkzeug. :-)
Und die STM32 sowie GD32 kann ich mit dem JLink auch Flashen.
Oder auch den EFM32PG22 der hier noch so herum liegt.
Damit ist das eher ein Universal-Werkzeug. :-)

von René K. (king)


Lesenswert?

Lothar schrieb:
> Beim EFM32 ist (wie auch beim Arduino) der Bootloader ab 0x0000 und das

Das kommt auf den EFM32 an. Bei dem EFM32, der hier gerade vor mir 
liegt, sitzt der Bootloader in einem eigenen Bereich ab 0x0FE10000.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:
> Beim ATSAMC2x verstehe ich das Reference Manual so, dass der Debugger da
> irgendwas "entriegeln" muss.

Wie schon geschrieben, ich weiß nicht, an welcher Stelle du das heraus 
gelesen haben willst.

Habe hier ein älteres, selbst gestricktes Testboard mit einem SAMD20. 
Habe ich sonst immer mit dem Atmel-ICE bedient (aber auch nur generisch 
mit OpenOCD, nicht mit irgendwelchen Studios oder Atmel- oder 
Microchip-Programmen). Habe spaßeshalber mal mein FT232H-Modul dran 
gehängt (nur SWDIO, SWDCLK und GND, nichtmal /RESET), funktioniert 
problemlos. Kann damit den Speicher auslesen, das Programm anhalten, 
Register lesen, NVM Fuse row lesen, den Flash löschen und mit dem vorher 
ausgelesenen Image wieder überschreiben.

Diese Device Service Unit ist also erst einmal dem SWD nicht im Weg.

ps: Das Einzige, was ohne /RESET nicht ging (und daher einen power cycle 
brauchte): nach dem Löschen des Flashs ist das Ding natürlich sofort in 
einen hard fault gerannt. Da es natürlich auch keinen hard fault handler 
gibt, entsteht daraus ein double fault, der lässt sich ohne einen Reset 
nicht auflösen.

: Bearbeitet durch Moderator
von Bauform B. (bauformb)


Lesenswert?

Jörg W. schrieb:
> Bauform B. schrieb:
>> Beim ATSAMC2x verstehe ich das Reference Manual so, dass der Debugger da
>> irgendwas "entriegeln" muss.
>
> Wie schon geschrieben, ich weiß nicht, an welcher Stelle du das heraus
> gelesen haben willst.
1
13.5.1 I/O Lines
2
The SWCLK pin is by default assigned to the DSU module to allow
3
debugger probe detection and to stretch the CPU reset phase.
Bis hier ist es eindeutig, der Debugger bekommt keine Verbindung zur CPU 
oder zum Bus.
1
13.6.2 CPU Reset Extension
2
“CPU reset extension” refers to the extension of the reset phase
3
of the CPU core after the external reset is released. This ensures
4
that the CPU is not executing code at startup while a debugger is
5
connects to the system. The debugger is detected on a RESET release
6
event when SWCLK is low. (...) To release the CPU, write a '1' to
7
STATUSA.CRSTEXT.
Das heißt, wenn SWCLK low ist, muss der Debugger diese '1' schreiben, 
sonst geht garnichts. Soweit ist immer noch klar, dass der Debugger 
diesen Mechanismus kennen muss. Ein Debugger, der die ATSAMD2x, C2x 
nicht ausdrücklich unterstützt, kann das evt. nicht.

An der Stelle hatte ich aufgegeben, aber es gibt drei Möglichkeiten, 
warum es trotzdem funktionieren könnte. Natürlich mit einem 
Original-Atmel Debugger oder einem J-Link. Zweitens: falls SWCLK 
normalerweise high ist, wird die Reset Extension wahrscheinlich nicht 
aktiv. Drittens: dieser Mechanismus ist Standard, alle SWD-Debugger 
kennen den sowieso, nur ich nicht, weil STM den nie erwähnt.

Natürlich ist das kein Problem, wenn man rechtzeitig einen J-Link 
bekommt. Und weil man für diese Chips sowieso etwas solides für die 
Fertigung braucht, muss das wohl sein. Haben die kleineren J-Link 
eigentlich einen eingebauten gdb-Server?

Übrigens ist der fehlende Bootloader ein Vorteil: man muss einen 
eigenen schreiben. Bei Chips mit Bootloader versucht man erstmal den zu 
benutzen und schreibt am Ende doch einen eigenen ;)

von Lothar (Gast)


Lesenswert?

Bauform B. schrieb:
> Allerdings behauptet der Beitrag hinter
> deinem Link, dass man es reparieren kann? Zumindest mit dem richtigen
> Spezialwerkzeug?

Ja mit dem "Spezialwerkzeug" J-Link nur hat ja schon einer geschrieben, 
dass es damit auch nicht ging, weil das Zeitfenster sehr kurz ist.

> Natürlich mit einem Original-Atmel Debugger oder einem J-Link

Es gibt ja nicht nur die J-Link SWD Debugger sondern auch "High-Speed" 
SWD Programmer, die wir noch nie genutzt haben, aber scheinbar für 
Production Programming gedacht?

https://www.segger.com/products/debug-probes/j-link/models/model-overview/

https://www.segger.com/supported-devices/flasher/

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:

> Bis hier ist es eindeutig, der Debugger bekommt keine Verbindung zur CPU
> oder zum Bus.

Nein, das lese ich da nicht raus.

Die device service unit überwacht lediglich SWDCLK, um einen Debugger zu 
erkennen.

> An der Stelle hatte ich aufgegeben, aber es gibt drei Möglichkeiten,
> warum es trotzdem funktionieren könnte. Natürlich mit einem
> Original-Atmel Debugger oder einem J-Link.

Wie ich schrieb, habe ich den extra nicht benutzt, sondern einen 
generischen FTDI-Bitbanger.

> Zweitens: falls SWCLK
> normalerweise high ist, wird die Reset Extension wahrscheinlich nicht
> aktiv.

Möglich.

Habe jetzt versucht, ob ich in OpenOCD irgendwelches Spezial-Handling 
dafür finde, aber sieht mir nicht danach aus. Also gut möglich, dass die 
Reset Extension da einfach gar nicht aktiviert wird.

> Drittens: dieser Mechanismus ist Standard, alle SWD-Debugger
> kennen den sowieso, nur ich nicht, weil STM den nie erwähnt.

Wenn man nach STATUSA.CRSTEXT gugelt, scheint das tatsächlich nur die 
SAMxx zu betreffen.

> Natürlich ist das kein Problem, wenn man rechtzeitig einen J-Link
> bekommt.

Wie geschrieben, ich habe einen FTDI benutzt und damit das SWD gemacht.

Wenn es damit geht, sollte es folglich mit jedem gehen, der SWD 
überhaupt kann.

> Und weil man für diese Chips sowieso etwas solides für die
> Fertigung braucht, muss das wohl sein. Haben die kleineren J-Link
> eigentlich einen eingebauten gdb-Server?

Der GDB-Server ist ja immer auf der PC-Seite (zumindest, solange der 
Debugger kein eigenes Ethernet hat). Aber ja, den gibt's für den 
Segger-Kram meines Wissens überall.

Ansonsten geht natürlich auch OpenOCD mit J-Link, und da ist ebenfalls 
immer ein GDB-Server dabei (wenn man ihn nicht per Konfiguration 
abschaltet).

von Rudolph (Gast)


Lesenswert?

Den ATSAMC2x, ATSAMD2x und ATSAMD5x / ATSAME5x soll man am SWCLK einen 
Pullup verpassen.
So im Gegensatz zu dem GD32C103 der an SWDIO und SWCLK einen Pulldown 
haben möchte.

Die DSU nutzen wir in den USB/CAN und USB/LIN Interfaces für eine 
CRC-32.
Aber das man mit der ein Chip-Erase per Software auslösen kann, ugh, 
vielleicht doch mal schauen wie man den PAC (Peripheral Access 
Controller) benutzt. :-)

von Bauform B. (bauformb)


Lesenswert?

Rudolph schrieb:
> Den ATSAMC2x, ATSAMD2x und ATSAMD5x / ATSAME5x soll man am SWCLK einen
> Pullup verpassen.
> So im Gegensatz zu dem GD32C103 der an SWDIO und SWCLK einen Pulldown
> haben möchte.

Die EFM32 und STM32 haben intern am SWCLK einen Pulldown und am SWDIO 
einen Pullup. Die LPC (mindestens der LPC5410x) braucht extern an beiden 
Pins einen Pullup. Das gute an Standards ist, dass es so viele davon 
gibt :)

Jörg W. schrieb:
> Wenn man nach STATUSA.CRSTEXT gugelt, scheint das tatsächlich nur die
> SAMxx zu betreffen.

Wenn man das alles zusammenzählt, kann man wohl vergessen, mal eben 
einen neuen target driver für die Black Magic Probe zu schreiben :(

von Bauform B. (bauformb)


Lesenswert?

Rudolph schrieb:
> Aber das man mit der ein Chip-Erase per Software auslösen kann, ugh,
> vielleicht doch mal schauen wie man den PAC (Peripheral Access
> Controller) benutzt. :-)

Warum? Der Chip ist doch danach wie neu ;)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:
> Wenn man das alles zusammenzählt, kann man wohl vergessen, mal eben
> einen neuen target driver für die Black Magic Probe zu schreiben :(

Da wirst du nichts schreiben müssen.

Reicht es nicht, dass ich dir nun mehr als einmal erläutert habe, dass 
sich das Ding problemlos mit einem völlig generischen SWD-Treiber auf 
Basis eines FT232H benutzen lässt? Noch generischer geht's wohl kaum, 
und das wird deine geliebte Black Magic Probe dann sicher auch können.

Ich kenne die Black Magic Probe nicht weiter. Wenn du willst, kannst du 
sie mir gern zum Testen her senden.

von Rudolph (Gast)


Lesenswert?

Bauform B. schrieb:
> Wenn man das alles zusammenzählt, kann man wohl vergessen, mal eben
> einen neuen target driver für die Black Magic Probe zu schreiben :(

Die ATSAMD2x werden doch schon unterstützt, an vielen Stellen sind die 
identisch mit den ATSAMC2x.

Bauform B. schrieb:
> Rudolph schrieb:
>> Aber das man mit der ein Chip-Erase per Software auslösen kann, ugh,
>> vielleicht doch mal schauen wie man den PAC (Peripheral Access
>> Controller) benutzt. :-)
>
> Warum? Der Chip ist doch danach wie neu ;)

Das ist aber etwas schwierig dem Kunden das als Vorteil zu verkaufen 
dessen Gerät unverhofft gestorben ist. :-)
Ja nun, passiert nicht einfach so, aber funktionale Sicherheit und so...

von Bauform B. (bauformb)


Lesenswert?

Jörg W. schrieb:
> Reicht es nicht, dass ich dir nun mehr als einmal erläutert habe, dass
> sich das Ding problemlos mit einem völlig generischen SWD-Treiber auf
> Basis eines FT232H benutzen lässt? Noch generischer geht's wohl kaum,
> und das wird deine geliebte Black Magic Probe dann sicher auch können.

Die Hardware, hier der FT232H, kann das natürlich auf jeden Fall. Aber 
welches Bit man wann setzen muss, weiß ja nur das Programm auf dem PC. 
Bei der BMP läuft das entsprechende Programm auf einem STM32F103. Aber 
egal wo, jemand muss diese Spezialfunktion programmiert haben (oder eben 
nicht).

> Ich kenne die Black Magic Probe nicht weiter. Wenn du willst, kannst du
> sie mir gern zum Testen her senden.

Sehr nett, danke! Ich hoffe, dass ich nicht darauf zurückkommen muss. 
Ich könnte mir ja einfach ein Evaluation Board besorgen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Bauform B. schrieb:
> Die Hardware, hier der FT232H, kann das natürlich auf jeden Fall. Aber
> welches Bit man wann setzen muss, weiß ja nur das Programm auf dem PC.

OpenOCD hat zwar ein entsprechendes Kommando (dsu_reset_deassert) 
implementiert, aber da ich das nicht benutzen musste, wird's wohl auch 
mit der Black Magic Probe gehen.

Rudolph schrieb:
> Die ATSAMD2x werden doch schon unterstützt, an vielen Stellen sind die
> identisch mit den ATSAMC2x.

An dieser Stelle sind zumindest Blockdiagramme und Beschreibungen 
gleich.

von Bauform B. (bauformb)


Lesenswert?

Rudolph schrieb:
> Die ATSAMD2x werden doch schon unterstützt, an vielen Stellen sind die
> identisch mit den ATSAMC2x.

Stimmt auch wieder; gerade die DSU sieht sehr ähnlich aus. Die D2 hatte 
ich gleich wieder vergessen, kein CAN, kein Bootloader, auch kaum 
lieferbar...

Jörg W. schrieb:
> dsu_reset_deassert

ein gutes Stichwort, der Nebel lichtet sich ;)

: Bearbeitet durch User
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.