如何在linux下使用自带GPIO模拟I2C的驱动

如何查看系统有没有自带驱动

本文以百问网imx6ull pro为例,进入目录
在这里插入图片描述
使用vi .config 指令查看有没有编译CONFIG_I2C_MUX_GPIO

在这里插入图片描述
可以看到#CONFIG_I2C_MUX_GPIO is not set

所以我们使用make menuconfig 命令配置

在这里插入图片描述
/ I2C_GPIO搜索一下 ,可以看到具体的位置
在这里插入图片描述
进入这个位置,输入M将他配置编译成模块,当然你也可以配置编译进内核
在这里插入图片描述
保存退出

修改设备树

根目录下写入下面的设备树代码

     i2c_gpio_liaoPJ {
        
		compatible = "i2c-gpio";
		gpios = <&gpio4 20 0 /*sda*/
		         &gpio4 21 0 /*scl*/>;
				 
		i2c-gpio,delay-us = <5>; /*100k HZ*/
        #address-cells = <1>;
		#size-cells = <0>;

    };

可以根据你自己的板子,修改gpios里的引脚 ,以及delay-us里的频率,这里5指的是5us,由于驱动程序发送一个数据需要耗费5*2us 所以这里是100kHZ。

上机实验

1.编译设备树 make dtbs
2.编译模块 make modules
3.拷贝设备树及编译的.KO文件到单板上,ko文件在在这里插入图片描述

4.替换设备树,重启 reboot
5.安装驱动 insmod i2c-gpio.ko

可以看到多出了一条i2c总线
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