Ich benutze Kernel 3.12.rc4 auf einem eingebetteten Linux-Gerät (olimex imx233 micro). Mein Ziel ist es, /dev/spidev
zu verwenden, um mit einem anderen Spi-Gerät kommunizieren zu können.
Ich bearbeite arch/arm/boot/dts/imx23-olinuxino.dts
als:
arch/arm/boot/dts/imx23.dtsi:
hat diese Konfiguration
Die Gerätebindung sieht korrekt aus. Wenn ich den Kernel kompiliere, bekomme ich /dev/spidev1.1
. Danach benutze ich spidev_test.c und überwache die Pins mit einem Oszilloskop. Die SCK- und MOSI-Ausgangssignale korrekt, jedoch wird der Chipselect auch während der Datenübertragung auf den logischen High-Pegel gesetzt.
Gibt es eine Möglichkeit zu bestimmen, warum spidev während der Übertragung nicht auf logisch niedrig gesetzt werden kann? Es scheint so, als müssten entweder zusätzliche Dinge über den Kernel weitergegeben werden oder es gibt ein Problem auf spidev, das die Chipauswahl nicht kontrollieren kann. Ich frage mich, ob ich irgendetwas auf dem spidev.h oder spidev.c im Treiber / spi-Verzeichnis des Kernels ändern muss? oder wie kann ich es lösen?
Das Referenzhandbuch für den Prozessor
Ich habe nie den Gerätebaum benutzt, aber ich versuche trotzdem, dir zu helfen.
Der Kernel erstellt das Gerät /dev/spidev1.1
, also ist spidev mit SPI bus 1 , chip select 1 verbunden. Die Nummerierung der Chipauswahl beginnt mit 0
, und Sie haben kein anderes Gerät mit SPI-Bus 1 verbunden.
Soweit ich weiß reg = <1>
sagen Sie dem SPI-Kern, dass spidev mit chip select 1 verbunden ist, aber vielleicht ist Ihr Gerät mit dem Chip verbunden, wählen Sie 0. Also, reg = <0>
Tags und Links linux linux-kernel spi