pic32和mpl315a2高度/压力传感器之间的I2C通信



我想做一些非常简单的事情,我有一点麻烦让它工作。我正在使用mpl315a2高度/压力传感器和pic32 uC32板,我试图使用I2C在两者之间进行通信。(uC32板与arduino非常相似,在编码方面几乎相同)。

我正在使用电线库,我只是试图从mpl315a2读取寄存器0x0C,这应该给我设备ID。

下面是一个代码片段(定义在代码的顶部,其余部分在主循环中):
#define barAddress 0x60
Wire.beginTransmission(barAddress);
Wire.send(0x0C);
Wire.endTransmission();
Wire.requestFrom(barAddress, 1);
uint8_t a = Wire.receive();
Serial.println(a, HEX);

所以我用地址0x60开始传输(从数据表:标准的7位I2C从地址是0x60或1100000。8位读为0xC1, 8位写为0xC0)。然后我发送0x0C,因为那是我想要访问的寄存器。然后我结束传输,并从地址0x60请求1字节,将该位接收为8位变量,然后打印它。

我遇到的问题是,当我打印它时,我得到的只是0。我没有得到设备ID,只有0。无论我读取哪个寄存器,我得到的都是0。

在过去的几天里,我一直在绞尽脑汁想让这个工作起来。我附加了一些我用逻辑分析仪捕获的东西,以及我一直试图访问的mpl315a2数据表中的寄存器列表。

使用逻辑分析仪我可以看到时钟和数据线。时钟似乎正常,数据线显示如下:

START
Write['192'] + ACK
'12' + ACK
STOP
START
Read['193'] + ACK
'0' + NAK
STOP

这对我来说似乎都是正确的(192和193来自8位写入和读取0xC0和0xC1),除了'0'。我应该得到设备ID,而不是0。

谢谢你的帮助!

您应该查看飞思卡尔的应用程序说明AN4481,数据表中引用了该说明。第5页显示了你正在做的单字节读操作,除了寄存器地址写必须而不是后面跟着STOP,而是使用repeat - start。

我不熟悉Wire库,但看起来你需要做的就是删除sendrequestFrom之间的Wire.endTransmission();

相关内容

  • 没有找到相关文章

最新更新