Blog 10: Mijn software-waakhond Maxim

Jan-Jelle Huizinga is een enthousiaste techneut en alumni van Hogeschool Dirksen. Hij laat een nieuw huis bouwen. In zijn blog vertelt hij hoe hij zelf de domotica-installatie voor de ledverlichting voor de nieuwbouw maakt.

Tijdens het uitkomen van deze blog waarschijnlijk wat aan de late kant, maar iedereen de beste wensen voor 2020! Dat het een droomjaar moge worden.

De kerstvakantie is voorbij, en de bouw start weer op. Hoewel ik zelf ook een lekkere vakantie heb mogen genieten is het toch frustrerend om geen voortgang te zien bij de woning, maar tijdens de bouwvak en de kerstvakantie ligt dit nu eenmaal stil. Vandaag even met de aannemer gebeld, omdat ik me afvroeg waarom wij geen zonnepanelen krijgen en mijn buurman wel (zonder dit expliciet op te geven als keuze). Dit heeft met de EPC-norm te maken, maar waarom de berekening bij ons anders is, kon en wilde hij me niet vertellen. Die berekening kan verder ook niet gedeeld worden, dus men tast in het duister. Het blijft een bijzonder starre  wereld, de bouw.

Een snelle blik in de onderwerpenlijst deed me beseffen dat deze blogs bijna tot een einde komen. In deze blog wil ik wat toelichten over de software-beveiliging. In februari ga ik het productieproces van de printplaat uitleggen; van ontwerp, bestellen tot solderen. De laatste blog zou over de inbedrijfstelling gaan, maar dat kan pas nadat alles is ingebouwd en (hopelijk) functioneert. Het idee tijdens het begin van dit blogfeestje was dat dit ongeveer uit zo komen in maart 2020, maar het loopt uit. Na februari zal het dus even stil zijn en dan komt er nog een laatste hoofdstuk. Dit komt eigenlijk wel goed uit, want met de verkoop van de huidige woning, een kindje op komst en het inrichten van het nieuwe huis, zal ik ook wel even zoet zijn :).

Software – wat is dat?

Misschien wel een term die het meeste om je oren vliegt zonder het echt te begrijpen. Wat is ‘software’ eigenlijk? Het wordt elke dag gebruikt voor uiteenlopende zaken. Of het nu een applicatie is op je telefoon, een functie op je computer of ‘de cloud’, die niet lekker werkt: het ligt vaak aan de software.

Leuk feitje: software storingen bestaan eigenlijk niet. Sterker nog, elektrische storingen bestaan eigenlijk niet (erg leuke discussie met werktuigbouwers, moet je eens proberen). Een elektrische storing is vrijwel altijd een draadje wat los zit (omdat een schroefje lam is), een relais wat is doorgebrand, een contact wat niet goed sluit, een chip die kapot is door ESD (wat veroorzaakt wordt door wrijving; een mechanische beweging) en ga zo maar door. Het is vrijwel altijd naar een mechanisch probleem te herleiden. Software is niet elektrisch, noch iets wat een ‘storing’ kan zijn. Het is geprogrammeerd door de mens en doet precies wat het moet doen (mits de hardware dus verder in orde is, wat bij gebreken weer een mechanische storing zal zijn). Als software niet werkt zit er een fout (bug) in. Wat overigens niet wil zeggen dat software nooit storingen veroorzaakt. Een nuanceverschil, maar wel een belangrijke. En dat laatste is precies wat we moeten begrijpen voor dit onderwerp.

Oeps, foutje in de code

Een microcontroller wordt geprogrammeerd door een stuk code in te laden. Deze code is feitelijk dat wat men verstaat onder ‘software’. De code doet precies wat het moet doen en niets meer dan dat, gegeven dat ook de hardware precies doet wat het moet doen. Geen verkeerde spanningen, kortsluitingen, grote stromen, warmte-ontwikkeling, storingen van buiten af (EMC), et cetera. In zo'n ‘ideale’ wereld is er niks aan de hand en hoeft software niet verder te worden beveiligd. Nu de praktijk:

Mijn collega vertelde me dat hij ooit voor de rechtbank heeft gestaan, omdat het bedrijf waarvoor hij werkte een systeem had geïnstalleerd wat in storing raakte, met grote gevolgen. Er bleven wat kleppen openstaan in een scenario dat volgens de software nooit voor zou mogen komen en daarmee werden grote ladingen product in een verkeerde richting gepompt. De reden hiervan was dat het regelsysteem niet meer wist wat het moest doen. Het stuurde van alles aan. Hoe dit kwam is nooit aan het licht gekomen. Blikseminslag, trillingen of fout van een operator? Niemand wist het. Wel was duidelijk dat het systeem dat de kleppen aanstuurde dit deed in een volgorde die volgens de code niet zou mogen. De software was gecrashed en had een harde reset nodig. Maar dit ging niet vanzelf. Nu zijn mijn collega en zijn werkgever er verder goed vanaf gekomen, maar het heeft mij een belangrijke les geleerd: bouw altijd een Watchdog in een embedded systeem. Altijd.

