Forum: Mikrocontroller und Digitale Elektronik USB-C an ATmega328 oder STM32


von Philipp (krypt0n)


Angehängte Dateien:

Lesenswert?

Hallo Leute. Kann ich irgendwie einen USB-C Connector so verdrahten, 
dass er nicht nur die Versorgungsspannung übernimmt, sondern das ich 
auch komplett darüber programmieren kann? Also sprich so das J1 und J2 
entfallen. Hat das schonmal jemand umgesetzt? Der Controller wäre nackt, 
also es müsste auch der erste Zugriff funktionieren.
Es geht mir hier nur um den Controller plus USB. Der Rest ist nicht 
diskussionsrelevant, da nicht fertig.
Vielen Dank!

von Ben K. (bkaiser)


Lesenswert?

Klar, schau dir einfach die Schematic eines Arduino an. Du brauchst 
einen USB/Serial Wandler wie z.B. der CH340. Dazu noch einen 
entsprechenden Bootloader.

von Max D. (max_d)


Lesenswert?

Debug accessory mode könnte das sein was du suchst.
Hier ein Bsp wie man das machen könnte ( er hat es für SWD auf ARM, aber 
die Idee ist die gleiche): 
https://threadreaderapp.com/thread/1495860045728395278.html

Dann bastelst du dir halt noch ein dongle das beide CCs high zieht und 
isp auf den pins adaptiert.

Alternativ einen uC verwenden der mit einem usb-bootloader ab-Werk 
daherkommt (afaik haben das sogar die avr mit nativem usb drinnen)...

von Hannes (taurus16)


Lesenswert?

Moin,
auch wenn du es vllt nicht wissen möchtest, aber du wirst dich ziemlich 
verbiegen müssen, damit der Strom durch deine PNP in die eingezeichnete 
Richtung fließt.

Gruß

von Sebastian W. (wangnick)


Lesenswert?

Philipp schrieb:
> Es geht mir hier nur um den Controller plus USB.

Das funktioniert schon deshalb nicht weil du RESET hart mit GND 
verbunden hast. So kannst du den Atmega328P noch nicht einmal über J1 
programmieren.

Ein fabrikneuer Atmega328P kommt ohne Bootloader und kann nur wie im 
Datenblatt beschrieben programmiert werden.

Du kannst natürlich zwischen USB und Atmega328P einen ISP-Programmer mit 
aufs Board nehmen. Nur, die brauchen auch Software, und die muss erst 
mal draufprogrammiert werden ...

LG, Sebastian

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

Da macht du dir extra die Mühe Avcc per LC-Glied zu entkoppeln, und dann 
baust du einen Kurzschluss von Aref gegen Vcc ein?

Aref lässt sich per Software auf Avcc verbinden, da reicht nur ein 
Kondensator gegen GND am Pin.

Und was soll die Kondensator-Serienschaltung daneben am Bild?

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


Lesenswert?

Sebastian W. schrieb:
> Du kannst natürlich zwischen USB und Atmega328P einen ISP-Programmer mit
> aufs Board nehmen. Nur, die brauchen auch Software, und die muss erst
> mal draufprogrammiert werden ...

Er könnte einen FTDI nehmen, der eine MPSSE hat, der kann ohne weitere 
Software auch ISP. Aber ob das den Aufwand lohnt?

(FTDI als on-board debugger auf ARMs haben wir aber schon gemacht. 
Funktionierte problemlos mit OpenOCD.)

von Bauform B. (bauformb)


Angehängte Dateien:

Lesenswert?

Philipp schrieb:
> Der Controller wäre nackt, also es müsste auch der erste
> Zugriff funktionieren.
> USB-C an ATmega328 oder STM32

Mit einem USB-UART-Konverter funktioniert das mit jedem STM32, weil die 
einen eingebauten UART-Bootloader haben. Man braucht also keinen 
"großen" uC mit USB-Port. Zum Flashen braucht man noch zwei Signale, 
RESET und BOOT. Dafür könnte man RTS und DTR benutzen, aber die werden 
vom PC auch mal unfreiwillig angesteuert.

Deshalb erzeuge ich die mit einem 4060, der von RX-Signal resettet wird. 
Wenn der PC ein längeres Break sendet, kommt zuerst RESET. Etwas später 
wird BOOT aktiv und RESET wieder inaktiv. Damit startet der Bootloader. 
Ein kürzeres Break kann den Reset-Taster ersetzen.

Das funktioniert mit jedem STM32 und, weil man nur RX und TX braucht, 
auch mit dem kleinsten USB-UART-Konverter, z.B. FT230X. Man braucht auch 
nichts weiter als 2 Optokoppler oder einen ISO-7021 für eine galvanische 
Trennung.

Unabhängig von meiner Mimik funktionieren die MCP2200 und MCP2221x nicht 
mit dem STM32-Bootloader, weil die nur 8N1 kennen. Der Bootloader 
braucht 8E1.

von Steve van de Grens (roehrmond)


Lesenswert?

Die Transistoren sind unnötig, du kannst LEDs direkt ansteuern.

Zum Reset Taster gehört weiter nach unten, er muss den Reset Eingang auf 
Low ziehen.

Bist du ganz sicher, dass du USB Kommunikation über normale I/O Pins 
machen willst? Vermutlich willst du V-USB verwenden. Informiere dich 
über die Einschränkungen dieser Implementierung. Soweit ich weiß, läuft 
das nicht so unproblematisch, wie man das gerne hätte.

Bauform B. schrieb:
> Mit einem USB-UART-Konverter funktioniert das mit jedem STM32

Einige STM32 Modelle enthalten sogar einen Bootloader, der USB direkt 
unterstützt. Zum Beispiel der STM32L072 und der STM32F303.

Hier ist ein ähnliches Board, wie das aus dem Eröffnungsbeitrag, aber 
mit dem STM32L072: http://stefanfrings.de/yupstick/index.html

: Bearbeitet durch User
Beitrag #7528996 wurde vom Autor gelöscht.
von Philipp (krypt0n)


Lesenswert?

Εrnst B. schrieb:
> Da macht du dir extra die Mühe Avcc per LC-Glied zu entkoppeln, und dann
> baust du einen Kurzschluss von Aref gegen Vcc ein?
Wie gesagt da ist noch einiges dran zu tun.
>
> Und was soll die Kondensator-Serienschaltung daneben am Bild?
Es sind einige Platzhalter noch verbaut

von Philipp (krypt0n)


Lesenswert?

> Das funktioniert mit jedem STM32 und, weil man nur RX und TX braucht,
> auch mit dem kleinsten USB-UART-Konverter, z.B. FT230X. Man braucht auch
> nichts weiter als 2 Optokoppler oder einen ISO-7021 für eine galvanische
> Trennung.
>
> Unabhängig von meiner Mimik funktionieren die MCP2200 und MCP2221x nicht
> mit dem STM32-Bootloader, weil die nur 8N1 kennen. Der Bootloader
> braucht 8E1.

Vielen Dank. Ich wollte langfristig ohnehin auf STM32 wechseln. Das 
endgültige Projekt ist weit grösser. Das Testboard dient einem Test zur 
Umsetzung.

von Philipp (krypt0n)


Lesenswert?

Steve van de Grens schrieb:
> Hier ist ein ähnliches Board, wie das aus dem Eröffnungsbeitrag, aber
> mit dem STM32L072: http://stefanfrings.de/yupstick/index.html
Das sieht doch sauber aus. Vielen Dank!

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.