Programmierer für die neue tinyAVR-Familie basierend auf dem billigen chinesischen Konverter CH340

Die Unified Program and Debug Interface (UPDI) ist eine Ein-Draht-Schnittstelle zum Programmieren / Debuggen der neuen 8-Bit-Atmel-Mikrocontroller und ersetzt die Zwei-Draht-PDI-Schnittstelle, die zum Programmieren der AVR XMEGA-Mikrocontroller verwendet wird.

Bild

Also kam das Regiment der Atmelovsk-Protokolle - ISP, JTAG, debugWIRE, TPI, aWire, PDI, jetzt ist hier UPDI. Gleichzeitig ist die Ökosystemsituation bei AVR immer noch sehr hoffnungslos, so dass wir ihre Verwendung vollständig aufgeben wollten, aber der neueste Trend hat uns ein wenig erfreut, weshalb dieser Artikel geschrieben wurde.

Nur die glücklichen Besitzer des Atmel ICE-Programmiergeräts können das UPDI-Protokoll verwenden, das aufgrund der ziemlich seltsamen Wahl des Steckverbinders nicht sehr bequem zu verwenden ist und dessen Kauf im industriellen Maßstab nicht so billig ist. Darüber hinaus ist die Installation von Atmel Studio erforderlich, das sich regelmäßig weigert, damit zu arbeiten, da gemäß den Richtlinien unseres Unternehmens die meisten Computer keinen Zugang zum Internet haben und das Studio daher regelmäßig entweder nach Treibern oder nach einigen Bibliotheken durchsucht Momente, in denen der Programmierer im System sichtbar war, dh die Treiber wurden korrekt installiert, aber er wurde vom Studio selbst erst bemerkt, als es Zugriff auf das Netzwerk erhielt und nicht gewaltsam aktualisiert wurde.

Unmittelbar nachdem wir begonnen hatten, den neuen und recht praktischen ATTiny1616-Mikrocontroller in unseren Entwicklungen zu verwenden (über seine Vorteile später), bestand daher ein Bedarf an einem Tool, mit dem wir in der Produktion auf den Bootloader-Controller schreiben konnten. Natürlich ohne SMS und Registrierung des Internetzugangs.

