Téléverser un sketch dans un STM32 F103C8T6 sous Ubuntu

Bonjour à toutes et à tous,

Après avoir essayé sous Windows XP de télécharger un sketch sur mon module STM32F103C8T6 et n'y étant arrivé qu'en mode FTDI, mais pas en mode µUSB, j'ai tenté ma chance sous Ubuntu.

J'ai chargé L'IDE Arduino 1.8.5 ainsi que les fichiers relatifs au STM32 : la compilation se passe bien, mais, Oh déception pas moyen de téléverser un sketch dans mon module, que ce soit par FTDI ou µUSB.

En FTDI (strap BOOT en 1 et Reset), lorsque je connecte mon module, apparaît le port /dev/ttyUSB0 que j'utilise et j'ai la réponse suivante :

Failed to read ACK byte
Unexpected reply from device on command 0x01
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 115200 8E1

Une erreur est survenue lors du transfert du croquis

En mode *USB (Strap BOOT en 0), j'ai la port /dev/ttyACM0(Maple Mini) qui s'affiche et j'ai le message :

Failed to init device.
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 115200 8E1

Une erreur est survenue lors du transfert du croquis

Si quelqu'un a idée pour me faire avancer ...

Cordialement.

Pierre

Je pense que le meilleur endroit pour tes questions est le forum Stm32duino ouvert par Roger Clarke
http://www.stm32duino.com/

Domage qu'il ne soit qu'en anglais et que Roger Clarke répugne à délivrer une documentation écrite.
Les videos Youtube c'est bon pour ceux qui sont "fluent english".
Les jeunes s'en sortent probablement mais moi qui ait appris l'anglais avant 68 (Shakespeare dans le texte ça aide vachement pour "causer" ) je n'y comprend rien.

Vouloir utiliser un STM32 "à la mode Arduino" est quand même quelque peu restrictif.
Les STM32 et les ARM en général (Atmel SamD21 y compris) valent plus cela.

Merci 68tjs pour ce lien, j'avais commencé à y fouiner un peu. Je vais aller y poser mes questions.

Mis à part le lire, pour moi l'anglais est du chinois.

Bon, je vais bien finir par y arriver.

Cordialement.

Pierre

Mis à part le lire, pour moi l'anglais est du chinois.

Rassures toi, nous sommes au moins deux : lire et laborieusement écrire avec google traduction passent mais comprendre une vidéo même pas en rêve.

Un problème de droits sur ttyUSB0 ?

Normalement, les ports USB sont accessibles par le groupe dialout :

riton@alpha:/mnt/sdc1/riton$ ls -al /dev/ttyUSB0 
crw-rw---- 1 root dialout 188, 0 mars  18 16:57 /dev/ttyUSB0

Essaie en t'accordant les droits :

sudo usermod -aG dialout pierre

Si pierre est ton id utilisateur.

@+

Tapant cette commande dans un terminal, je n'obtiens rien comme résultat :

chp@ubuntu:~$ sudo usermod -aG dialout chp
[sudo] password for chp: 
chp@ubuntu:~$

Par ailleurs, sur un site ( que je ne retrouve plus), il est demandé d'exécuter /Arduino/hardware/Arduino-STM32/tools/linux/install.sh. J'envoie ça dans un terminal et voici ce que cela me dit :

chp@ubuntu:~$ '/home/chp/Arduino/hardware/Arduino_STM32/tools/linux/install.sh' 
[sudo] password for chp: 
Copying Maple-specific udev rules...
cp: impossible d'évaluer «45-maple.rules»: Aucun fichier ou dossier de ce type
cp: impossible d'évaluer «49-stlinkv1.rules»: Aucun fichier ou dossier de ce type
cp: impossible d'évaluer «49-stlinkv2.rules»: Aucun fichier ou dossier de ce type
cp: impossible d'évaluer «49-stlinkv2-1.rules»: Aucun fichier ou dossier de ce type
Reloading udev rules
Adding current user to dialout group
L'utilisateur « chp » appartient déjà au groupe « dialout ».
chp@ubuntu:~$

