Forum: Mikrocontroller und Digitale Elektronik STM32F103C8 und Bootloader


von Ralph S. (jjflash)


Lesenswert?

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 ??? )

von Ralph S. (jjflash)


Lesenswert?

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

von Gerd E. (robberknight)


Lesenswert?

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.

von hp-freund (Gast)


Lesenswert?

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.

von Ralph S. (jjflash)


Lesenswert?

... vielen Dank für den Link, hat aber leider nicht funktioniert !

von hp-freund (Gast)


Lesenswert?

Ralph S. schrieb:
> hat aber leider nicht funktioniert

Was hat nicht funktioniert?

Hast Du den alten Treiber vorher entladen?

von hp-freund (Gast)


Lesenswert?

https://github.com/fraopess/CH341_driver_parity_patch

hier noch eine andere Version.
In der README steht wie es geht.

von Christopher J. (christopher_j23)


Lesenswert?

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
Noch kein Account? Hier anmelden.