尽管 i2cDetect 确实检测到目标,但我的 Raspberry Pi 4 Model B 上的 I2C 总线无法正常工作。
我尝试使用 Raspberry Pi Sense HAT 和 SSD1306 OLED 显示屏以及带有 I2C 总线的 PCA9685 伺服驱动器。一切正常。我不知道为什么现在 I2C 总线不工作。然后我不确定其中一台设备是否有缺陷。 OLED 显示屏有时会显示“雪花”。因此可能存在信号损坏。
然后我在没有 Sense HAT 的情况下测试了 Raspberry Pi。也许 Sense HAT 可能存在缺陷。没有任何帮助。然后我拔掉了OLED显示屏,但没有成功。之后将 PCA9685 插入 OLED 显示屏。现在 OLED 显示屏显示了正确的结果。我用伺服检查器测试了连接到 PCA9685 的三个伺服系统,幸运的是我发现它们没有缺陷。所以我再次连接了 PCA9685,但我无法向我的伺服系统发送 PWM 信号。之后,我移除了插入 PCA9685 和 OLED 显示屏的 I2C 集线器,以再次测试 Raspberry Pi Sense HAT。这不起作用。之后,我在较旧的 Raspberry Pi 3 Model B+ 上尝试了 Sense HAT,并且可以正确使用它。
所以我的想法是 Raspberry Pi 的 I2C 总线配置有问题。然后我进入 raspi-config 并停用 I2C 接口选项,重新启动 Pi 并再次启用此选项。没有任何帮助。
我无法使用 PCA9685 和伺服系统,也无法使用 Raspberry Pi Sense HAT,也无法使用 OLED 显示屏。使用 i2cDetect 我可以检测地址。
这就是我得到的:
python imu.py
Traceback (most recent call last):
File "imu.py", line 3, in <module>
sense = SenseHat()
File "/usr/lib/python3/dist-packages/sense_hat/sense_hat.py", line 39, in __init__
raise OSError('Cannot detect %s device' % self.SENSE_HAT_FB_NAME)
OSError: Cannot detect RPi-Sense FB device
它可以是 Sense HAT 的任何 python 测试程序。两天前。一切正常...我可以毫无错误地运行伺服系统程序,但现在伺服系统不执行任何操作。所以他们得不到 PWM 信号。现在我测试了OLED显示程序,它可以工作。但文本不是静态显示而是闪烁。也许这是因为 I2C 总线无法正常工作。
sudo i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- 1c -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- 5c -- -- 5f
60: -- -- -- -- -- -- -- -- -- -- 6a -- -- -- -- --
70: 70 -- -- -- -- -- -- --
1c、3c、5c、5f 和 6a 应该是 Sense HAT...40 OLED 显示屏,70 PCA9685。
dmesg | grep i2c
[ 2.434699] i2c /dev entries driver
cat /etc/modules
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
i2c-dev
i2c-bcm2708
spi-bcm2835
spi-bcm2708
snd-bcm2835
cat /etc/modprobe.d/raspi-blacklist.conf 为空
sudo i2cdetect -y 0
Error: Could not open file `/dev/i2c-0' or `/dev/i2c/0': No such file or directory
在 /boot/config.txt 中,两行均已启用:
dtparam=i2c1=on
dtparam=i2c_arm=on
我无法说出导致错误的原因以及错误到底是什么。两天前一切正常,但现在不行了。在 PCA9685 上,我测量了引脚上的电压,它们没有缺陷。
此外,在 /boot/config.txt 中启用了 dtoverlay=rpi-sense。
raspi-gpio get
BANK0 (GPIO 0 to 27):
GPIO 0: level=1 fsel=0 func=INPUT pull=UP
GPIO 1: level=1 fsel=0 func=INPUT pull=UP
GPIO 2: level=1 fsel=4 alt=0 func=SDA1 pull=UP
GPIO 3: level=1 fsel=4 alt=0 func=SCL1 pull=UP
GPIO 4: level=0 fsel=0 func=INPUT pull=UP
GPIO 5: level=0 fsel=0 func=INPUT pull=UP
GPIO 6: level=1 fsel=0 func=INPUT pull=UP
GPIO 7: level=1 fsel=1 func=OUTPUT pull=UP
GPIO 8: level=1 fsel=1 func=OUTPUT pull=UP
GPIO 9: level=0 fsel=4 alt=0 func=SPI0_MISO pull=DOWN
GPIO 10: level=0 fsel=4 alt=0 func=SPI0_MOSI pull=DOWN
GPIO 11: level=0 fsel=4 alt=0 func=SPI0_SCLK pull=DOWN
GPIO 12: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 13: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 14: level=1 fsel=2 alt=5 func=TXD1 pull=NONE
GPIO 15: level=1 fsel=2 alt=5 func=RXD1 pull=UP
GPIO 16: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 17: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 18: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 19: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 20: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 21: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 22: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 23: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 24: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 25: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 26: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 27: level=0 fsel=0 func=INPUT pull=DOWN
BANK1 (GPIO 28 to 45):
GPIO 28: level=1 fsel=2 alt=5 func=RGMII_MDIO pull=UP
GPIO 29: level=0 fsel=2 alt=5 func=RGMII_MDC pull=DOWN
GPIO 30: level=0 fsel=7 alt=3 func=CTS0 pull=UP
GPIO 31: level=0 fsel=7 alt=3 func=RTS0 pull=NONE
GPIO 32: level=1 fsel=7 alt=3 func=TXD0 pull=NONE
GPIO 33: level=1 fsel=7 alt=3 func=RXD0 pull=UP
GPIO 34: level=1 fsel=7 alt=3 func=SD1_CLK pull=NONE
GPIO 35: level=1 fsel=7 alt=3 func=SD1_CMD pull=UP
GPIO 36: level=1 fsel=7 alt=3 func=SD1_DAT0 pull=UP
GPIO 37: level=1 fsel=7 alt=3 func=SD1_DAT1 pull=UP
GPIO 38: level=1 fsel=7 alt=3 func=SD1_DAT2 pull=UP
GPIO 39: level=1 fsel=7 alt=3 func=SD1_DAT3 pull=UP
GPIO 40: level=0 fsel=4 alt=0 func=PWM1_0 pull=NONE
GPIO 41: level=0 fsel=4 alt=0 func=PWM1_1 pull=NONE
GPIO 42: level=0 fsel=1 func=OUTPUT pull=UP
GPIO 43: level=1 fsel=0 func=INPUT pull=UP
GPIO 44: level=1 fsel=5 alt=1 func=SDA0 pull=UP
GPIO 45: level=1 fsel=5 alt=1 func=SCL0 pull=UP
BANK2 (GPIO 46 to 53):
GPIO 46: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 47: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 48: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 49: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 50: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 51: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 52: level=0 fsel=0 func=INPUT pull=DOWN
GPIO 53: level=0 fsel=0 func=INPUT pull=DOWN
我不确定在哪里可以搜索错误,因为我的硬件可以在较旧的 Raspberry Pi 上运行。希望有一个人可以帮助我。提前致谢。