• 正文
    • 硬件原理
    • IOMUX配置
    • 添加设备节点
    • 添加AHT20驱动
    • 编译测试
  • 相关推荐
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-开发板适配之I2C-温湿度传感器

02/10 09:15
736
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线,它只需要两根线SDA(串行数据线)和SCL(串行时钟线)即可在连接于总线上的器件之间传送信息。I2C总线上可以挂载很多设备,比如ELF 1开发板,I2C1总线上挂载有电容屏的触摸芯片温度传感器,rx8010时钟芯片,I2C2上挂载有光线传感器,NAU88C22音频解码芯片。下面我们以温湿度传感器为例,介绍如何添加I2C设备。

硬件原理

IOMUX配置

温湿度传感器挂载在I2C1总线上,I2C1数据IIC1_SDA和时钟IIC1_SCL,分别对应的PAD NAME为,UART4_TX_DATA、UART4_RX_DATA。

在arch/arm/boot/dts/imx6ul-pinfunc.h中找到它们的宏定义,分别如下:

MX6UL_PAD_UART4_TX_DATA__I2C1_SCL

MX6UL_PAD_UART4_RX_DATA__I2C1_SDA

然后打开设备树文件arch/arm/boot/dts/imx6ull-elf1-emmc.dts,我们看到原来的设备树文件已经添加了pinctrl_i2c1子节点,而且选择的引脚与UART4_TX_DATA、UART4_RX_DATA一致,所以此处无需修改,

效果如下:

添加设备节点

查看arch/arm/boot/dts/imx6ull-elf1-emmc.dts文件,其实已经有了I2C1节点,可以看到其下有两个子节点,这两个子节点是挂载在I2C总线上的具体设备,我们没有用到,这里可以注释掉:

添加如下内容:

        aht20@38{

compatible = "elf,aht20";

reg = <0x38>;

status = "okay";

};

添加后效果如下:

添加AHT20驱动

一、将ELF 1开发板资料包2-Linux 源代码 02-Linux 源代码2-1 驱动源码2_ath20aht20.c拷贝到内核源码的drivers/misc/路径下:

二、将ELF 1开发板资料包2-Linux 源代码 02-Linux 源代码2-1 驱动源码2_ath20i2c_aht20.h拷贝到内核源码的include/linux路径下:

三、修改Kconfig:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi drivers/misc/Kconfig

添加以下内容:

config AHT20

tristate "I2C device AHT20"

depends on I2C && SYSFS

help

If you say yes here,you get support for the aht20

添加后效果如下:

四、修改Makefile:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ vi drivers/misc/Makefile

添加以下内容:

obj-$(CONFIG_AHT20)             += aht20.o

添加后效果如下:

五、将aht20驱动编译进内核:

使用make menuconfig打开图形化配置界面:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ make menuconfig

找到以下位置,我们可以在这里选择Y编译进内核,或者M编译成模块,或者N选择不编译。选择编译进内核:

Device Drivers

-> Misc devices

六、替换配置文件

通过make menuconfig修改的内容写入到了.config文件,当使用make imx6ull_elf1_defconfig配置内核源码时,.config文件会被覆盖,因此,需要替换原有的imx6ull_elf1_defconfig。

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ cp .config arch/arm/configs/imx6ull_elf1_defconfig

编译测试

编译内核和设备树并拷贝到开发板:

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ./build.sh

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/zImage   root@172.16.0.175:/run/media/mmcblk1p1/

elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/

进行sync操作后重启开发板:

使用以下命令测试传感器能否读到正确数据:

root@ELF1:~# elf1_cmd_aht20

点赞
收藏
评论
分享
加入交流群
举报

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录