pic32 和 MPL3115A2 Altitude/Pressure 传感器之间的 I2C 通信
I2C communication between pic32 and MPL3115A2 Altitude/Pressure Sensor
我正在尝试做一些非常简单的事情,但我在让它工作时遇到了一些麻烦。我正在使用 MPL3115A2 Altitude/Pressure 传感器和 pic32 uC32 板,我正在尝试使用 I2C 在两者之间进行通信。 (uC32板与arduino非常相似,在编码方面几乎相同)。
我正在使用 wire 库,我只是想从 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。
感谢您对此的任何帮助!
我正在尝试做一些非常简单的事情,但我在让它工作时遇到了一些麻烦。我正在使用 MPL3115A2 Altitude/Pressure 传感器和 pic32 uC32 板,我正在尝试使用 I2C 在两者之间进行通信。 (uC32板与arduino非常相似,在编码方面几乎相同)。
我正在使用 wire 库,我只是想从 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。
感谢您对此的任何帮助!