乐鑫技术交流
直播中

池鹄展

8年用户 1009经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

ESP32C3 I2C发送数据错误是什么原因导致的?



  • void app_main(void)
  • {
  •     I2C_Init();
  •     i2c_cmd_handle_t cmd = i2c_cmd_link_create();
  •     i2c_master_start(cmd);
  •     // i2c_master_start(cmd);
  •     i2c_master_write_byte(cmd, ((0x06) << 1) | WRITE_BIT, ACK_CHECK_EN);
  •     i2c_master_write_byte(cmd, 0x09, ACK_CHECK_EN);
  •     i2c_master_write_byte(cmd, 0xB3, ACK_CHECK_DIS);
  •     i2c_master_write_byte(cmd, 0x0A, ACK_CHECK_DIS);
  •     i2c_master_write_byte(cmd, 0x05, ACK_CHECK_DIS);
  •     i2c_master_write_byte(cmd, 0x3c, ACK_CHECK_DIS);
  •     i2c_master_write_byte(cmd, 0x08, ACK_CHECK_DIS);

  •     i2c_master_stop(cmd);
  •     esp_err_t ret = i2c_master_cmd_begin(i2c_master_port, cmd, 1000 / porttiCK_RATE_MS);
  •     i2c_cmd_link_delete(cmd);
  •     if (ret == ESP_OK)
  •     {
  •         ESP_LOGI(TAG, "Write OK");
  •     }
  •     else if (ret == ESP_ERR_TIMEOUT)
  •     {
  •         ESP_LOGW(TAG, "Bus is busy");
  •     }
  •     else
  •     {
  •         ESP_LOGW(TAG, "Write Failed");
  •     }
  •     // vTaskDelay(1000 / portTICK_PERIOD_MS);
  •     // I2C_Write(i2c_master_port,0x06,0x09,0xB3);
  •     // vTaskDelay(50 / portTICK_PERIOD_MS);
  •     // I2C_Write(i2c_master_port,0x06,0x09,0xB3);

  •     // printf("keyn");

  •     // I2C_Write(i2c_master_port,0x06,0x0A,0x05);
  •     // printf("programen");
  •     // // I2C_Write(i2c_master_port,6,0x3C,0x07);
  •     // //
  • }



  • 我使用ESP-IDF4.4 开发SP32C3的I2C,代码如上,我发现逻辑分析仪读出的数据和程序不符,想知道是为什么


  • 我尝试使用官方的I2C程序后调试发现是自己的传感器寄存器操作的有问题
                             
这个是逻辑分析仪读出的,地址和数据都和程序不一样                     

回帖(1)

刘勇

2024-6-18 16:31:47
ESP32C3 I2C发送数据错误可能有多种原因。以下是一些可能的原因及其解决方案:

1. **初始化问题**:确保I2C初始化正确。检查`I2C_Init()`函数是否正确配置了I2C接口,包括时钟频率、数据速率等。

2. **地址错误**:确保你使用的I2C设备地址是正确的。在代码中,你使用了`0x06`作为设备地址,确保这是你的目标设备的地址。

3. **写入命令错误**:在写入命令时,需要确保命令是正确的。在你的代码中,你使用了`0x09`作为命令,确保这是正确的命令。

4. **数据错误**:确保发送的数据是正确的。在你的代码中,你使用了`0xB3`作为数据,确保这是正确的数据。

5. **ACK位设置错误**:在I2C通信中,ACK(确认)位用于确认数据接收。在你的代码中,你使用了`ACK_CHECK_EN`和`ACK_CHECK_DIS`来启用和禁用ACK检查。确保这些设置与你的I2C设备兼容。

6. **I2C总线冲突**:如果I2C总线上有其他设备,可能会发生冲突。确保I2C总线上没有其他设备干扰通信。

7. **硬件问题**:检查硬件连接是否正确,包括I2C数据线、电源线等。

8. **软件问题**:检查ESP32C3的固件和库文件是否是最新的,以确保I2C驱动程序是最新的。

9. **错误处理**:在你的代码中,没有错误处理机制。添加错误处理可以帮助你更好地诊断问题。例如,你可以在`i2c_master_write_byte`之后添加错误检查,如果返回值不是ESP_OK,则打印错误信息。

10. **调试**:使用逻辑分析仪或串行调试输出来监控I2C通信,这可以帮助你确定问题所在。

请根据这些可能的原因检查你的代码和硬件设置,以便找到并解决问题。
举报

更多回帖

×
20
完善资料,
赚取积分