Pourtant, chacun des fichiers cités existe bien, à la fois dans le même répertoire que install.sh et dans /etc/udev/rules.d. Par ailleurs ces fichiers semblent identiques dans chacun de ces deux répertoires.

Qu'en déduire ?

Cordialement.

Pierre

Je n'ai jamais exécuté le script install.sh dont tu parles. J'ai simplement décompressé l'archive ARDUINO 1.6.9 - je sais ça date un peu - dans mon répertoire personnel.
Si tes fichiers dans /etc/udev/rules.d sont identiques à ceux présents dans le répertoire hardware/Arduino_STM32/tools/linux/ il n'y a pas lieu de t'inquiéter. Il faut simplement redémarrer le service udev. Si tu as redémarré ton PC depuis, c'est OK.

Tapant cette commande dans un terminal, je n'obtiens rien comme résultat :

Rien d'anormal, c'est que le boulot est fait.
D'ailleurs le script install.sh te le dit :

L'utilisateur « chp » appartient déjà au groupe « dialout ».

N'hésite pas à revenir.

@+

module STM32F103C8T6

Bonjour,
quel module ?

trimarco232:
... quel module ?

Celui-ci.

Cordialement.

Piertre

voir ici
ou l'occasion d'exercer sa dextérité en remplaçant la 10k par une 1k5

Avev les cms quand on veut baisser la valeur d'une résistance il est plus simple de souder une résistance en parallèle sur la "grosse".

J'ai placé un résistance de 1.8 kOhm là où il faut ... ça n'a rien changé. Sous Ubuntu, je suis incapable de téléverser un sketch sur mon module.

Dans quels cas cette résistance apporte-t-elle une modification ?

Autre question : Sous Windows, le fichier "install_drivers.bat" et autres (ou le STM32 Flash loader demonstrator) servent à installer le bootloader dans le module.

Mais quelle est la manip équivalente sous Linux ? J'ai vu tout un tas d'instructions, pas deux pareilles.

Cordialement.

Pierre

Salut
Si ça marche avec la même carte sous Windows, pas besoin de la modifier.

install_drivers.bat a l'air d'installer les drivers USB.
Sous Ubuntu, pas besoin de ça.

En FTDI (strap BOOT en 1 et Reset), lorsque je connecte mon module, apparaît le port /dev/ttyUSB0 que j'utilise et j'ai la réponse suivante :

En mode FTDI, as-tu essayé d'écrire à la main dans /dev/ttyUSB0 ?

echo azertyuiop > /dev/ttyUSB0

Si le shell affiche une erreur, poste-la, cela peut aider.

@+

hbachetti:
... En mode FTDI, as-tu essayé d'écrire à la main dans /dev/ttyUSB0 ?Si le shell affiche une erreur, poste-la, cela peut aider. ...

Si écrire à la main revient à placer cela dans un terminal, voici ce que ça donne :

chp@ubuntu:~$ echo azertyuiop > /dev/ttyUSB0
chp@ubuntu:~$

Par ailleurs, dans ce site, il est dit :

Linux
Steps 1-4 and 7 are the same for both Windows and Linux
For steps 5-6, use the command from the Maple Mini Linux procedure, changing the paths and filenames as necessary

cd ~/.arduino15/packages/stm32duino/tools/stm32tools/1.0.9/linux/stm32flash
./stm32flash -w ~/Downloads/generic_boot20_pb12.bin -v -g 0x0 /dev/ttyUSB0

En remplaçant par mes fichiers, cela donne :

chp@ubuntu:~/Arduino/hardware/Arduino_STM32/tools/linux/stm32flash$ ./stm32flash -w /home/chp/Arduino/hardware/Arduino_STM32/tools/linux/generic_boot20_pc13.bin  -v -g 0x0 /dev/ttyUSB0
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 57600 8E1
Failed to read ACK byte
Unexpected reply from device on command 0x01

chp@ubuntu:~/Arduino/hardware/Arduino_STM32/tools/linux/stm32flash$

Le même type de réponse que celle que j'obtiens en essayant de téléverser un sketch dans le module :

