Blick ins Kerngehäuse Der Cortex-M3 im Vergleich zu ARM7 – neue Funktionen für Safety, Security und Programmanalyse

Kompaktheit stand ganz oben auf der Prioritätenliste des Cortex-M3. Trotzdem verfügt er über leistungsfähige Analyse-Tools, mit denen Qualität und Performance von Anwendungen verbessert werden können. Aber auch wichtige Sicherheitsfunktionen zum Schutz vor Software-Klau sind implementiert.

Funktionssicherheit und Ausfallsicherheit sind für immer mehr Applikationen Key-Features, da immer mehr sicherheitskritische Funktionen per Software des Mikrocontrollers gelöst werden und bei Versagen die Gefahr von materiellen Schäden besteht oder sogar Menschen in Gefahr kommen können. Hierbei unterstützt der STM32 sowohl mit eingebauten Sicherheitsfunktionen als auch mit Analysemöglichkeiten des „Serial Wire Viewers“, wodurch entwickelte Software genauer untersucht werden kann. Aber auch gegen Software-Piraterie hat der STM32 Funktionen eingebaut, die helfen, teuer entwickelte Intellectual Property zu schützen.

Stabilität von Spannung und Takt

Ausreichend Spannung zur Versorgung des Mikrocontrollers und ein zuverlässiger Takt sind existenzielle Voraussetzung für ein funktionierendes System. Fehlt eines von beiden, ist die Funktionalität nicht mehr gegeben. Fällt die Spannung aus, z.B. bei Stromausfall oder wenn die Batterie zu schwach wird, kann dies vom Mikrocontroller nicht selbst ausgeglichen werden. Das einzige Gegenmittel besteht darin, dies möglichst früh zu erkennen und geeignete Maßnahmen zu ergreifen, um das System in einen sicheren Zustand zu bringen – oder einen Alarm auszulösen, der dafür sorgt, dass die bald fehlende Spannung ersetzt wird.

Für diese Früherkennung ist im STM32 die „Power Voltage Detect Unit“ (PVD) implementiert. Sie hat ein Controlregister, mit dem die überwachte Spannungsschwelle in Schritten von 100 mV von 2,2 bis 2,9 V gesetzt werden kann. Unterschreitet die Versorgungsspannung diese Schwelle, kann ein Interrupt ausgelöst werden. Durch die Möglichkeit, die genaue Höhe dieser Schwelle zu definieren, kann auf die Eigenarten der Stromversorgung eingegangen werden, damit genügend Zeit bleibt, um mit der restlichen Energie das System in den sicheren Zustand zu bringen. Unterschreitet die Spannung dann den sicheren Spannungsbereich von 2 V bis 3,6 V, sorgt die Reset-Logik dafür, dass der Controller in den Reset-Zustand gebracht wird, damit auch hier keine Unsicherheit über einen evtl. undefinierten Zustand besteht.

Fällt der externe Takt aus, kann der Controller sich selbst helfen. Hierfür hat der STM32 einen internen Oszillator (HSI), der auf 8 MHz ± 1 % getrimmt ist. Er wird nach Reset oder für das schnelle Aufwecken aus Power- Save-Modi genutzt. Aber auch nach einem Ausfall des externen Oszillators (HSE) wird er sofort als Taktquelle genutzt. Dies geschieht automatisch, wenn das „Clock Security Enable“-Bit im RCC-Register gesetzt ist. In diesem Fall wird auch ein nicht-maskierbarer Interrupt ausgelöst, der die Software über das Ereignis informiert. Da eine Reaktion der Software auf diese eventuelle Frequenzänderung für kritische Anwendungen wie z.B. eine Motorsteuerung zu langsam wäre, existiert auch hier Hardware im STM32-Controller, die diese Ereignisse abfängt.

Die PWM-Ausgänge des „Advanced Timer1“ werden gestoppt und in einen sicheren Zustand gebracht, um dafür zu sorgen, dass diese Ausgänge nicht unkontrolliert vom STM32 laufen. Dieses Einspringen des HSI bei Ausfall des externen Taktsignals kann mit dem STM32-PerformanceStick, einem preisgünstigen Evaluierungs- Tool für den STM32, schnell und einfach gezeigt werden. Auf dem Stick ist außer dem STM32-Controller auch ein ARM7-Mikrocontroller untergebracht, damit Performance-Vergleiche und Stromaufnahmemessungen möglich sind. Mit Hilfe dieses ARM7- Controllers kann, gesteuert durch die mitgelieferte Dashboard-Software, der externe Takt des STM32 abgeschaltet werden (Bild 1).

Durch Deaktivieren der Checkbox „External Clock“ wird diese abgeschaltet und der interne Oszillator versorgt den Mikrocontroller. Da die externe Clock mit PLL auf bis zu 72 MHz getaktet war und nun auf die interne Clock mit 8 MHz umgeschaltet wird, blinkt die LED am STM32-PeformanceStick deutlich langsamer. Wird die Checkbox wieder aktiviert, wird wieder auf Versorgung durch die externe Clock umgeschaltet und die LED blinkt wieder schnell.