相关文章推荐
眉毛粗的匕首  ·  在Openlayer ...·  1 周前    · 
忐忑的烤地瓜  ·  异常 ...·  1 年前    · 
干练的水桶  ·  sql server in 参数化 ...·  1 年前    · 

关于树莓派4B两个i2c通道的理解(SDA.0以及SCL.0或者SDA.1以及SCL.1无法使用问题)

树莓派学习笔记:(2020.12 Update)

关于树莓派4B两个i2c通道的使用和理解(SDA.0以及SCL.0或者SDA.1以及SCL.1如何使用问题)


已解决,提供一下过程和思路

0

在做项目的时候需要用到AD/DA转换,选用了PCF8591转换芯片,但是在实际使用中,发现打开了 i2c 后只有 i2c_1 ,而树莓派其实是有两个 i2c 通道的,寻思着怎么把 i2c_0 用上,但是无奈相关文章实在找不到,最后在树莓派官网论坛找到一个一样问题的,但是问题提出者用的是 Pi2 ,年代久远,配置也有些不一样,最后也没解决。连接如下:

(下图为上面链接主要内容,需要翻译请用链接进行Google翻译)

1 但是

问题提出者给了一个关于 device-tree 的官方解释文档,然后我就去啃文档,文档链接如下:


最后找到3.3有对i2c的解释,大致意思就是i2c两个通道一个是i2c_1是为了控制ARM的,i2c0是为了控制ViedoCore(即"GPU")的(我的理解是,i2c1是为了控制大部分i2c设备的,i2c0是为了控制摄像头或者显示屏等外设用的)

下面还给出了四个在系统里定义好的parameter(常量)

i2c/i2c_arm

i2c_vc

i2c_baudrate/i2c_arm_baudrate

i2c_vc_baudrate

分别是i2c0、i2c1、i2c0_baudrate、and i2c1_baudrate的aliases(别名)。


通过别人经验或者说查其他人的资料可知:当我们在 raspi-config 里面把 i2c 打开的时候,其实是在 /boot/config.txt里面把 dtparam=i2c_arm=on 的注释去掉,如图

下方文档应该是 i2c_0 的定义,但是实际上在我的 Pi4 却是 i2c_1 ,对应的,i2c_vc 应该就代表另一个 i2c 通道的,于是加了 dtparam=i2c_vc=on ,如图

重启,然后用再次查看 i2c 发现两个i2c 都可以使用了

2020/12/17更新:

根据别人给的经验,如果要使用i2c0,需要在设置中把camera功能关闭,即disable。关闭后i2c0就可以检测到设备了

编辑于 2021-04-01 17:19