mikrocontroller.net

Forum: Projekte & Code SPI Treiber für Linux auf ARM


Autor: Flush (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Hab gerade eine Aufgabe bekommen die mir gar nicht liegt.
Hatte bisher noch nie was mit Linux zu tun und muss jetzt einen 
SPI-Treiber für einen ARM-Prozessor schreiben.
Habe mir schon einige Sachen durchgelesen, nur schlau wurde ich bisher 
nicht daraus. Gibt es irgendeine dummy-Anleitung um einen SPI-Treiber zu 
schreiben?

Danke für Hilfe.

Gruß
Flush

Autor: Flush (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit Quellcode gebe ich mich natürlich auch zufrieden ... ;)

Autor: Claude Schwarz (claudeschwarz)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein ARM (Type und Hersteller)? Nur der Kernel Treiber , oder 
auch ein dazughöriges Userspace Programm? Oder meinst Du einen Treiber 
für z.b. einen Touch Controller der per SPI mit dem Host plaudert? Falls 
Du einen Atmel,Xscale,Freescale,Cirrus oder Samsung ARM einsetzt mach 
doch einfach das Häckchen in der Kernel Config beim SPI an!?
Übrigens ist dies die Codesammlung , allgemeine Fragen gehören eher in 
ein anderes Forum.

Autor: Piwi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe das gleiche Problem...

Muss auch einen SPI Treiber schreiben, um mit einem RFID Transceiver zu 
kommuniziren.
Ich nutze einen AT91RM9200 mit einem 2.6.21.7 Kernel...

Als ich den Kernel kompilierte, habe ich das Häckchen gesetzt.
Habe mknod /dev/spi0 c 153 0 ausgeführt.
Normalerweise kann man anschließend read, write, open, ioctl, close 
nutzen oder?
Klappt bei mir leider nicht...

Wenn ich den AT91RM9200 SPI Driver (legacy)unter Character DEvices in 
der Kernelkonfiguration ankreuze, dann kann ich über SPI senden, jedoch 
nicht den  Chip Select ändern?

Hat jemand einen Plan!!!

Autor: Claude Schwarz (claudeschwarz)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du in deiner Board Config 
(arch/arm/mach-at91/board-deinboardname.c) im SPI Init Struct die Chip 
Select Leitungen zugewiesen? Wichtig ist auch das Du dort für das Device 
ein "spidev" anlegst um aus dem Userspace auf den SPI sprechen zu 
können. Danach sollte eigntlich open(),close(),read() und write() 
problemlos laufen.

Ich würde aber den Weg über eine Platform Device mit dazugehörigen 
Platform Driver wählen, ist auf jedenfall eine bessere Lösung als über 
das spidev zu sprechen (Man kann z.b. keine Interrupt Handler mit dem 
spidev nutzen).

Hab Dir mal einen (sehr hässlichen und unaufgeräumten!!) Treiber von mir 
angehängt.  Der Treiber legt ein spi device und ein platform device 
(framebuffer)an.
Um den Treiber(SPI Device/Platform Device) zu nutzen muss im Board 
Config / SPI Init Struct das Device "et028002" registriert werden. Der 
Platform Treiber (Platform Driver) wird ebenfalls über den Namen 
"et028002" , allerdings im Platform Device Struct , registriert.

Kann Dir das Buch ISBN 0132396556 empfehlen. Wird auch SPI abgehandelt.

Ach , und nochwas was mich sehr viel Zeit gekostet hat aber 
wahrscheinlich bei Dir nicht zutrifft , da Du wahrscheinlich keine 
xKiloBytes über den SPI in einem Rutsch schieben willst: Die AT91 PDC 
kann maximal 0xFFFE Bytes an einem Stück übertragen, 0xFFFF macht nur 
Müll.

Autor: Janusz Piwek (piwi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe in den letzten Tagen den 2.6.26 Kernel kompiliert und setze auch 
das SPI-Master Framework ein.
Nun weiß ich wie es geht...
Bin auf das gleiche Ergebnis wie du gekommen.
Trotzdem vielen Dank für deine Mühe.

SChönen Gruß
Piwi

Autor: Julian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Piwi,

wie funktioniert das SPI-Master-Framework mit Version 2.6.26?
Kannst du bitte kurz umreißen, wie du vorgegangen bist?

Dank und Gruß
Julian

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.