2013-10-17 72 views
8

我在嵌入式linux設備(olimex imx233 micro)上使用內核3.12.rc4。我的目標是使用/dev/spidev能夠與另一個spi設備進行通信。spidev無法控制芯片選擇信號

我編輯arch/arm/boot/dts/imx23-olinuxino.dts爲:

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:有此配置

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

設備綁定看起來是正確的。當我編譯內核時,我得到了/dev/spidev1.1。之後,我使用spidev_test.c並通過示波器監視引腳。 SCK和MOSI輸出信號正確,但是,即使在數據傳輸期間,chipselect也被設置爲邏輯高電平。

有什麼方法可以確定爲什麼在傳輸過程中spidev不能設置爲邏輯低電平?似乎需要在內核上傳遞額外的東西,或者在spidev上存在無法控制片選的問題。我想知道是否需要在內核的driver/spi目錄下的spidev.h或spidev.c上更改任何內容?或者我該如何解決它?

The reference manual因爲我從來沒有使用設備樹的處理器

+0

你確定這不是一個硬件問題?嘗試將引腳設置爲GPIO,並確保它變化 – stdcall

回答

3

,但我儘量幫你啦。

內核創建設備/dev/spidev1.1,所以spidev連接到SPI總線1芯片選擇1。芯片選擇計數從0開始,並且您沒有任何其他設備與SPI總線1相關聯。

據我所知reg = <1>告訴給spidev連接到芯片選擇1. SPI的核心,但也許你的設備連接到片選0,所以,reg = <0>

+0

它沒有解決我的問題,但不是浪費100點,最好是給某人:) – sven

+0

謝謝;)您是否檢查過您芯片上的任何選擇是沒有移動? – Federico