树莓派-用GPIO虚拟I2C
前言:
非常不幸,树莓派没用多久,I2C接口无法detect。
抱着试一试的心理,到群里问了问,结果被人喷曰:“现在钱多人傻的人真多,什么都不懂,还玩树莓派”。
我心想,难道树莓派真的很“高大上”?
事情是这样:
前些天树莓派接到6wd机器人扩展板上玩了几天,接着上摄像头,摄像头工作。
但是没多久,可能是供电不足的缘故,树莓派WiFi突然不通,重启几次板子仍然没有解决。
后知后觉的我将树莓派插入电脑USB3.0口,WiFi恢复。
第二天试I2C,却I2C无法detect,犹如晴天霹雳,令人措不及防,修改参数,重装系统...
因为自己不是做硬件的,没设备进行调试,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。