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
Sind Sie sicher, dass es keine Hardware Problem? Versuchen Sie, den Pin als GPIO und stellen Sie sicher, es ändert sich – stdcall