2013-10-17 8 views
8

Ich benutze Kernel 3.12.rc4 auf einem Embedded-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.spidev kann das Chipauswahlsignal nicht steuern

I bearbeiten arch/arm/boot/dts/imx23-olinuxino.dts wie:

ssp1: [email protected] { 
    #address-cells = <1>; 
    #size-cells = <0>; 
    compatible = "fsl,imx23-spi"; 
    pinctrl-names = "default"; 
    pinctrl-0 = <&spi2_pins_a>; 
    clock-frequency = <1000000>; 
    status = "okay"; 

    spidev: [email protected] { 
    compatible = "spidev"; 
    spi-max-frequency = <1000000>; 
    reg = <1>; 
    }; 
}; 

arch/arm/boot/dts/imx23.dtsi: dieser Konfigurations

spi2_pins_a: [email protected] { 
    reg = <0>; 
    fsl,pinmux-ids = < 
    0x0182 /* MX23_PAD_GPMI_WRN__SSP2_SCK */ 
    0x0142 /* MX23_PAD_GPMI_RDY1__SSP2_CMD */ 
    0x0002 /* MX23_PAD_GPMI_D00__SSP2_DATA0 */ 
    0x0032 /* MX23_PAD_GPMI_D03__SSP2_DATA3 */ 
    >; 
    fsl,drive-strength = <1>; 
    fsl,voltage = <1>; 
    fsl,pull-up = <1>; 
}; 

Geräte Bindung sieht richtig hat. Wenn ich den Kernel kompiliere bekomme ich die /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 setzen 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?

The reference manual für den Prozessor

+0

Sind Sie sicher, dass es keine Hardware Problem? Versuchen Sie, den Pin als GPIO und stellen Sie sicher, es ändert sich – stdcall

Antwort

3

ich nie Gerätebaum verwendet, aber ich versuche, Ihnen trotzdem zu helfen.

Die Kernel erstellen das Gerät /dev/spidev1.1, so spidev zu SPI-Bus 1, verbunden ist Chipauswahl 1. Die Chip-Nummerierung beginnt bei 0, und Sie haben kein anderes Gerät, das mit SPI-Bus 1 verknüpft ist.

Soweit ich zum SPI Kern reg = <1> zu sagen wissen, dass wählt Chip 1 ist spidev verbunden, aber vielleicht ist das Gerät mit dem Chip-Select 0 angeschlossen So reg = <0>

+0

es löste nicht mein Problem, aber anstatt 100 Punkt zu verschwenden, ist es besser, jemanden zu geben :) – sven

+0

Vielen Dank;) Haben Sie überprüft, dass alle auf Ihrem Chip auswählen ist nicht bewegend? – Federico