硬件I2C速度达不到400kHz
用的AT32F421单片机的硬件I2C,照着官方例子写的,一主一从,中断触发通信。主机以200Hz频率向从机发送读请求以及写数据。官方例子的速度是100kHz,我自己设置速度最大到约265kHz都可以稳定运行(测试超过8小时不出问题),超过280kHz就会在通信一段时间后卡死,400kHz情况通信个几秒就会卡死。
SDA和SCL都是2kohm的上拉电阻
有大佬遇到过类似的问题吗? 400k换成1k上拉试试。卡住时检查硬件状态。 示波器看过波形吗…… 300k我都用4.7k,沿500ns i2c 400khz采用中断模式是极容易出事的,因为中断太快太频繁会导致不可预料的事情发生,如果开了nack和stop中断更容易出事,因为中断时间相隔只有一bit,2.5us,所以,要稳定使用高速i2c,只能用dma 进一步测试发现,最大速度跟快速模式占空比有关(第一次听说这个...),设置I2C_FSMODE_DUTY_2_1时最大速度可达266kHz(267kHz就会卡死),正好是400kHz的2/3。I2C_FSMODE_DUTY_16_9时最大速度可达256kHz,正好是400kHz的16/25。 用dma 试试 rei1984 发表于 2024-5-5 20:39
用dma 试试
(引用自7楼)
DMA的程序跑不通,I2C总线一直处于BUSY,调了2天都没搞定,放弃了{:3_50:} 400K要用1K或2.2K上拉电阻了,再示波器看一下波形
页:
[1]