首页 > 解决方案 > 如何使用 MCC 将 I2C 与 XC16 结合使用 - Microchip

问题描述

这是我第一次尝试在我的设计中使用 I2C,所以请耐心等待。我使用 MCC 来设置 I2C,我有 I2C.c 和 I2C.h。我正在尝试读取压力传感器值。该值为 15 位长。我是否需要在读取之前写入从属设备,或者我可以直接读取该值吗?我把我的部分代码放在下面。你可以看到我只是想读取一个压力值。谁能指出我如何实现这一目标的正确方向?多谢你们。

注意:将 PIC24FJ128GB204 与 xc16 编译器一起使用

I2C1_MESSAGE_STATUS status;

uint8_t PressureCommand = 1; //1 indicates a read
uint16_t address = 0xE0; 
uint16_t PressureData;
uint8_t length = 2; //2 bytes of data


//Request to read 2 bytes of data
I2C1_MasterRead(&PressureData, length, address, &status);
while(I2C1_MESSAGE_PENDING == status)

标签: csensorsi2cmicrochip

解决方案


是的,您确实需要先“写入”从机,然后才能读取某些内容。通常的程序如下所示:

  1. 设置 START 条件(SCL 为高时 SDA 的高到低转换)
  2. 发送I2C设备地址(7位地址+bit0=0写入)
  3. 从机发送:ACK
  4. 发送您要读取的 I2C 寄存器地址(8 位)(在您的情况下是压力数据)
  5. 从机发送:ACK
  6. 重复启动(SCL 为高时 SDA 的高到低转换)
  7. 发送I2C设备地址(7位地址+bit0=1读取)
  8. 从机发送:ACK
  9. 从机发送:压力数据的 MSB
  10. 主机发送:ACK
  11. 从机发送:压力数据的 LSB
  12. 主机发送:NACK
  13. 发送 STOP(SCL 为高时 SDA 从低到高的转换)

在您的情况下,压力数据是一个两字节值。但是,在第 4 步中,您只需要请求第一个字节,但仍需要接收两个字节。

编辑:您可能还想查看此论坛主题


推荐阅读