树莓派-用GPIO虚拟I2C

前言:

非常不幸,树莓派没用多久,I2C接口无法detect。

抱着试一试的心理,到群里问了问,结果被人喷曰:“现在钱多人傻的人真多,什么都不懂,还玩树莓派”。

我心想,难道树莓派真的很“高大上”?

事情是这样:

前些天树莓派接到6wd机器人扩展板上玩了几天,接着上摄像头,摄像头工作。

但是没多久,可能是供电不足的缘故,树莓派WiFi突然不通,重启几次板子仍然没有解决。

后知后觉的我将树莓派插入电脑USB3.0口,WiFi恢复。

第二天试I2C,却I2C无法detect,犹如晴天霹雳,令人措不及防,修改参数,重装系统...

因为自己不是做硬件的,没设备进行调试,I2C坏掉的原因一直没有查出。

在这里,如果有幸遇上有缘人,能帮忙指导指导,还不吝赐教,万分感激!!!

树莓派-用GPIO虚拟I2C

(请勿见怪,不知什么原因,截的图无法上传,直接用了商家的图,如有不妥之处,请@)

废话少说,奉上解决办法:

因为也是刚刚拿到板子,对树莓派的了解知之甚少,摸索了大约两天。

后来找到Device Trees,发现里面的dtoverlay非常强大。

曙光出现在Changing i2c sda1 scl1 pin这篇文章,文章告诉我树莓派可以通过设置dtoverlay虚拟多个I2C接口。

抱着死马当作活马医的态度,按照文章,我修改dtoverlay,将其设置为i2c-gpio,bus=3,i2c_gpio_delay_us=2,i2c_gpio_sda=5,i2c_gpio_scl=6。

运行i2cdetect -l,出现了i2c-3设备:

:/home/pi# i2cdetect -l
i2c-3   i2c                                                I2C adapter
i2c-1   i2c             bcm2835 I2C adapter                     I2C adapter

运行i2cdetect -y 3,找到6wd:

:/home/pi# i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- 41 -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --

再修改6wd控制脚本的I2C bus,并运行,完美解决!

修改后的/boot/config.txt如下:

# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
dtparam=spi=on
dtoverlay=i2c-gpio,bus=3,i2c_gpio_delay_us=2,i2c_gpio_sda=5,i2c_gpio_scl=6

备注:

其中i2c_gpio_sda=5和i2c_gpio_scl=6分别指pin 29和pin 31。

相关推荐