SPI Basicproblem

Gast #3255638
Hallo,

ich möchte ein Modul via SPI ansteuern. Hab jetzt ewig nach 
irgendwelchen Headern gesucht. Gibt es eine SPI-Library die ich in mein 
Projekt einfügen und mit dieser dann gleich Daten Senden/Empfangen kann?

Hab bisher nur mit i2c gearbeitet und dabei das fleury lib benutzt.
Gibts sowas ähnliches für SPI auf meinem Atmega64.

Danke
Bei SPI musst du mit einem Pin wackeln (Clock) und dabei die Daten über 
MOSI raustackern und über MISO einlesen.
Was eine Herausforderung. Klar ohne Lib geht das natürlich gar nicht.

Dazu haben die Megas doch sogar HW-SPI soweit ich weiß. Dann wirds noch 
einfacher. Im Datenblatt steht dazu sogar Beispielcode, fürs Init, fürs 
Senden und fürs Empfangen. Fehlt nur noch dass ein Atmel Mitarbeiter 
vorbekommt und einem den Code eintippt.

gruß cyblord
Was bringst du nicht zum Laufen?

Da sind doch fertige Funktionen abgebildet!

OK. Die Senderoutine des Masters wird man sinnvollerweise ein wenig 
pimpen, so dass sie den Inhalt von SPDR wieder zurückgibt. Das folgt 
aber unmittelbar aus dem Funktionsprinzip von SPI, bei dem ja eigentlich 
nicht 'gesendet' wird, sondern Master und Slave tauschen 1 Byte aus, 
wobei der Master die volle Kontrolle hat und für die Generierung des 
Taktes verantwortlich ist.

D.h. wenn der Master was vom Slave wissen will, dann schickt er ihm erst 
mal ein Kommandobyte und damit der Slave sein Ergebnisbyte zum Master 
rüberbringt, muss der Master eben noch ein Dummybyte hinten nach 
raustakten. Das wichtige an dieser Stelle ist nicht das Dummybyte, 
sondern dass der Master eine Aktion am SPI laufen lässt, so dass der 
Slave seinerseits das Byte zurückbringt.
(Wenn die Übertragung auf Kommandobytes basiert. Wenn nicht, dann eben 
nicht. Aber das hängt davon ab, wie der Slave konkret funktioniert).

Das, die Initialisierung des Master und eventuelle Sonderdinge die am 
Slave mit der SS Leitung (oder einer anderen Form von Chip Select) 
gemacht werden. Mehr ist das nicht.
Eine Fehlerquelle (steht aber im Datenblatt) ist der SS Pin.

Den sollte man als CS hernehmen im Master Betrieb. Denn wenn dieser Pin 
auf Eingang steht UND auf Low gezogen wird (wie auch immer), dann 
springt dir der Master-Mode raus, und der Controller ist im Slave-Mode.
Also in jedem Fall schauen dass der SS-Pin Ausgang ist. Am besten direkt 
als CS verwenden.

gruß cyblord

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.