vendredi 29 mars 2019

STM32 : boîtier ST-LINK





STM32 : boîtier ST-LINK


Afin de ne  ne pas répéter ces informations dans 3 documents, j'ai réuni dans cet article quelques petits paragraphes concernant les boîtiers ST-LINK.

Cet article fait suite à ceux-ci :
https://riton-duino.blogspot.com/2019/03/stm32-environnements-de-developpement.html
https://riton-duino.blogspot.com/2018/03/stm32f103c8t6-et-arduino.html
https://riton-duino.blogspot.com/2019/03/stm32-duino-deboguer.html

1. Les boîtiers ST-LINK

Il existe sur le marché différents boîtier JTAG ST-LINK pour STM32 :

ST-LING V2 ST MicroElectronics
ST-LINK V2 Clone chinois

2. Les branchements

Quand on veut charger une BLUE PILL, toutes les cartes ne sont pas sérigraphiées. Ceci aide :




Voici les branchements côté boîtier :

Connecteur ST-LINK V2 ST MicroElectronics

Il y a 4 fils à relier avec le boîtier ST-LINK "offficiel" :
  • GND : 20
  • 3.3V : 19
  • DCLK : 9
  • DIO : 7
ST-LINK V2 Clone chinois
Et 4 aussi avec les ST-LINK chinois :
  • GND : GND
  • 3.3V : 3.3V
  • DCLK :SWCLK
  • DIO :SWDIO
Si vous n'avez jamais utilisé ce genre de boîtier, il est très probable que sous LINUX vous ayez à créer un petit fichier pour autoriser l'accès au device ST-LINK.

Si vous lancez st-flash ou st-util et que vous voyez ceci, c'est que vous n'avez pas les privilèges :

2019-03-29T19:12:31 WARN usb.c: Couldn't find any ST-Link/V2 devices

Vous pouvez lancer la même commande avec sudo, mais avouez que ce n'est pas une solution.

Si vous utilisez STM32DUINO ce fichier se trouve ici :

.arduino15/packages/STM32/tools/STM32Tools/1.2.1/tools/linux64/49-stlinkv2-1.rules

Sinon on peut le trouver ici :

https://github.com/texane/stlink/blob/master/etc/udev/rules.d/49-stlinkv2-1.rules

Copiez ce fichier sous /etc/udev/rules.d.
Ce fichier permet à l'utilisateur non root d'accéder au device

Modifiez le fichier /etc/udev/rules.d/49-stlinkv2-1.rules, pour accepter les ST-LINK clones chinois stlinkV2 :

# stm32 nucleo boards, with onboard st/linkv2-1
# ie, STM32F0, STM32F4.
# STM32VL has st/linkv1, which is quite different

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", \
    MODE:="0666", \
    SYMLINK+="stlinkv2-1_%n"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", \
    MODE:="0666", \
    SYMLINK+="stlinkv2_%n"

# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.


D'où viennent ces identifiants 0483 et 3748 ? simple, on les obtient avec lsusb :

riton@alpha:~/.arduino15$ lsusb
Bus 002 Device 013: ID 0bda:0307 Realtek Semiconductor Corp.
Bus 002 Device 011: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 002 Device 008: ID 0451:8043 Texas Instruments, Inc.
Bus 002 Device 005: ID 0451:8043 Texas Instruments, Inc.
Bus 002 Device 004: ID 046d:c31d Logitech, Inc. Media Keyboard K200
Bus 002 Device 018: ID 0483:3748 STMicroelectronics ST-LINK/V2Bus 002 Device 003: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 002: ID 11b0:6148 ATECH FLASH TECHNOLOGY
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Quand le fichier 49-stlinkv2-1.rules est prêt redémarrez udev :

udevadm trigger

3. La contrefaçon

Méfiez-vous, certains vendeurs vendent des boîtiers soit disant officiels :

Clone chinois déguisé en vrai ST MicroElectronics
ICI : https://fr.aliexpress.com/item/ST-LINK-V2-CN-ST-LINK-STLINK-STM8-STM32-emulator-official-version/32230072665.html?spm=a2g0s.9042311.0.0.27426c37uV9sOM

Le résultat n'est pas à la hauteur :

riton@alpha:/mnt/sdc1/riton$ st-flash write /tmp/arduino_build_579822/Blink.ino.bin 0x8000000
2019-03-29T20:36:26 INFO src/stlink-common.c: Loading device parameters....
2019-03-29T20:36:26 WARN src/stlink-common.c: unknown chip id! 0
riton@alpha:/mnt/sdc1/riton$
 
