基于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属性,看看和设备树节点里定义的是否相同。
上面的工作完成后,我们就可以开始移植驱动了!