1. 程式人生 > 其它 >基於I.MX6UL平臺的ADS1256驅動開發二.硬體連線及裝置樹

基於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屬性,看看和裝置樹節點裡定義的是否相同。

上面的工作完成後,我們就可以開始移植驅動了!