Een testrit met de StromPi 3

Nu we de functionaliteit hebben samengevat, wordt het tijd voor een testrit met de StromPi 3. En daar komt voor bezitters van een Raspberry Pi 3 al de eerste tegenvaller: als we Bluetooth en StromPi 3 willen combineren, zullen we iets moeten veranderen. De seriële interface, die normaal gesproken wordt gebruikt tussen de Raspberry Pi en de Bluetooth-chip, heeft de StromPi 3 nodig voor zijn eigen communicatie en het instellen ven parameters. Dat wordt pas duidelijk, als we de installatiehandleiding bekijken. Na de modificatie van de interface kunnen we zowel de StromPi 3 als Bluetooth gebruiken, maar toch kan het bij het gebruik van Bluetooth tot beperkingen leiden. Voor Bluetooth en StromPi 3 kunnen we de volgende regels aan /boot/config.txt toevoegen:
dtoverlay=pi3-miniuart-bt
core_freq=250
init_uart_clock=3000000

Na de configuratie kunnen we de instellingen van de StromPi uitvoeren via een serieel console. Op de homepage is ook bèta-firmware te vinden, die een paar heel nuttige functies toevoegt aan de functionaliteit en een paar kleine onvolkomenheden bij sommige parameters oplost. Dus gauw even de firmware opnieuw flashen.

De Firmware-update

Er is een handleiding beschikbaar voor de firmware-update. We moeten de nieuwe firmware in de chip schrijven met het stm32flash-tool. Bij de huidige configuratie gebruiken we de UART van de Raspberry Pi 3B+, de miniUART, dus een uitgeklede variant, waar enkele functies aan ontbreken. Deze miniUART wordt met aangepaste functie voor Bluetooth gebruikt. De volgende functies ontbreken:
 
  • Break-herkenning
  • Framing Error-herkenning
  • Pariteitsbit
  • Receiver Timeout Interrupt
  • DCD-, DSR-, DTR- en RI-signalen

De meeste van die functies hebben we toch niet nodig, maar het ontbrekende pariteitsbit maakt het noodzakelijk om de UART te gebruiken. Het stm32flash-tool communiceert met de STM 32 op de StromPi met 9600 Baud, 8 databits, één stopbit en even pariteit (96008E1). Om dat te laten werken, moeten we veranderingen doorvoeren in /boot/config.txt. Door in /boot/config.txt in te vullen:  
dtoverlay=pi3-miniuart-bt

wordt de miniUART gebruikt voor Bluetooth, zodat de normale UART, die verbonden is met de I/O-pennen van de pinheader, beschikbaar komt. We moeten ook nog stm32flash installeren met behulp van het pakketbeheer en de actuele Firmware downloaden. Dan kunnen we de update uitvoeren zoals in de handleiding is beschreven. Om te flashen voeren we in de terminal
stm32flash /dev/serial0 -w RB-StromPi3_Revxxxxxx.binary -b 9600
in. Tot zover is het allemaal heel gemakkelijk, daar kan toch niets bij misgaan? Nou het is wel opletten geblazen: als we per ongeluk in plaats van de .binary een ander bestand kiezen, bijvoorbeeld door de tab completion, dan wordt dat zonder waarschuwing in de chip geschreven.

En dat is precies wat er bij ons gebeurde. Toen we het merkten, was het te laat: de Pi en de StromPi 3 waren opnieuw opgestart, en door de verkeerde inhoud van het bestand waren helaas ook alle beveiligingsfuncties van de chips geactiveerd. Daardoor was de firmware niet meer te herstellen, ook niet met de debugger. Wees dus voorzichtig! Er is geen vangnet of reddingsboot beschikbaar, als een verkeerd bestand in de chip wordt geschreven, kan dat de hardware compleet onbruikbaar maken. Ook de bootloader in de ROM van de chip biedt dan geen uitkomst meer. „Only a few StromPi 3 were harmed in making this presentation“, is iets dat je niet graag schrijft, maar het is hier helaas wel van toepassing. Dus we moesten een nieuwe StromPi 3 uit de verpakking halen en daarmee verdergaan. De print met de verkeerde firmware hebben we voorlopig maar aan de kant gelegd om later de STM 32 te vervangen door een nieuwe.

Ingebruikname en configuratie

Als de update naar de actuele bèta-firmware is gelukt, kan begonnen worden met de configuratie. We zetten ook de jumper „ CAP “ op „ON“, zodat de condensatoren van (in totaal) 1F het omschakelen tussen verschillende ingangen voor de voedingsspanning mogelijk maken. Zonder die condensatoren kan de StromPi 3 bij het omschakelen de Pi niet blijvend van voldoende voeding voorzien. De StromPi 3 wordt geconfigureerd via een seriële terminal. Wij wilden de Pi voeden met 12 Volt via de ingang met een groot spanningsbereik en de LiFePo4-accu gebruiken als reserve.

De configuratie werd conform de handleiding uitgevoerd: we zetten de modus van de StromPi 3 op 4 en stelden de timer in voor een afteltijd van 10 minuten (600 seconden). Als in die 10 minuten de primaire spanningsbron weer beschikbaar komt, dan wordt de timer afgebroken en blijft de Pi gewoon doorwerken. Dus we voerden „set-timer 600” in, zoals in de handleiding wordt beschreven en we kregen als antwoord: “The Shutdown-Timer has been set to 88 seconds”. Nou dan proberen we maar eens „set-timer 255“. Het antwoord was: “The Shutdown-Timer has been set to 255 seconds”. En bij “set-timer 256” kregen we als antwoord “The Shutdown-Timer has been set to 0 seconds”. Blijkbaar is er dus een maximum van 255, maar er komt geen foutmelding als je een waarde van 256 of meer invoert. We hebben deze bug via email aan Support gemeld. We hadden ook het supportforum kunnen gebruiken, maar we hadden nog een paar andere vragen daarom koos ik ervoor om het via de mail te doen.

Firmware-updates en Support

Er kwam al snel antwoord op ons bugreport, en ook de antwoorden op mijn vragen naar de brontekst en de pinbezettingen van de ingebouwde STM 32 bevatten nog een kleine verrassing. Bij sommige producten zijn de fabrikanten erg zwijgzaam over de firmware, maar hier was het omgekeerde het geval. De broncode van de firmware is inmiddels compleet naar GitHub geüpload, net als het schema met de STM 32. Daarmee zijn de pinbezetting en de functies van de hardware inzichtelijk geworden. Zodoende kan iedereen de firmware naar eigen behoefte patchen of zelf op zoek gaan naar fouten. Zulke maatregelen zien we helaas veel te weinig bij producten, waar software in zit. De ontwikkelaars en de fabrikant verdienen dus zeker een pluim omdat ze dit hebben gedaan. Intussen is ook de gemelde bug opgelost, en met elke nieuwe firmware-versie worden de suggesties van klanten meegenomen en toegevoegd. Het is te hopen, dat de firmware en het product ook in de toekomst met zoveel zorg beheerd blijven worden.