【Linux GpioI2C】

Linux GpioI2C

记录一次linux kernel gpio i2c的使用

背景

linux kernel支持i2cmaster 和 i2cdev, 一般是使能i2cdev进行使用。
有些情况下,系统IO不足,或者硬件设计时没有预留到支持i2c的IO上,此时不能直接使用CPU i2c的硬件控制器了。
出现这种情况,一般需要通过IO来模拟I2C信号来进行使用。当然,可以自己从头开始进行模拟,用户自己进行维护,这里不在说明。linux内核也支持通过IO来模拟i2c,实现一个i2cmaster和i2cdev,这里记录下配置过程

配置

  1. .config配置
    kernle 中 make menuconfig,需要开启i2c gpio 支持
    在这里插入图片描述
    在这里插入图片描述

  2. dts配置
    在这里插入图片描述

配置需要的即可。注意的是,需要在根节点下面添加,各个字段要正确
详细字段可以参考内核Documentation/devicetree/bindings/i2c/下面的文档和linux/drive/i2c/ 下相应驱动文件的探测部分,不同内核版本会有不同
这里的kernel版本是 5.10.161
Documentation\devicetree\bindings\i2c\i2c-gpio.yaml :
在这里插入图片描述

drivers\i2c\busses\i2c-gpio.c :
在这里插入图片描述

结果

如果上述操作都顺利的话,将会在/dev/下出现新的i2c设备
old:
在这里插入图片描述

new:
在这里插入图片描述

可以看到出现了新的i2c设备,之后可以在应用层通过ioctl对该设备进行操作

关于这里为什么是i2c-0的问题,这里不再深究,和i2c总线探测注册相关,虽然dts上写的是i2c2,但其余的i2c都是关闭的,没有继续使用,总线注册时会认为这是第一个,这点详细的问题后续再进行探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值