Watchdog Maxim aansluiten op de microcontroller

Mooi, weten we dat ook weer. Maar wat is een Watchdog?

Een microcontroller heeft altijd de mogelijkheid om een harde 'reset' te krijgen. Een pin op de microcontroller wordt aangestuurd (vaak laag actief, ofwel de pin wordt op de GND aangesloten) en dan start de controller opnieuw op. Ongeacht wat er op dat moment bezig is, wat er draait en of dit gewenst is, de microcontroller begint met een schone lei. Maar hoe zorg je ervoor dat de microcontroller resetpin dit doet als er iets niet goed gaat?

De MAX690 van Maxim Integrated is een bekende hardware watchdog. Dit is een chip die los op de printplaat naast de microcontroller wordt aangesloten. Die chip heeft eigenlijk maar één taak:

‘Reset de microcontroller zodra ik mag’. Als een briesende waakhond staat deze chip strak aan de ketting te blaffen en als er ook maar één kans komt, grijpt hij deze. Een beetje overdreven vergelijking misschien, het kan maar duidelijk zijn!

De MAX690 chip heeft een aantal ingangen waarvan er, voor mijn geval, maar twee echt belangrijk zijn. De ‘Reset’ en de ‘WDI’. De WDI-pin wordt aangesloten op een digitale output-pin en de Reset wordt, hoe kan het ook anders, aan de reset-pin van de microcontroller aangesloten. De watchdog is zodanig ingesteld dat deze een wisselend signaal ‘HOOG → LAAG’ of ‘LAAG → HOOG’ moet krijgen op de WDI ingang binnen elke 1.6s die verstreken is na het opstarten van de chip. Als dit niet gebeurt, trekt de watchdog de reset-pin ‘LAAG’ of naar GND en zal de microcontroller opnieuw opstarten.

De microcontroller dient dus zo geprogrammeerd te worden dat deze elke keer binnen 1.6 seconden (bijvoorbeeld elke halve seconde) de toestand van de digitale output-pin die op de WDI ingang aangesloten is, verandert. Is hij hoog (5V) dan moet hij na 0.5 seconde laag worden (0V). Is hij laag, dan moet hij na 0.5 seconde hoog worden. Ik denk dat je het principe wel begrijpt.

Mocht de microcontroller om wat voor reden dan ook van slag raken en andere I/O aansturen dan waarvoor hij is geprogrammeerd, omdat er een (externe) fout is opgetreden, dan zal de watchdog-chip deze microcontroller resetten. Hij zal de microcontroller naar een gedefinieerde toestand brengen en alle I/O die op dat moment aangestuurd wordt, zal naar de ‘default’ toestand worden teruggezet.

Voor mijn domotica systeem betekent dit in de praktijk dus dat als de microcontroller kapot gaat en ineens alle lampen laat knipperen, of niks meer zou werken, deze wordt gereset door de watchdog en opnieuw zou opstarten. Als dit niet zou gebeuren, dan is er meer aan de hand dan enkel een gecrashte microcontroller en zal ik verder moeten zoeken naar de fout. De kans dat dit gebeurt is niet heel groot en het gevolg is ook niet heel schadelijk als de microcontroller in de fout gaat. Dus het Risico = Kans x Effect is eigenlijk vrij klein. Maar het is een leerzaam en nuttig technisch detail dat ik niet uit het systeem weg kon laten.

Hopelijk vonden jullie het weer interessant. Graag tot de volgende keer!

Lees ook de eerder verschenen blogs van Jan-Jelle:

Blog 1: Nieuwe resultaten bij ROV SCADA-systeem afstudeerproject
Blog 2: Domotica en waarom ik het graag wil toepassen
Blog 3: Specificaties, prototyping en dimmen van mijn nieuwe ledverlichting
Blog 4: MQTT en de aannemer
Blog 5: Galvanische scheiding, van spartelende kikkerpoten tot brandende ledlampen
Blog 6: Beveiliging van elektronica, randapparatuur, kabels en gebruiksgemak
Blog 7: In-circuit Serial Programming, ofwel ICSP
Blog 8: W5500 ethernet interface en level shifting
Blog 9: Hardware beveiligen