基於I.MX6UL平臺的ADS1256驅動開發二.硬體連線及裝置樹
在前面一章我們瞭解了ADS1256在通訊中的時鐘要求和指令,我們這一章結合主機部分完成Linux下的裝置樹資訊,然後完成硬體的連線。
硬體連線
在上一章我們說過,ADS1256作為SPI通訊的從機部分,在完成基礎功能的條件下和主機之間有5條介面需要連線,然後有些介面需要保持高電平
這裡我們通過軟體模擬SPI介面的形式,將IO複用為GPIO,主要使用GPIO1組的5個IO口,後面的括號裡是開發板的IO介面
上面的圖中左邊為介面的原理圖,右邊是實際開發板上的介面。
裝置樹資訊
在完成硬體連線以後,我們要根據實際介面使用情況來更新裝置樹資訊
GPIO節點
首先是GPIO的複用節點
1 &iomuxc {2 pinctrl-names = "default"; 3 pinctrl-0 = <&pinctrl_hog_1>; 4 imx6ul-evk { 5 pinctrl_enet1_reset: enet1resetgrp { 6 fsl,pins = < 7 /*下面的裝置資訊會和LED的GPIO衝突*/ 8 /*MX6ULL_PAD_SNVS_TAMPER7__GPIO5_IO07 0x10B0 */ 9 >;10 }; 11 12 pinctrl_enet2_reset: enet2resetgrp { 13 fsl,pins = < 14 MX6ULL_PAD_SNVS_TAMPER8__GPIO5_IO08 0x10B0 15 >; 16 }; 17 18 pinctrl_hog_1: hoggrp-1 { 19 fsl,pins = < 20 MX6UL_PAD_UART1_RTS_B__GPIO1_IO19 0x17059/* SD1 CD */ 21 MX6UL_PAD_GPIO1_IO05__USDHC1_VSELECT 0x17059 /* SD1 VSELECT */ 22 >; 23 }; 24 25 /*ads1256軟體SPI*/ 26 pinctrl_ads1256: ads1256grp{ 27 fsl,pins = < 28 /*3個輸出功能引腳*/ 29 MX6UL_PAD_GPIO1_IO03__GPIO1_IO03 0x10B0 /*CS*/ 30 MX6UL_PAD_UART2_RX_DATA__GPIO1_IO21 0x10B0 /*CLK*/ 31 MX6UL_PAD_UART2_CTS_B__GPIO1_IO22 0x10B0 /*MOSI*/ 32 /*2個輸入功能引腳*/ 33 MX6UL_PAD_UART2_RTS_B__GPIO1_IO23 0xF080 /*MISO*/ 34 MX6UL_PAD_UART3_TX_DATA__GPIO1_IO24 0xF080 /*DRDY*/ 35 >; 36 }; 37 ........ 38 ........ 39 ........ 40 ........
因為我們使用的是Soc上4組GPIO的GPIO1組,裝置樹中GPIO複用資訊應該在IOMUX下完成。新新增的資訊從26行開始,將3組GPIO介面複用為IO,注意的是29~31行引腳為輸出功能,33、34兩行為輸入引腳,IO不同的工作方向對應的值是不同的。
ADS1256節點
ADS1256的裝置節點直接放在開發板裝置樹根節點下
1 /*ads1256軟體模擬SPI*/ 2 ads1256{ 3 compatible = "ads1256"; 4 pinctrl-name = "pinctrl_ads1256"; 5 ads1256-gpios = <&gpio1 3 GPIO_ACTIVE_HIGH /*CS*/ 6 &gpio1 21 GPIO_ACTIVE_HIGH /*CLK*/ 7 &gpio1 22 GPIO_ACTIVE_HIGH /*MOSI*/ 8 &gpio1 23 GPIO_ACTIVE_HIGH /*MISO*/ 9 &gpio1 24 GPIO_ACTIVE_HIGH>; /*DADR*/ 10 status = "okay"; 11 };
裝置數資訊沒什麼可說的,首先是compatible用來匹配驅動
pinctrl-name是和GPIO配置的資訊進行匹配。
後面的ads1256-gpios是gpio子系統的配置資訊
這樣就完成了採集卡的外設資訊在裝置樹檔案中的更新。這些工作完成後要檢視一下有沒有哪個裝置使用了這些GPIO介面,比如CS功能是用到GPIO1的IO03,我們需要在整個裝置樹中查一下
MX6UL_PAD_GPIO1_IO03
以及
&gpio1 3
就像這樣
或者
這種情況說明有些裝置已經佔用了這個介面,查下這個裝置是什麼,如果是不重要的外設的話把這條命令遮蔽掉。 (我用到這幾個介面都是不重要的,直接遮蔽就可以了)
完成裝置樹資訊以後make一下裝置樹
make dtbs
使用新的裝置樹檔案啟動系統,可以檢視一下裝置
列印一下name屬性,看看和裝置樹節點裡定義的是否相同。
上面的工作完成後,我們就可以開始移植驅動了!