Par contre il fonctionne bien avec une Black VET6 et son connecteur 20 points :

Préférez ces petits boîtiers :
Clone chinois non déguisé
ICI : https://fr.aliexpress.com/item/ST-Link-V2-Programming-Unit-mini-STM8-STM32-Emulator-Downloader-M89-New/32631496848.html?spm=a2g0s.9042311.0.0.27426c37Knvivh

Le résultat est tout autre :

riton@alpha:/mnt/sdc1/riton$ st-flash write /tmp/arduino_build_579822/Blink.ino.bin 0x8000000
2019-03-29T21:17:02 INFO src/stlink-common.c: Loading device parameters....
2019-03-29T21:17:02 INFO src/stlink-common.c: Device connected is: F1 Medium-density device, id 0x20036410
2019-03-29T21:17:02 INFO src/stlink-common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x10000 bytes (64 KiB) in pages of 1024 bytes
2019-03-29T21:17:02 INFO src/stlink-common.c: Attempting to write 12844 (0x322c) bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08003000 erased
2019-03-29T21:17:02 INFO src/stlink-common.c: Finished erasing 13 pages of 1024 (0x400) bytes
2019-03-29T21:17:02 INFO src/stlink-common.c: Starting Flash write for VL/F0/F3 core id
2019-03-29T21:17:02 INFO src/stlink-common.c: Successfully loaded flash loader in sram
 12/12 pages written
2019-03-29T21:17:03 INFO src/stlink-common.c: Starting verification of write complete
2019-03-29T21:17:03 INFO src/stlink-common.c: Flash written and verified! jolly good!
riton@alpha:/mnt/sdc1/riton$ 

4. Liens utiles
https://riton-duino.blogspot.com/2019/03/stm32-environnements-de-developpement.html
https://riton-duino.blogspot.com/2018/03/stm32f103c8t6-et-arduino.html
https://riton-duino.blogspot.com/2019/03/stm32-duino-deboguer.html


Cordialement
Henri

5 commentaires:

  1. Bonjour Henri, merci pour cette présentation. Il semblerai qu’il soit possible de programmer certain microcontrôleur SAMD avec une clef STLink ? Pour cela il faut lui changer de firmware via une autre clef STLink ?!!? Si l’on a le fichier .Hex avec l’outil ST n’est-il pas possible de faire l’opération sans une deuxième clef ? Ou puis-je trouver de la documentation ce n’est pas évident. Merci.
    Vincent.

    RépondreSupprimer
    Réponses

    1. Je suppose qu'il s'agit d'un ST-LINK clone ?

      Pour un SAMD normalement il faut un JLINK. Peut-on transformer un ST-LINK en JLINK avec un firmware adapté ? possible ...
      Je n'ai jamais entendu dire qu'il fallait un deuxième ST-LINK.
      Normalement le ST-LINK se met à jour par l'USB : http://www.emcu.eu/how-to-update-the-st-link-fw-under-windows/
      Par contre l'outil permet-il d'envoyer un firmware alternatif ? probablement pas.
      Peut-être se tourner vers "Flash Loader" comme ici :
      http://slemi.info/2018/08/14/making-your-own-st-link-v2/

      Supprimer
  2. Bonjour, d'abord un grand bravo et merci pour ce blog et pour la qualité des articles, je suis tombé dessus par hasard après 2jrs de recherche pour créer une sonde de debug à connecter à une Arduino à base de SAMD21 via le SWD. Certes je n'ai pas encore trouveé ce que je cherche ici, mais j'ai voulu vous saluer au passage. Je reviendrai bientôt, pour dénicher les pépites de votre blog.

    Oui Vidalv a raison, il semblerait que le STLINK pourrait être utilisé comme sonde de debuggage de SAMD, il faut flasher le STLINK V2 (avec le ST UTILITY) avec un autre STLINK ou un blu Pill... malheureusement, je n'ai toujours pas trouvé la démarche à suivre... si vous avez des pistes je suis preneur. En vous remerciant d'avance. @bientôt. RT.

    RépondreSupprimer
  3. Bonjour Henri

    Merci pour cet article !

    La présence dees broches 15 : SWIM Reset et 10:SWIM DATA ? permet probablement de flasher des STM8.
    As tu aperçu des retours sur ce point ?
    Alain (al1fch)

    RépondreSupprimer
    Réponses
    1. Salut al1fch
      Oui, j'ai déjà essayé. Voir ici :
      https://riton-duino.blogspot.com/2021/02/stm8s-premier-contact.html

      Supprimer