2013-10-17 6 views
8

Uso il kernel 3.12.rc4 su un dispositivo Linux incorporato (olimex imx233 micro). Il mio obiettivo è utilizzare /dev/spidev per poter comunicare con un altro dispositivo spi.spidev non può controllare il segnale di selezione del chip

modifico arch/arm/boot/dts/imx23-olinuxino.dts come:

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: ha questa configurazione

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>; 
}; 

dispositivo si presenta vincolante corretta. Quando compilo il kernel ottengo lo /dev/spidev1.1. Dopo di che uso spidev_test.c e monitoro i pin con un oscilloscopio. I segnali di uscita SCK e MOSI sono corretti, tuttavia, il chipselect è impostato sulla logica alta anche durante il trasferimento dei dati.

Esiste un modo per determinare perché spidev non è possibile impostare la logica basso durante la trasmissione? Sembra che o altre cose debbano essere passate sul kernel o c'è un problema su spidev che non può controllare il chip select. Mi chiedo se è necessario modificare qualcosa su spidev.h o spidev.c nella directory driver/spi del kernel? o come posso risolverlo?

The reference manual per il processore

+0

Sei sicuro che non è un hardware problema? Prova a impostare il pin come GPIO e assicurati che cambi – stdcall

risposta

3

non ho mai usato albero dei dispositivi, ma cerco di aiutare in ogni modo.

I kernel creano dispositivo /dev/spidev1.1, così spidev è collegato al bus SPI , chip select 1. La numerazione di selezione del chip inizia da 0 e non si dispone di nessun altro dispositivo associato al bus SPI 1.

Per quanto ne so reg = <1> dire al nucleo SPI che spidev collegato a scheggiare selezionare 1., ma forse il dispositivo è collegato al chip select 0. Quindi, reg = <0>

+0

non risolvendo il mio problema ma invece di sprecare 100 punti, è meglio dare a qualcuno :) – sven

+0

Grazie;) Hai controllato che sul tuo chip è selezionato non si muove? – Federico