我正在尝试做一些非常简单的事情,但我在让它工作时遇到了一些麻烦。我正在使用 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。
感谢您对此的任何帮助!