myavr.CHKRonline.de

Informationen und Projekte Rund um die Mikrocontroller-Programmierung
von myAVR (ATmega8), STM32 (Cortex-M3/4) und Raspberry Pi (ARM11)

Der Autor

Christian KrügerChristian Krüger, ursprünglich aus dem Altenburger Land stammend, wohnt heute in Nürnberg. Nach seinem Studium der Informations­technik an der West­sächsischen Hochschule in Zwickau, ist er heute Software Entwickler für ein­gebettete Systeme. Seine Berufung fand er im Dienst für seine Kollegen als Teamleiter bei ISCUE.

Die größte Leidenschaft Christians ist es, die Schönheit unserer Welt einzufangen und weiter­zuerzählen. Dies gelingt ihm mit Hilfe seiner Kamera. Seine Fotos und Videos sind auf Instagram und seiner Webseite zu betrachten.

Für seine Zukunft freut sich Christian auf erinnerungs­würdige Reisen, begeisterungs­fähige Menschen und viele neue Erfahrungen.

CHKRonline.de

Facebook Profil

Twitter Profil

XING Profil

Meine myAVR Treiber

SPI Treiber

Bei dem SPI (Serial Peripherie Interface) handelt es sich um eine einfache serielle Kommunikationsschnistelle für die Anbindung von Perepherie an einen Mikrocontroller. Sie wird vor allem auf Schaltungsträgern für die Anbindung von Analog-Wandlern, IO-Expandern oder Speichern genutzt. Weiterhin eignet sich SPI auch, um mehrere Controller zu verbinden.

SPI arbeitet als Master-Slave-System und bildet topologisch einen (oder mehrere) Ring(e) aus Schieberegistern, wobei jeder Teilnehmer einem Register entspricht. Die einzelnen Slaves können dabei parallel oder seriell hintereinander geschalten sein. Ist keine Antwort von einem Slave zu erwarten (z.B. bei einem Digital-Analog-Wandler), ist die Rückverbindung vom Slave zum Master nicht notwendig.

SPI basiert auf 4 Signal:

  1. MOSI - Master Out Slave In
  2. MISO - Master In Slave Out
  3. SCK - Serial Clock
  4. SS - Slave Select

SPI Interface

Für die reine Datenübertragung sind demnach immer ein Taktsignal und ein Datensignal notwendig. Der Takt wird vom Master generiert und Daten werden via MOSI gesendet. Empfängt ein Slave Daten, kann er widerum eine Antwort über MISO zurücksenden. Die Übernahme der Daten erfolgt je nach Einstellung auf der steigenden oder fallenden Taktflanke. Wichtig ist, dass alle Slaves die selben Einstellungen nutzen, wie der Master. Auch ist der maximale Takt der Slaves zu beachten.

Umsetzung

Der SPI Treiber stellt alle Funktionen der SPI-Schnittstelle eines ATmega zur Verfügung. Die Verbindung lässt sich mit wenigen Funktionen initialisieren und steuern, ohne noch einmal das Datenblatt des ATmega lesen zu müssen. Die Maximale Taktfrequenz des SPI entspricht der halben Oszillatorfrequenz.

Übertragen werden 8 Bit pro Paket. Die Steuerung mittels Interrupt ist vorgesehen und erfordert lediglich die Ausfüllung der Interrupt Service Routine. Es ist aber auch das Pollen des Interrupt-Flags möglich.

Einen kleinen Schönheitsfehler stellt genau dieses Interrupt-Flag dar. Es soll anzeigen, wenn eine Nachricht erfolgreich über den SPI transportiert wurde. Allerdings ist es nach der Initialisierung auf 0 geschalten, was einen Beginn der Kommunikation mit vorheriger Prüfung des Transferbuffers unmöglich macht. Um dieses Problem zu umgehen wird bei der Modus-Wahl bereits eine Dummy-Nachricht über den SPI versendet und quittiert.

Lizenz

Dieses Programm ist freie Software. Du kannst es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version 3 der Lizenz oder (nach deiner Option) jeder späteren Version.

Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, dass es dir von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN BESTIMMTEN ZWECK. Details findest du in der GNU General Public License.

Die Lizenzvereinbarung stehen folgend zur Verfügung: GPL 3.0 Lizenz

Die zur Kompilierung nötigen und damit in die Hex-Datei eingeflossenen Bibliotheken umfassen Teile der AVR Libc. Diese steht unter einer modifizierten Version der BSD Lizenz zur Verfügung. Genaue Informationen zu den einzelnen Lizenzen sind den eingeflossenen Bibliotheken zu entnehmen und lassen sich hier nachlesen: AVR Libc Lizenz

Kompilierung

Der Treiber liegt in Form einer statischen Bibliothek vor. Diese kann einfach zusammen mit einem ausführbaren Programm gelinkt werden. Dazu sind der Header der Bibliothek als auch die Bibliothek selbst notwendig. Neben der Bibliothek liegt ein Testprogramm vor, welches ein sich veränderndes Testmuster über den SPI ausgibt.

Die Bibliothek wurde mit Hilfe von AVR-Eclipse entwickelt. Sie sollte sich in einem Hauptprogramm mit Hilfe des myAVR Workpad SE bzw. Plus oder AVR-Ecplise jederzeit kompilieren und auf ein myAVR Board MK2 USB transferieren lassen. Bei der Nutzung des myAVR Workpad ist dazu die Angabe der Bibliothek in den Datei-Kommentaren notwendig:

// LinkerOption   : -v -L"PATH_TO_SPI_LIBRARY" -lSPIDriver

Unter Eclipse ist die Definition des Symbols __ECLIPSE__ für eine korrekte Kompilierung notwendig, außerdem müssen die Pfäde zu der Bibliothek in den Projekt-Eigenschaften hinterlegt werden. Siehe dazu auch das AVR-Eclipse Tutorial Seite 3.

Die Kompilierung der Bibliothek selbst ohne Hauptprogramm ist lediglich mit AVR-Eclipse vorgesehen. Das myAVR Workpad bietet keine mir bekannte Möglichkeit, eine Bibliothek zu kompilieren.

Bei Fragen oder Anregungen stehe ich gerne zur Verfügung: chkr1989@chkronline.de

Changelog

Version 1.3

Version 1.2

Version 1.1

Test Version 1.1

Version 1.0

Bibliothek ATmega8 @ 3,6864 MHz

Bibliothek ATmega238P @ 16.0 MHz

Testprogramm ATmega8 @ 3,6864 MHz

Testprogramm ATmega238P @ 16.0 MHz

Lizenzinformationen