将项目从esp-idf4.4.2迁移到esp-idf5.0时,iic-master设置频率400K实际输出频率5K

zc20220725
Posts: 3
Joined: Mon Jul 25, 2022 3:04 am

将项目从esp-idf4.4.2迁移到esp-idf5.0时,iic-master设置频率400K实际输出频率5K

Postby zc20220725 » Wed Nov 15, 2023 9:50 am

最近将以前的项目从esp-idf 4.4.2迁移到了esp-idf 5.0,通过逻辑分析仪采集iic的scl引脚,发现时钟频率变成了5K了。当再烧录esp-idf 4.4.2的固件,测试slc频率是400K,请问这是怎么回事呢?

zc20220725
Posts: 3
Joined: Mon Jul 25, 2022 3:04 am

Re: 将项目从esp-idf4.4.2迁移到esp-idf5.0时,iic-master设置频率400K实际输出频率5K

Postby zc20220725 » Thu Nov 16, 2023 3:43 am

找到原因了,当访问的iic外设不存在时,iic速率变得很低,当访问的iic外设存在时,iic速度正常了。

zc20220725
Posts: 3
Joined: Mon Jul 25, 2022 3:04 am

Re: 将项目从esp-idf4.4.2迁移到esp-idf5.0时,iic-master设置频率400K实际输出频率5K

Postby zc20220725 » Thu Nov 16, 2023 9:00 am

我进一步测试,发现了一些问题:
我做了一个iic器件扫描的程序,充器件地址1开始扫描,移植扫描到127,代码如下:

void bsp_iic_find_slave(uint8_t nIndex)
{
uint8_t address;
printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f\r\n");

for (int i = 0; i < 128; i += 16) {
printf("%02x: ", i);
for (int j = 0; j < 16; j++) {
if (j == 0 && i == 0) {
printf("-- ");
continue;
}

address = i + j;
i2c_cmd_handle_t cmd = i2c_cmd_link_create();
i2c_master_start(cmd);
i2c_master_write_byte(cmd, (address << 1) | I2C_MASTER_WRITE, true);
i2c_master_stop(cmd);
esp_err_t ret = i2c_master_cmd_begin((i2c_port_t)nIndex, cmd, 1000 / portTICK_PERIOD_MS);
i2c_cmd_link_delete(cmd);
if (ret == ESP_OK) {
printf("%02x ", address);
} else if (ret == ESP_ERR_TIMEOUT) {
printf("UU ");
} else {
printf("-- ");
}
}
printf("\r\n");
}
}


测试发现,在扫描到器件地址为7的时候,IIC都是400k的频率,在地址为8的时候,就变成了5K,并且是不可逆的,一直以5K的频率运行,

希望乐鑫方面能提供一些帮助。

Who is online

Users browsing this forum: No registered users and 136 guests