Nach einigem Suchen entdeckte ich das pyupdi-Projekt auf Github (https://github.com/mraardvark/pyupdi) - eine Implementierung des UPDI-Protokolls in Python, und diese Implementierung basiert auf dem üblichen UART-Protokoll, außer ohne Pegelkonverter, die tatsächlich Noch praktischer, da Sie damit Standard-FTDI-Konverterchips oder deren chinesische Gegenstücke CH340 / 341 verwenden können.

Das Projekt wurde heruntergeladen und getestet, die Dinge liefen recht fröhlich. Aber nach ein paar Tagen wurde klar, dass er immer noch nicht ganz zu uns passte. Gründe:

  • Die Installation von Python und einer ganzen Gruppe von Paketen ist erforderlich (ich erinnere Sie daran, dass es sich um Computer ohne Internetzugang handelt). Ich musste fast ein Dutzend verschiedener Pakete herunterladen und manuell installieren, die sich gegenseitig mit Abhängigkeiten verbunden haben. Ja, im Prinzip können Sie aus einem Python-Skript eine ausführbare Datei auf einem anderen Computer erstellen. Dadurch wurde das Problem irgendwie gelöst, aber die Liste der Probleme endete nicht dort
  • Es gibt fast keine Fehlerprüfung im Skript. Jeder Fehler endet mit einem Interrupt, der auf eine Reihe von Dateien hinweist, die miteinander verknüpft sind, was für normale Mitarbeiter nicht sehr klar aussieht
  • Es ist unmöglich, den Inhalt des Speichers der Steuerung zu lesen, was es unmöglich macht, den Schreibvorgang zu beenden
  • Sicherung kann nicht gelesen werden
  • Die Geschwindigkeit des Skripts lässt zu wünschen übrig, 16 kb werden fast eine Minute lang geschrieben, dies ist auf das Fehlen jeglicher Optimierung während der Übertragung zurückzuführen, alles basiert auf engen Timings
  • fehlende Angabe des Aufnahmevorgangs
  • Das Projekt unterstützt keine Reihe von Prozessoren, die dies unterstützen könnten
  • Das Projekt ist halb tot und reagiert nicht auf Anfragen

Die Probleme wurden für einige Zeit im Rahmen von Python gelöst, aber nach jeder Korrektur musste ich das Projekt neu zusammensetzen, testen, damit der Wunsch bestand, das Skript auf etwas Vertrauteres und Schnelleres, dh in C, umzuschreiben. Wir sind schließlich Einbetter!

Nun kurz zu den Vorteilen der neuen tinyAVR 1-Serie:

  • echte Vereinheitlichung von Peripheriegeräten und Adressraum innerhalb von 2 kb bis 32 kb
  • bequeme Bootloader-Konfiguration (am Anfang des Speichers!)
  • signifikante Vereinfachung des ISP-Algorithmus (In-System-Programming)
  • Übergang zur von Neumann-Architektur
  • Bis zu 32 kb Flash-Speicher in einem kleinen Gehäuse (3 x 3 mm) mit 24 Pins, von denen bis zu 22 (!) als E / A verwendet werden können
  • das Vorhandensein eines internen Oszillators bei 16/20 MHz
  • geringere Abhängigkeit der Leistung von der Konfiguration der Sicherungen (Perpetual Headache AVR)
  • ausgezeichneter analoger Teil für einen kleinen Controller (ADC / DAC / Komparatoren mit der Möglichkeit der internen und externen Umschaltung von Ein- / Ausgängen)
  • Single-Wire-Programmierung und Debugging
  • extrem niedriger Verkaufspreis (ab 0,6 € für 16 kb)

Als eisernen Teil des Programmiergeräts haben wir den verfügbaren USB-UART TTL-Konverter auf Basis des chinesischen CH340-Chips wie folgt verwendet:

Bild

Für die Programmierung reicht es aus, die beiden Ausgänge RX und TX zu verbinden, da sie bereits mit einem Ausgangswiderstand von 1,5 k ausgestattet sind. Wenn Ihr Konvertermodell keinen Widerstand enthält, müssen Sie ihn hinzufügen. Der kombinierte Ausgang ist mit dem UPDI-Pin eines programmierbaren Chips verbunden, die Wandlermasse muss auch mit der Controller-Masse verbunden sein. Wenn Sie über eine externe Stromversorgung verfügen, müssen Sie nur darauf achten, ob diese der vom Konverter verwendeten Leistung entspricht (3,3 V oder 5 V). Wenn es nötig ist, können Sie die Schaltung mit der Steuerung und vom Wandler selbst mit Strom versorgen, was für die anfängliche Programmierung sehr praktisch sein kann.

Bild

Achtung! Der Widerstand ist optional und muss nur gelötet werden, wenn Ihr Konverter keine Schutzwiderstände am Ausgang hat.

Das einzige Problem, das mit dem CH340-Chip verbunden ist, ist, dass es in meiner Linux-Version des Programms nicht funktioniert hat, da das Paritätsbit im Programmierprotokoll verwendet wird und der CH340-Treiber in meiner Kernel-Version mit diesem Bit nicht richtig funktioniert. Vielleicht wird das Problem in naher Zukunft behoben, bisher hatte ich nicht die Geduld, dies zu tun.

Als Ergebnis von Arbeiten und Experimenten wurde das Updiprog- Programm in den IDE Code :: Blocks geschrieben und debuggt, deren Quellcodes auf dem Github veröffentlicht wurden .

Was wurde in dieser Version des Programms implementiert:

  • Es wurde die Möglichkeit hinzugefügt, den Inhalt des Flash-Speichers des Controllers in eine Hex-Datei einzulesen
  • Es wurde die Möglichkeit hinzugefügt, den Status aller Controller-Sicherungen zu lesen
  • wann immer möglich Fehlerbehandlung mit entsprechenden Meldungen hinzugefügt
  • Hinweis auf den Prozess des Schreibens / Lesens hinzugefügt
  • deutlich erhöhte Geschwindigkeit (ca. 6 Sekunden zum Lesen von 16 kb)
  • Unterstützung für alle Mikrocontroller der 1er-Serie hinzugefügt

Die anfängliche Größe des Programms beträgt ca. 25 KB, verglichen mit 5 Kopeken für das kompilierte Python-Quellenskript.

Ich hoffe, dass die geleistete Arbeit jemandem nützlich sein wird. Ich würde mich über Bewertungen und Vorschläge freuen.

Source: https://habr.com/ru/post/de427349/


All Articles