La carte d'essai IMST iM880a DS75LX est une carte de prototypage du module iM880a.
Il comporte :
- un STM32L152
- un support double batterie AAA
- un capteur de temperature SPI Maxim DS75LX
- deux connecteurs X1 et X2 (2x 16 broches) qui donnent accès à l'ensemble des broches du module iM880a (UART, JTAG, SPI, I2C, GPIO)
La schématique de la carte est ici.
Vous pouvez inclure ce fichier pinmap.h
pour utiliser les GPIO des headers X1 et X2 de la carte:
#ifndef IM880_PINMAP
#define IM880_PINMAP 1
#define PIN_X1_1 GPIO(0,14) // P1 @ module SWCLK JTCK PA14 FT
#define PIN_X1_2 GPIO(0,13) // P2 @ module SWDAT JTMS PA13 FT
#define PIN_X1_3 GPIO(1,3) // P3 @ module JTDO PB3 FT
#define PIN_X1_4 GPIO(0,15) // P4 @ module JTDI PA15 FT
#define PIN_X1_7 GPIO(0,11) // P5 @ module PA11 FT
#define PIN_X1_8 GPIO(0,12) // P6 @ module PA12 FT
#define PIN_X1_10 GPIO(1,14) // P7 @ module PB14 FT
#define PIN_X1_9 GPIO(1,15) // P8 @ module PB15 FT
#define PIN_X1_12 GPIO(1,13) // P9 @ module PB13 FT
#define PIN_X1_11 GPIO(1,12) // P10 @ module PB12 FT
#define PIN_X2_7 GPIO(0,8) // P11 @ module PA8 FT
#define PIN_X2_6 GPIO(1,8) // P12 @ module PB8 FT
#define PIN_X2_5 GPIO(1,9) // P13 @ module PB9 FT
#define PIN_X2_14 GPIO(0,1) // P14 @ module PA1 FT
#define PIN_X2_3 GPIO(0,0) // P15 @ module PA0 FT
#define PIN_X2_17 GPIO(0,3) // P17 @ module PA3 TC
#define PIN_X2_9 GPIO(0,9) // P17 @ module PA9 FT USART1_RX
#define PIN_X2_10 GPIO(0,10) // P17 @ module PA10 FT USART1_TX
// TC : Standard 3.3 V I/O
// FT : 5 V tolerant I/O
#endif
Le module peut être flashé
- soit via l'interface JTAG (connecteur X1) voir figure 3,
- soit via l'UART en branche la broche P16-BOOT (broche 2 du connecteur X2) sur une des broches
VCC
(broches 11,13,15 du connecteur X2) voir figure 4.
Il faut connecter les bonnes broches du ST-Linkv2 à la carte vers le connecteur X1 (voir figure 3).
Il faut alimenter la carte soit avec 2 batteries AAA 1.5V soit via un adapteur USB série via les broches 11, 13 ou 15 pour le VCC
et 12, 14 ou 16 pour le GND
Nous utiliserons l'adaptateur USB-Serial CH340G de RobotDyn avec son driver car il n'est pas reconnu par défaut sous OSX. Le lien série sera accessible via /dev/tty.wchusbserial1410
Il ne reste plus qu'à flasher :
st-flash --format ihex write LoRaMote-LoRaMac-classA.hex
(LoRaMote-LoRaMac-classA.hex)
Si tout fonctionne bien, vous devriez voir les paquets arrivés sur TTN comme pour la LoraMote (cf. Section flashage du LoRaMote)
Si cela ne fonctionne pas, reportez vous à la section problèmes du LoRaMote.
Si vous ne possédez pas de flasheur ST-Link v2, vous pouvez utiliser le flasheur détachable des cartes Nucleo et connecter les 5 premières broches du connecteur CN4 SWD au connecteur X1 de la carte IMST im880:
Pin 1: VDD_TARGET (VDD from application),
Pin 2: SWCLK (clock),
Pin 3: GND (ground),
Pin 4: SWDIO (SWD data input/output),
Pin 5: NRST (RESET of target STM32).
Les MCU STM32 peuvent être flashé avec un simple adapteur USB Serial. Il suffit pour cela d'utiliser l'utilitaire STM32CubeProgrammer (en GUI ou en ligne de commande) et de mettre la MCU en mode boot en raccordant la broche BOOT avec le VCC.
Instructions :
- Branchez l'UART sur les broches 9 (
TXD
),10 (RXD
),11 (VCC
),12 (GND
) du connecteur X2 en croisantTXD
etRXD
de l'hôte. - Au moyen d'un fil, reliez la broche P16-BOOT (broche 2 du connecteur X2) sur une des broches
VCC
(broches 11,13,15 du connecteur X2) voir figure 4. - Appuyez sur le bouton
RESET
- La carte est en attente des commandes du STM32CubeProgrammer
alias stm32proj_cli=/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin/STM32_Programmer_CLI
Les exemples suivants sont avec la carte iM880a
.
stm32proj_cli
stm32proj_cli --list
-------------------------------------------------------------------
STM32CubeProgrammer v2.5.0
-------------------------------------------------------------------
===== DFU Interface =====
No STM32 device in DFU mode connected
===== STLink Interface =====
Error: No ST-Link detected!
===== UART Interface =====
Total number of serial ports available: 10
...
Port: tty.SLAB_USBtoUART
Location: /dev/tty.SLAB_USBtoUART
Description: CP210x USB to UART Bridge Controller
Manufacturer: Silicon Labs
Port: tty.usbserial-0001
Location: /dev/tty.usbserial-0001
Description: CP2102 USB to UART Bridge Controller
Manufacturer: Silicon Labs
stm32proj_cli --connect port=/dev/tty.usbserial-1410 -vb 3
-------------------------------------------------------------------
STM32CubeProgrammer v2.5.0
-------------------------------------------------------------------
Serial Port /dev/tty.usbserial-1410 is successfully opened.
Port configuration: parity = even, baudrate = 115200, data-bit = 8,
stop-bit = 1,0, flow-control = off
No Init bits value is : 0
Sending init command:
byte 0x7F sent successfully to target
Wait ends after 1 loop, dataready = 1, delay = 2
Received response from target: 0x79
Activating device: OK
Sending GetID command and its XOR:
byte 0x02 sent successfully to target
byte 0xFD sent successfully to target
Wait ends after 1 loop, dataready = 1, delay = 3
Received response from target: 0x79
Received response from target: 0x01041679
Chip ID: 0x416
Sending Get command and its XOR:
byte 0x00 sent successfully to target
byte 0xFF sent successfully to target
Wait ends after 1 loop, dataready = 1, delay = 4
Received response from target: 0x79
Received response from target: 0x0b
size of bytes in the response: 11
Received response from target: 0x30000102112131446373829279
Full received response: 0b30000102112131446373829279
BootLoader protocol version: 3.0
byte 0x11 sent successfully to target
byte 0xEE sent successfully to target
data sent successfully to target: 0x0800000008
byte 0x00 sent successfully to target
byte 0xFF sent successfully to target
Sending GetID command and its XOR:
byte 0x02 sent successfully to target
byte 0xFD sent successfully to target
Wait ends after 1 loop, dataready = 1, delay = 3
Received response from target: 0x79
Received response from target: 0x01041679
byte 0x11 sent successfully to target
byte 0xEE sent successfully to target
data sent successfully to target: 0x0800000008
byte 0x00 sent successfully to target
byte 0xFF sent successfully to target
byte 0x11 sent successfully to target
byte 0xEE sent successfully to target
data sent successfully to target: 0x0800000008
byte 0x00 sent successfully to target
byte 0xFF sent successfully to target
Device name : STM32L100x8/STM32L100xB/STM32L15xx6/STM32L15xx8/STM32L15xxB
Flash size : 128 KBytes (default)
Device type : MCU
Device CPU : Cortex-M3
stm32proj_cli --connect port=/dev/tty.usbserial-1410 --download bin/im880b/field-test-device.bin 0x0800000000
-------------------------------------------------------------------
STM32CubeProgrammer v2.5.0
-------------------------------------------------------------------
Serial Port /dev/tty.SLAB_USBtoUART is successfully opened.
Port configuration: parity = even, baudrate = 115200, data-bit = 8,
stop-bit = 1,0, flow-control = off
Activating device: OK
Chip ID: 0x416
BootLoader protocol version: 3.0
Device name : STM32L100x8/STM32L100xB/STM32L15xx6/STM32L15xx8/STM32L15xxB
Flash size : 128 KBytes (default)
Device type : MCU
Device CPU : Cortex-M3
Warning: The value of partition ID to download is ignored for STM32 MCU devices.
Memory Programming ...
Opening and parsing file: field-test-device.bin
File : field-test-device.bin
Size : 61304 Bytes
Address : 0x08000000
Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 239]
Download in Progress:
[==================================================] 100%
File download complete
Time elapsed during download operation: 00:00:12.327
Si vous utilisez RIOTOS pour développer les firmwares de cette carte, il est possible d'installer un bootloader résident en début de la mémoire Flash (0x80000000
).
Ce bootloader attend quelques secondes une demande de flashage d'un nouveau firmware après le reset.
Le firmware est logé dans les pages Flash suivantes de la MCU (à partir de 0x80000400
pour certaines MCU).
Si rien n'est demandé, le bootloader démarre à l'adresse de début du firmware.
A compléter ...
A voir:
- https://doc.riot-os.org/group__bootloader__riotboot.html
- https://github.com/benpicco/RIOT/tree/riotboot-serial/bootloaders/riotboot_serial