Ich habe mal wieder ein Problem: Controller: STM32F108C8 Den Testaufbau kann ich flashen mit einem ST-Link /V2 (original und China Clone) Jetzt möchte ich den Chip mittels Bootloader flashen: USB2RS232 Adapter, Chip = FTDI - funktioniert mit Windows ST Demonstrator Loader - funktioniert mit Linux stm32flash USB2RS232 Adapter, Chip = CH340G - funktioniert mit Windows ST Demostrator Loader und (wurgs): - mit Linux nicht !!!! Im Netz finde ich ein paar wenige Aussagen, dass das am Linux-Kernel Treiber liegen soll ! Verwende ich den CH340 Adapter an einem LPC1114 und dem Programm lpc21isp, so lässt sich der LPC auch ueber den CH340 Adapter und Bootloader flashen. Die Kombination CH340G und STM32 will jedoch einfach nicht. Jetzt habe ich mir den Quellcode von stm32flash angesehen um vielleicht dahinter zu kommen, wo ich (ohne Linux-Kernel) eventuell ansetzen kann, aber ich komme leider nicht dahinter ! Hat das hier eventuell schon einmal jemand ans laufen gebracht ? : - ) eine Aussage in der Art: dann verwende den FTDI Chip nutzt mir relativ wenig, weil ich für die "Entwicklung" eh den ST-Link verwende. Ein STM32 Programm kann natürlich ueber den CH340 eine serielle Verbindung aus einem Programm heraus zu Linux aufbauen so dass ich Ausgaben die ein STM32 auf der seriellen Schnittstelle macht über diesen Adapter auf einem Linux Terminal sehe. Wie gesagt, hat das schon jemand ans Laufen gebracht und evtl. den Originalcode des stm32flash gefixt (vllt. ist auch eine stty - Einstellung die Lösung ??? )
PS: Fehlermeldung von stm32flash ist fuer Device-Information lesen ist: Interface serial_posix: 57600 8E1 Failed to read ACK byte Unexpected reply from device on command 0x01
Als erstes könntest Du mal die Systemaufrufe des stm32flash bei Verwendung des FTDIs und des CH340 mit strace vergleichen und schauen an welcher Stelle da die ersten Unterschiede entstehen. Dann würde ich mir die Übertragung zwischen Adapter und µC mit dem Logic Analyzer anschauen und auch dort FTDI und CH340 vergleichen. Dann weißt Du genauer wo das Problem herkommt und kannst Dir überlegen wie Du das angehst.
Ralph S. schrieb: > wo ich (ohne Linux-Kernel) eventuell ansetzen kann, Moin, da es ein bekanntes Treiberproblem mit der Parität ist, kann es auch nur durch den Treiber gelöst werden. Solange es in deinem Kernel nicht korrigiert ist: http://www.wch.c*n/download/CH341SER_LINUX_ZIP.html * bitte entfernen. In das entpackte Verzeichnis wechseln, dann # sudo make und #sudo make load sollte das Problem lösen.
Ralph S. schrieb: > hat aber leider nicht funktioniert Was hat nicht funktioniert? Hast Du den alten Treiber vorher entladen?
https://github.com/fraopess/CH341_driver_parity_patch hier noch eine andere Version. In der README steht wie es geht.
Ralph S. schrieb: > USB2RS232 Adapter, Chip = CH340G > > - funktioniert mit Windows ST Demostrator Loader > > und (wurgs): > > - mit Linux nicht !!!! > > Im Netz finde ich ein paar wenige Aussagen, dass das am Linux-Kernel > Treiber liegen soll ! > > Verwende ich den CH340 Adapter an einem LPC1114 und dem Programm > lpc21isp, so lässt sich der LPC auch ueber den CH340 Adapter und > Bootloader flashen. Scheinbar benötigt der LPC keine Parity-Bits für das Protokoll, siehe unten. > Die Kombination CH340G und STM32 will jedoch einfach nicht. > > Jetzt habe ich mir den Quellcode von stm32flash angesehen um vielleicht > dahinter zu kommen, wo ich (ohne Linux-Kernel) eventuell ansetzen kann, > aber ich komme leider nicht dahinter ! Es liegt tatsächlich am CH340 Treiber, da der keine Parity-Bits unterstützt. > Hat das hier eventuell schon einmal jemand ans laufen gebracht ? Ja, hatte selber vor ein paar Tagen das gleiche Problem. Im folgenden die Anleitung wie man den Open-Source Treiber für den CH340 unter *buntu 14.04 patcht:
1 | cd /tmp # oder "mkdir temp && cd temp" im Homeverzeichnis oder wo auch immer |
2 | apt-get source linux-source-3.13.0 # Hier ohne sudo, sonst muss man später die Berechtigungen anpassen! Die sources landen im aktuellen Verzeichnis! |
3 | sudo apt-get linux-headers-$(uname -r) # Diesmal als root, header landen in /usr/src/linux-headers... siehe unten |
4 | cd linux-source-3.13.0 |
5 | make oldconfig |
6 | make prepare |
7 | make scripts |
8 | cp -v /usr/src/linux-headers-$(uname -r)/Module.symvers . |
9 | cp /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko.orig |
10 | cd drivers/usb/serial |
11 | cp ch341.c ch341.c.orig |
12 | wget https://github.com/karlp/ch341-linux/raw/master/0001-usb-serial-ch341-Add-parity-support.patch |
13 | patch -p4 < 0001-usb-serial-ch341-Add-parity-support.patch |
14 | make -C /lib/modules/$(uname -r)/build M=$(pwd) modules |
15 | sudo cp ch341.ko /lib/modules/$(uname -r)/kernel/drivers/usb/serial/ch341.ko |
16 | sudo rmmod ch341 # alten Treiber entfernen |
17 | sudo modprobe ch341 # neuen Treiber laden |
Fertig :)
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.