Der Microprozesser RP2040 (Pico) lässt sich - wie wohl alle ARM-basierten Prozessoren über 2 Leitungen programmieren: SWCLK - unidirektional und SWDIO - bidirektional. Zum Programmieren kan man einen zweiten Pico benutzen, der mit dem Programm "PicoProbe" oder auch "DebugProbe" versehen ist. Das Programm "PicoProbe" ist z.B. unter https://github.com/raspberrypi/debugprobe abrufbar. Dort stehen auch die Quellprogramme. Als Verbindung zwischen PicoProbe und dem zu programmierenden Prozessor reicht im Prinzip eine 3-adrige Leitung. Bei meinen Versuchen hat sich herausgestellt, dass die Länge der SWD-Leitung nicht mehr als 10..15m sein darf. Da hilft auch keine Verringerung der Baudrate. Bei meiner Anwendung befindet sich das Zielsystem im Gartenhaus, zu dem auch eine bisher ungenutzte LAN-Leitung liegt; Entfernung ca. 20m. Um die Signale zu verstärken braucht man Treiberbausteine, die aber nicht direkt bidirektional verfügbar sind. Man braucht mindestens einen Richtungsausgang, um das bidirektionale Signal aufzusplitten. Der ist im Originalprogramm nicht enthalten. Jedoch kann man das Programm so projekieren, dass es ein Output-Enable-Signal zur Verfügung stellt. Meines Erachtens ist das schlecht dokumentiert. Wer das gleiche Problem wie ich hat, kommt mit der hier vorgestellten Unterstützung sicher schneller zum Ziel. Das eigentliche Programm habe ich gar nicht verändert. Lediglich habe ich die Konfiguration angepasst. In der Bastellkiste lagen noch ungenutzte 74HC240, die allerdings die Signale invertieren. Der 74HC240 enthält 2x4 Treiber, die jeweils in den Tristate geschaltet werden können. Andere Treiberbausteine würden auch gehen. Eine uf2-Datei befindet sich mit allen dazugehörigen Dateien in der zip-Datei. Bis das PC-Programmm "VS-Code" diese Datei überhaupt erstellt hat, musste ich mich tief einlesen und auch viel probieren. Die cmake-Orgie, die RaspberryPi veranstaltet, ist nicht nach meinem Geschmack. Getestet habe ich das System mit eienm 40m Kabel. Eine längere Leitung stand mir nicht zur Verfügung. Allerdings musste ich die Adapter-Geschwindigkeit auf 2000kHz reduzieren, damit alles fehlerfrei durchlief. Harald
Ich will nicht Deine Arbeit schlecht machen, aber SWD ist konzipiert fürs Debuggen und Programmieren über eine Entfernung von vielleicht 15 cm. Es mag natürlich unter guten Umständen (und Reduktion der Geschwindigkeit) auch über längere Kabel funktionieren, aber das ist nicht Ziel der Sache. Bei Deinen Entfernungen mit 20 m und mehr musst Du daher schon harte Kompromisse eingehen und ob es dann so wirklich dauerhaft stabil läuft oder halt nur meistens ist auch nicht klar. Durch die langen Kabel ohne Treiber und Schutzbausteine wird das ganze auch empfindlich für Schäden durch entferntes Gewitter. Probleme durch Masseverschiebung sind natürlich auch zu befürchten. Ich würde daher ganz klar empfehlen anders vorzugehen: nimm ein differentiell getriebenes Übertragungsmedium, z.B. einen RS485-Bus. Und dann pack einen Bootloader auf den Microcontroller den Du über das RS485 ansteuern kannst und damit dann neue Firmware laden kannst. Ist wesentlich stabiler. Außerdem kannst Du den Bus natürlich auch für die Übertragung von Nutzdaten, zum Anbinden mehrerer Mikrocontroller etc. verwenden.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.