24 裝置樹裡描述spi裝置
阿新 • • 發佈:2019-01-02
核心文件裡沒有直接增加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/子目錄裡.