1. 程式人生 > >24 裝置樹裡描述spi裝置

24 裝置樹裡描述spi裝置

核心文件裡沒有直接增加spi裝置的驅動方法, 但可通過裝置樹裡現有spi裝置的描述來學習.

spi裝置在裝置樹裡像描述i2c裝置一樣,需要在spi控制器節點裡用子節點描述spi裝置節點:
&spi0 { /* spi控制器節點 */
    ...
    cs-gpios = <&pio 2 3 GPIO_ACTIVE_HIGH>, <&pio 0 6 GPIO_ACTIVE_HIGH>;
        /* 片選的io口需與下面的spi裝置節點一致  */

    spidev0 {
        compatible = "nanopi,spidev"
; /* 此屬性值用於與spi裝置驅動匹配 */ reg = <0>; /*spi裝置是沒有裝置地址的, 這裡是指使用spi控制器的cs-gpios裡的第幾個片選io */ status = "okay"; /* status屬性值為"okay"表示spidev0裝置使能, "disabled"表示裝置沒有使用*/ spi-max-frequency = <10000000>; /* 指定spi裝置的最大工作時鐘 */ ... buswidth = <8>; /* 傳輸以8位為單位 */ mode = <0>; /* 使用第幾種工作時序(CPOL, CPHA) */ /*但在現用的核心原始碼裡發現, spi裝置的工作時序並不是用mode屬性值來指定的*/ /* 如CPOL需要設1
, 則只需在spi裝置節點裡加上"spi-cpol"屬性即可; CPOL設0,則不寫"spi-cpol"屬性即可 */ /* CPHA設1時, 則在裝置節點裡加上"spi-cpha"屬性即可 */ /* 還可以加入自定義的屬性,用於指定工作時序方式及其它功能設定等 */ }; };

如: 在spi1控制器介面上接入一個名為”spidev”的裝置,裝置的最大工作時鐘為100KHz, 使用spi1控制器的第0個片選, 則在裝置樹裡:

&spi1 {
    ...
    cs-gpios = <&pio 0 13 GPIO_ACTIVE_HIGH>;

    spidev0 {
        compatible = "spidev"
; reg = <0>; status = "okay"; spi-max-frequency = <100000>; }; };

重編並更新裝置樹後,在系統可以檢視到:

^_^ / # cat /sys/bus/spi/devices/spi1.0/modalias 
spi:spidev

用於測試呼叫spi 控制器的spidev_test.c在現核心原始碼目錄下的tools/spi/子目錄裡.