基于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属性,看看和设备树节点里定义的是否相同。

上面的工作完成后,我们就可以开始移植驱动了!

 

posted @ 2022-12-05 22:04  银色的音色  阅读(293)  评论(0编辑  收藏  举报