我有一个 RaspberryPi3 连接到 Adafruit MPL3115A2通过 I2C 总线。我有最新版本的Raspbian Jessie今天下载了。我唯一做的就是运行
sudo rasp-config
启用 i2c 总线,然后重新启动并使用 i2ctools 安装
sudo apt-get install -y i2c-tools
当我运行时
i2cDetect -y 1
我在地址 0x60 上看到了我期望的设备。
0 1 2 3 4 5 6 7 8 9 abcdef
00: -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60:60 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
但是,当我尝试使用
读取 WHO_AM_I 寄存器时i2cget -y 1 0x60 0x0C b
或
i2cget -y 1 0x60 0x0C c
当我期待 0xC4 时,我得到 0x00。使用 ``sudo`` 运行上面的内容没有什么区别。
如果我关闭 Raspbian,请拔出 SD 卡,插入包含 Windows IoT Core 的 SD 卡并启动。我按照预期从 WHO_AM_I 寄存器读取 0xC4 没有问题。因此,我有理由确定这不是坏硬件。
我在网络上搜索寻求帮助(相信我,我不会再发布任何链接来证明这一点)。我尝试了对/boot/config.sys 的一些建议编辑,包括禁用设备树并使用 Saleae Logic 设置波特率以匹配我们从 Windows IoT Core 中看到的波特率(400kHz,Raspbian 似乎有大约 64kHz 的默认值)分析器(无法给您链接,请通过谷歌搜索)。我们可以看到的唯一区别是,Raspbian 似乎具有逻辑分析仪可以检测到的从写入到读取的离散变化,而我们在 IoT Core 上没有看到这种变化。我们陷入困境,任何帮助或想法都会很棒。
编辑:我会为 raspbian-jessie 添加一个标签,但可惜我的信誉不够
刚刚在 RaspberryPi2 上使用相同版本的 jessie(新 SD 卡上的新 img)进行验证,失败是相同的,因此看来 Raspbian Jessie 就是这里确凿的证据。
最佳答案
我们发现了隐藏在 post 中的答案。关于将传感器与 python 一起使用。事实证明,MPL3115A2 需要重复启动事务,而 Raspbian 上默认禁用该事务。解决方案是将以下行添加到 /etc/rc.local
文件末尾 exit 0
echo -n 1 >/sys/module/i2c_bcm2708/parameters/combined
关于raspbian - I2C 在 Raspbian 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36903419/