Teste semf
Kontakt

Ob Fehlerbeseitigung oder Funktionserweiterungen – Embedded Systeme müssen in immer kürzeren Zyklen upgedatet werden. Firmware-Aktualisierungen sind jedoch häufig kritische Arbeitsschritte und für den Entwickler meist mit großem Zeitaufwand verbunden.

Gut, wenn es für diese Aufgaben Systeme gibt, die die Arbeit für den Embedded Engineer schneller, sicherer und komfortabler machen. Aus langjähriger Erfahrung haben die Macher von semf mit dem semf Bootloader ein Toolset entwickelt, das funktionssichere Firmware-Updates in wenigen Schritten ermöglicht.

Der semf Bootloader ist herausragend:

Fail-Save bei z.B. Spannungsausfall

Ausführliche Integritätschecks (CRC, SHA256, PKCS1)

Flashen von mehreren Speicher-Bausteinen

Verschlüsselung und Entschlüsselung der Binaries

Einfach konfigurierbar

Der semf Bootloader – drei Kernkomponenten inklusive Speichermodulen und Treibern

Der semf Bootloader besteht aus drei Kernmodulen, dem PC-Tool Firmware Packer, der Applikationsklasse Firmware Updater und der Bootloader-Applikation selbst. Komplettiert wird das Komponenten-Set durch optionale Treiber und Speichermodule.

Inklusive individueller Projektintegration

Bootloader Komponente 1: Firmware Packer

Mit dem Firmware Packer wird die Binärdatei Ihrer neuen Firmware wie gewünscht mit einer CRC oder einem Hash versehen, AES-verschlüsselt oder mit einem Zertifikat versehen. Anschließend können die Daten über unterschiedlichste Kommunikationswege an den Mikrocontroller übertragen werden. Übliche Beispiele reichen von I2C, SPI, UART (RS232 oder RS485) über CAN, Modbus, USB hin bis zu MQTT-Datenpaketen über TCP/IP via Ethernet. Der semf Bootloader unterstützt weitestgehend alle gängigen Kommunikationsschnittstellen.

Bootloader Komponente 2: Firmware Updater

Über die Kommunikationsschnittstelle gelangen die Daten zur Firmware-Updater-Klasse, die je nach Konfiguration die Daten und ggf. das Zertifikat prüft, entschlüsselt und anschließend an einen gewünschten Bereich im Speicher ablegt. Als Speichertechnologien werden interne Mikrocontroller-Flash und externe NOR- und NAND-Flash Bausteine unterstützt.

Firmware Updater – Beispiel

Im folgenden Beispiel sehen Sie die Verwendung des Firmware Updaters in der Hauptapplikation, die das Binary entgegennimmt, prüft und in den Shared Memory kopiert.


// Address where the shared data is stored in the internal flash memory.
constexpr uint32_t kSharedMemoryAddress 0x08004400
// Address where the firmware file is stored in the external flash memory.
constexpr uint32_t kExternalFlashFirmwareFirstSector 12

// Classes depend on the used microcontroller and external flash hardware
// For reset
semf::Power power;  
// Where the shared menory is located.
semf::Flash internalFlash;
// Where the new firmware file is stored. 
semf::Flash externalFlash;

// Decryption
uint8_t aesData[16];
semf::AesCbcMbed aesCbc(aesData, sizeof(aesData));
// Hash computation
uint8_t sha256Data[32];
semf::HashSha256Mbed sha256(sha256Data, sizeof(sha256Data));
// Verification with signature   
uint8_t pkcs1Data[128];
semf::SignaturePkcs1Mbed pkcs1(pkcs1Data, sizeof(pkcs1Data));  

semf::BootloaderSharedMemoryFlash sharedMemory(internalFlash, kSharedMemoryAddress);
uint8_t firmwareupdaterData[1024];
semf::FirmwareUpdater firmwareupdater(externalFlash, aesCbc, sha256, pkcs1,
	sharedMemory, firmwareupdaterData, sizeof(firmwareupdaterData));

/**
 * Slot for firmware is ok and firmare updater is finished.
 */
void onFirmwareReady()
{
	// do system reset
	powerModes.reset();
}

// Start
firmwareupdater.start(externalFlash.address(kExternalFlashFirmwareFirstSector));

Bootloader Komponente 3: Bootloader-Applikation

Nach erfolgreicher Prüfung wird üblicherweise ein Reset durchgeführt und der Mikrocontroller startet in der Bootloader-Applikation. Diese prüft bei jedem Start, ob eine neue und gültige Firmware verfügbar ist, und flasht diese anschließend bei Bedarf.

Bootloader – Beispiel

Im folgenden Beispiel sieht man die Bootloader-Applikation, die im Shared Memory prüft, ob ein neues und geprüftes Firmware-Update vorhanden ist und dieses anschließend flasht.

constexpr uint32_t kSharedMemoryAddress 0x08004800
constexpr uint32_t kApplicationAddress 0x08005400

uint8_t data[128];
semf::BootloaderSharedMemoryFlash sharedMemory(kSharedMemoryAddress);

// Classes depend on the used microcontroller and external flash hardware
semf::Flash externalFlash;
semf::Flash internalFlash;
semf::Bootloader bootloader(externalFlash, internalFlash, 
	sharedMemory, kApplicationAddress, data, sizeof(data));

bootloader.start();
// Blocks until bootloader is finished
while(!bootloader.isready());
bootloader.startApplication();

Tutorials

Erfahren Sie mehr über die einzelnen Komponenten in unseren Tutorials. Alle Tutorials finden Sie auf der Seite Dokumentation.

Preise

Bootloader & optionale Treiber

Anfragen

Embedded C++ Beratung

Fragen zur Konfiguration?
Wir beraten Sie gerne.

Rückruf anfordern