我尝试做一些非常简单的事情,并且我在使用它时遇到了一些麻烦。我正在使用MPL3115A2高度/压力传感器和pic32 uC32板,我尝试使用I2C在两者之间进行通信。 (uC32板类似于arduino,它在编码方面几乎相同)。
我正在使用有线库而我只是试图从MPL3115A2读取寄存器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。
过去几天,我一直在撞墙,试图让它发挥作用。我附上了一些我用逻辑分析仪捕获的东西,以及我试图访问的MPL3115A2数据表中的寄存器列表。
使用逻辑分析仪,我可以看到时钟和数据线。时钟似乎正常,数据线给出了以下内容:
START
Write['192'] + ACK
'12' + ACK
STOP
START
Read['193'] + ACK
'0' + NAK
STOP
这对我来说似乎都是正确的(192和193来自8位写入和读取为0xC0和0xC1),除了' 0'。我应该获取设备ID,而不是0。
感谢您对此提供任何帮助!