Failed to read ACK byte
Unexpected reply from device on command 0x01
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 115200 8E1

Une erreur est survenue lors du transfert du croquis

Dans les deux cas, il y a un problème de lecture de ACK, par contre, la vitesse n'est pas la même dans les deux cas. 57600 bauds pour le bootloader et 115200 bauds pour le téléversement d'un sketch ???

Cordialement.

Pierre

Bon ben moi je sens que je suis pas pret d'utiliser un bootloader.
Mon programmeur St-Link à 2 € me va très bien et soulage mes neurones.

chp@ubuntu:~$ echo azertyuiop > /dev/ttyUSB0
chp@ubuntu:~$

Le port est donc accessible en écriture, pas de doute.
Il n'y a aucune raison pour la méthode que j'avais donné dans ton précédent post ne fonctionne pas. Je parle de la méthode FTDI bien sûr.
Est-tu sûr que celle-ci fonctionne encore sous Windows, histoire de vérifier qu'il n'y a pas une erreur de câblage ?
Vérifie bien que tu procèdes de la même manière, avec les mêmes options.

@+

Je me suis aussi posé la question. Je suis retourné sous Windows et j'ai constaté que ça fonctionnait toujours.

De retour sous Ubuntu, toujours en FTDI et avec les mêmes paramètres pour la carte STM32 et sur le port /dev/ttyUSB0, cela refuse toujours de fonctionner. ?? Ça commence à être super énervant.

Cordialement.

Pierre.

Dans le post précédent j'avais fait mes essais sous Ubuntu. De toutes façons cela fait douze ans que Windows est banni de chez moi. Je n'ai pas pu faire autrement.

@+

Apparemment ton essai de chargement en mode série a été fait en 115200 baud.

Failed to read ACK byte
Unexpected reply from device on command 0x01
stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 115200 8E1

Le mien s'est déroulé à 230400.

stm32flash Arduino_STM32_0.9

http://github.com/rogerclarkmelbourne/arduino_stm32

Using Parser : Raw BINARY
Interface serial_posix: 230400 8E1

J'ai fouillé un peu et apparemment une auto-détection du baudrate est faire par le bootloader du STM32.
ICI page 5

stm32flash envoie 0x7f et reçoit en retour 0x79. Apparemment il y a incompréhension (Failed to read ACK byte).

Utilises-tu une vraie Ubuntu sur une partition ou une Ubuntu en VirtualMachine ?

@+

Ce matin, petite pose :sunglasses: pour aller skier dans la forêt de Montmorency (20 km N-O de Paris)

Sous Windows, lorsque j'utilise le FTDI, au téléversement j’obtiens :

stm32flash 0.4

http://stm32flash.googlecode.com/

Using Parser : Raw BINARY
Interface serial_w32: 115200 8E1
Version      : 0x22
Option 1     : 0x00
Option 2     : 0x00
Device ID    : 0x0410 (Medium-density)
- RAM        : 20KiB  (512b reserved by bootloader)
- Flash      : 128KiB (sector size: 4x1024)
- Option RAM : 16b
- System RAM : 2KiB
Write to memory
Erasing memory

Wrote address 0x08000100 (1.24%) 
Wrote address 0x08000200 (2.48%) 
Wrote address 0x08000300 (3.72%)
...
...
Wrote address 0x08005000 (99.17%) 
Wrote address 0x080050ac (100.00%) Done.

Starting execution at address 0x08000000... done.

L'échange se fait bien à 115200 bauds.

NOTA : On voit ci-dessus qu'il est écrit : "- Flash : 128KiB (sector size: 4x1024)", alors que dans mon choix, j'ai sélectionné 64 k. Je viens de faire un essai en sélectionnant 128 k ... le téléversement se passe toujours bien et m'indique toujours 128 k ??

A la base, mon PC est équipé de Windows XP. Puis, j'ai créé une partition sur laquelle j'ai installé Ubuntu. Au démarrage de mon PC, je choisis l'environnement dans lequel je veux travailler (m'amuser).

Bon je vais passer sous Ubuntu voir ce qui s'y passe ...

Cordialement.

Pierre