Firmware

Firmware Overview

Überblick

Die Firmware ist in 3 Bereiche unterteilt, wobei hier ein besonderes Augenmerk auf klare Trennung zur Hardware gelegt wurde. Hier ist die zusätzliche Anforderung die selbe Applikationssoftware auf einem normalen Desktop-System und auf einen AVR-Mikrocontroller lauffähig zu machen.
 

Hardware Abstraction Layer (HAL)

HAL 9000In dieser Schicht sind die Treiber für die Hardware implementiert. Im Detail sind das die serielle Schnittstelle, Pins und eine Stopwatch welche jeweils für das Desktop-System und den AVR-Mikrocontroller entwickelt wurden.
 

UART

In der Desktop-Version wird der Treiber des Betriebssystem verwendet und diese Implementierung dient nur zur Weiterleitung der Daten. In der AVR-Version wurde hier ein Ringbuffer implementiert, welcher von der Applikation befüllt und vom Treiber via Interrupts gesendet wird. Empfangene Daten werden ebenfalls in einem Ringbuffer zwischengespeichert, bevor sie von der Applikation verarbeitet werden.
 

Pins

Hier wird ein Port und die Pin-Position in einer Struktur zusammengefasst und nützliche Methoden bereitgestellt. Diese umfassen zum Beispiel das Setzen als Ausgang, das Schreiben auf den- sowie das Lesen vom Pin und weitere. Ein Pin wird im BSP definiert und in der Applikation verwendet. In der AVR-Version werden hier direkt die Register beschrieben bzw. gelesen. Für die Desktop-Version wurde eine kleine Simulationsumgebung entwickelt um Eingänge simulieren zu können (ist für die BlueMod-Implementierung erforderlich).
 

Stopwatch

Die Stopwatch wurde implementiert um Timeouts für Funktionen zu definieren. Timeouts werden auch verwendet wenn auf eine Antwort von einem der Perfipheriegeräte gewartet wird. Am AVR wird dafür einer der Timer verwendet welcher so eingestellt wurde, dass er alle 1ms weiterzählt. Bei der Desktop-Version wird eine Funktion verwendet die die Systemzeit in Millisekunden liefert.
 
 

Board Support Package (BSP):

PN532

In diesem Modul wurde das Protokoll des PN532 implementiert. Alle Aufrufe zur Hardware wurden bereits in der HAL abstrahiert. Weiters werden in diesem Modul PN532 spezifische Kommandos und Events bereitgestellt. Ein Event ist ein Funktionspointer, welcher z.B.: bei einem empfangenen Frame aufgerufen wird. Dadurch wird eine komplette Entkoppelung zur Applikation erreicht.
 

BlueMod

Dieses Modul steuert den Bluemod+B20 und verwaltet den Zustand in dem sich das Gerät gerade befindet. Verbindet sich ein Gerät mit dem Bluemod, generiert dieses Modul ein Event welches an die Applikation weitergegeben wird (wie beim PN532). Diese kann dann durch den Aufruf der entsprechenden Funktionen die Verbindungsanfrage annehmen oder ablehnen.
 
Wurde eine Verbindung mit einem Gerät hergestellt, stellt der Bluemod+B20 einen Transparenten Kanal für serielle Datenübertragung bereit. Über diesen Kanal werden dann Daten und Kommandos mit dem von uns definierten Protokoll übertragen.
 

Applikation

Durch den modularen Aufbau der Software ist die Applikation sehr einfach. Nach dem Start wird die ganze Hardware initialisiert und dann die Hauptschleife gestartet. Das Lesen und Schreiben der Daten wird von den Modulen übernommen. Die Hauptschleife muss also die entsprechenden Funktionen aufrufen (ähnlich wie Tasks, daher dürfen diese nicht blockierend sein). Durch die Callbacks erhält die Applikation Events von den Modulen und kann entsprechend reagieren.

 

Bluetooth Protokoll

Die Daten werden TLV-Codiert plus einer Checksumme übertragen: 

1 byte

1 byte

<length> bytes

1 byte

Tag

Length

Value

Checksumme

 

Dabei sind folgende Tags gültig:

Tag

Bedeutung

Beschreibung

0x01

Kommando

Wird von Software an Firmware gesendet und beinhaltet ein PN532 Kommando

0x02

Response

Response des PN532 auf ein Kommando

0x03

Error

Checksum-Error, PN532 Errors

0x04

Keep-Alive

Paket von Software an Firmware damit diese nicht in den Ruhezustand geht

0x05

Is-Alive

Antwort von Firmware auf Keep-Alive request (Length = 0 )

0x06

Setup

(optional) zum Konfigurieren der Firmware zur Laufzeit.