16.12.2019 Kolega z práce mi donesl na hraní modul tlakového senzoru RPM411 (sic už očesaný, bez samotného analogového tlakoměru M21A07), který by měl pocházet z meteorologické sondy Vaisala RS41-SGP. Avšak u nás se běžně vypouští varianta RS41 bez modulu, která má vše na jedné desce. Tato sem asi doletěla z Německa. Tyto meteosondy se objevily poměrně nedávno a narozdíl od předešlých modelů se zdají být použitelné i pro další účely, obsahují totiž populární MCU ARM STM32 a plnohodnotnou GPS od uBloxu, která poskytuje NMEA data místo syrových dat, z kterých se dříve musela počítat poloha v pozemní stanici. Na EEVblogu se o nich hovoří jako o ARMových vývojových kitech padajících z nebe. Hardware už byl řádně zdokumentován a zreverzován, ale o samotném modulu RPM411 jsem toho moc nenašel.
Vzal jsem tedy multimetr a zkusil propípat zapojení miniaturního konektoru, který jsem si očísloval dle obrázku výše. Většina pinů je k MCU STM32F100C8T6B připojena přes odpory, některé piny jsou též vyvedeny na testpointy. Je zde napájení 3,3 V, rozhraní SPI, UART a SWD na programování MCU. Také jsem zjistil zapojení LEDky, jejíž anoda je připojena přes odpor na VDD a katoda na PB.11.
pin Rs port MCU alt. funkce 1 1 Ω kondík na zem a někam dále 2 100 Ω NRST 3 68 Ω PA.13 SWDIO 4 1 kΩ PA.14 SWDCLK 5 NC 6 10 kΩ PA.10 USART1.RX 7 68 Ω PA.9 USART1.TX 8 GND 9 1 Ω VDD (3,3 V) 10 10 kΩ PA.5 SPI1.SCK 11 68 Ω PA.6 SPI1.MISO 12 10 kΩ PA.7 SPI1.MOSI 13 10 kΩ PA.0 WKUP (L->H) 14 GND 15 1 kΩ PD.0 OSC_IN 16 GND
Zkusil jsem tedy připojit napájení a UART přes 3,3V FTDI USB adaptér k PC. Na rychlosti 19200 jsem dostal následující výpis, který se cca po 1 vteřině opakoval stále dokola a nereagoval na posílané znaky, jako by se MCU cyklicky restartoval.
Vaisala RPM411 Radiosonde Pressure Module SW V2.01 Copyright (c) Vaisala Oyj 2017. All rights reserved. Module serial number: P2130065 Sensor serial number: L12A22 Parameter setup not done >
Dále jsem připojil programovací rozhraní SWD k ST-Linku (použil jsem vývojový kit NUCLEO-G071RB, který jsem měl zrovna po ruce), ale programová paměť byla nepřekvapivě uzamčená pro čtení. Mohl jsem tak akorát celý čip smazat a následně ochranu vypnout. Také jsem v Option Bytes nastavil bit WDG_SW, který byl o proti výchozímu stavu vypnutý. Tzn., že po zapnutí byl watchdog automaticky zapnutý a pravděpodobně on způsoboval cyklické restarty. Pokud je aktivní bit WDG_SW, musí se watchdog nejprve aktivovat softwarově. Pak jsem naprogramoval a nahrál do MCU jednoduchý prográmek, který bliká LEDkou. Více o programování MCU STM32 zde. Destičku můžu dál na něco využít stejně jako tento levný kit z eBay.
#include "../../CMSIS/CORE/INCLUDE/stm32f100xb.h" // part of STM32CubeF1 Firmware Package void SystemInit() { //leaving default, HSI 8MHz } int main(void) { //enable clock for GPIOB peripheral RCC->APB2ENR|=RCC_APB2ENR_IOPBEN; //set pin PB11 as push-pull output GPIOB->CRH|=GPIO_CRH_MODE11_0; //infinite loop while (1) { //toggle pin PB11 on Output Data Register GPIOB->ODR^=(1<<11); //make some delay for (volatile uint32_t i=0; i<500000; i++); } }