MCU dilema

První náznaky nadcházejících potíží s nedostatečnou velikostí paměti FLASH aktuálně používaného STM2F103CB začaly vykukovat těsně před koncem loňské sezóny. S tím, jak pokračoval vývoj nových funkcí jsem se v mé experimentální krabičče začal blížit zaplnění paměti programu a vypadalo to, že nejpozději do konce roku přijde konečná. Už dříve jsem se toho začínal obávat a proto jsem přemýšlel nejen o rozšíření, ale i o možných změnách v návrhu a architektuře MCU na kterou bych přenesl stávající kód. Toto je shrnutí úvah a příběh o přechodu na jiné MCU, ke kterému došlo v průběhu Vánoc a protáhlo se daleko přes Nový rok.

Jak již bylo zmíněno dříve v jednom z předchozích příspěvků, první prototyp OGN CUBE trackeru se zrodil na 8-bitovém mikroprocesoru ATMEGA8-16PU RISC od společnosti Atmel. Před pěti(!) lety se podařilo vtěsnat základní funkcionalitu trackeru do 8 kB FLASH a neuvěřitelných 1024 bajtů (BAJTů!) SRAM – téměř neskutečný výkon, který si dnes už ani nedovedu představit. Velmi brzy však bylo zapotřebí VÍCE paměti. Proto první přesun přirozeně směroval na ATMEGA328P – nyní včeobecně známý Arduino čip. Jen si představte ty neomezené možnosti: čtyřikrát více FLASH a dvojnáobek RAM! 32K by mělo stačit všem, nebo ne? 🙂 No, vlastně ani ne, ale tento tracker stále neúnavně a spolehlivě brázdí termikou a točí šprajcy pod kumuly v LSce se znakem ‚PK‚ na ocase.

Třetí migrace byla jasná. Už jsem měl nějaké zkušenosti s ekosystémem kolem STM32 (zejména F042 a F303), vlastní stabilní sadu I/O knihoven pro SPL a zároveň mnoho odstrašujících zážitků při hledání problémů v HAL (kteréžto knihovně se důrazně doporučuji velkým DME obloukem vyhnout). Následník krále od Atmelu musel být integráč se světlou budoucností, podporou SPL a některými dalšími rozumnými parametry. Po dlouho promýšleném ale nekončícím oscilováním mezi možnými alternativami a nesčetných hodech korunou se novým srdcem CUBE stal všudypřítomný integrovaný obvod STM32F103CB, zejména z důvodu jeho dostupnosti (v té době jsem ani netušil, že ostatní OGN trackery byly založeny právě na STM32F103C8). Díky 128kB FLASH (C8 má polovinu) a 32kB RAM byla položena cesta ke svělým zítřkům. A ptáte se, jaké byly ty zvažované alternativy? Však počkejte..

První Kinderrüberraschung vykouklo už po první úspěšné kompilaci – binární velikost stejného kódu byla na ARMu dvakrát větší než na starém dobrém AVR! Bylo skutečně štěstí, že byl místo C8 zvolen MCU s označením CB. Ale i v tomto novém „století ARMu“ se velikost kódu neustále zvětšovala. Byly nazazeny různé optimalizace (jak kompilační, tak v kódu samotném) a některé funkce byly odstraněny – jako například záznam celého letu na SD kartu za použití little-fs. Ale zbývající FLASH se stále zmenšovala..

S implementací toho druhého protokolu B-) bylo potřeba provést další velký skok. No jo, ale kterým směrem? Potřeboval jsem stejné pouzdro (LQFP48; desky plošných spojů byly vyrobeny již koncem léta), v ideálním případě zase něco od ST s podporou SPL (kteréžto, jak se zdá, úplně osiřelo a pro nové MCU se s ním již nepočítá) a hlavně proto, že HAL je jen rychlou zkratkou do pekel. A nebo.. co takhle podívat se o plot dál?

NRF52 od Nordicu se v učité skupině lidí těší nevídané oblibě. Tento čip vybavený modrým zubem (rozuměj bluetooth) by také umožnil zrušit samostatný BT modul a ušetřit trochu energie a o něco více místa! Ale ten jejich ekosystém mi přijde takový .. no, jiný. Co MSP430 od společnosti Texas Instruments? Z nějakého zcela neznámého důvodu mě tento mikrokontrolér láká, ale ne, nejspíš by to byl krok špatným směrem. Snad nějaký PIC? (vzpomeňme zde kdo je lepší – Microchip nebo Atmel? B-) ) A co taková ESP8266? Málo I/O. ESP32? FCC certifikace, o trochu více I/O nožiček (ale stále nestačí), on-chip Wi-Fi a bluetooth by bylo manifique .. ale jeho spotřeba? No tvl! Něco s RISC-V? Zatím se zdá, že nic použitelného zde pro „produkční“ použití s dlouhodobějším výhledem neexistuje. A v neposlední řadě – co si byste řekli na Teensy? .. no, přiznávám, bylo to divoké! 🙂 Po vystřízlivění, ale i po všech zralých úvahách zůstanou naše krabičky v království ST Micro. Ve skutečnosti to vůbec nějak špatný mikrokotrolér! A tak jsem se zase jednou vydal na nákupy …

Výbavička v podobě vývojových destiček ST Nucleo 🙂

Jedním z dlouhopřetrvávajích záměrů bylo zmigrovat kód na mikrokontroléry od ST vyšší třídy, jako je L4 (bez podpory SPL ;( ) nebo F4 (dostupné SPL a k tomu i hardware pro podporu výpočtů s plovoucí desetinnou čárkou, krása!), ale zárověň i nízká spotřeba byla jedním z hlavních sledovaných parametrů. Bohužel F4 nedělají v LQFP48 s 256 kB FLASH. Chjo!! Spoustu probdělých noci a ještě více volných chvílí přes den jsem strávil s aplikací ST MCU Finder (která ač má nezměrný potenciál, je naprosto zanedbaná a nefunguje ani po mnohých aktualizacích), dokud finální a vlastně jediná zbývající alternativa neukázala na ten samý integrovaný obvod jako před dvěma lety (kdy jsem zvolil F103) – STM32L152CC. Má 256 kB FLASH, tikat může až na 32 MHz (což furt tak nějak ještě jde 🙂 ), 32kB RAM + nějaká ta EEPROM pro uložení uživatelské konfigurace a .. snad i delší budoucnost 🙂

Po měsíci stráveném přesunem a laděním kódu pro L152 (jsou tam určité nehezké rozdíly jak v SPL, tak i architektuře MCU; hlubší zájemci si porovnají blokové schémata v odpovídajících datasheetech) a dohledání úplně posledního brouka v způsobujícího problémy v časování SPI zde mohu optimisticky vyhlásit, že novým MCU, kteréhožto budeme vozit na palubě v nadcházející generaci OGN CUBE, je ST L152CC! 🙂