NFYG2022 发表于 2024-4-29 20:40:27

硬件I2C速度达不到400kHz

用的AT32F421单片机的硬件I2C,照着官方例子写的,一主一从,中断触发通信。主机以200Hz频率向从机发送读请求以及写数据。

官方例子的速度是100kHz,我自己设置速度最大到约265kHz都可以稳定运行(测试超过8小时不出问题),超过280kHz就会在通信一段时间后卡死,400kHz情况通信个几秒就会卡死。

SDA和SCL都是2kohm的上拉电阻

有大佬遇到过类似的问题吗?

wye11083 发表于 2024-4-29 22:36:32

400k换成1k上拉试试。卡住时检查硬件状态。

1a2b3c 发表于 2024-4-29 22:47:25

示波器看过波形吗……

tang_qianfeng 发表于 2024-4-29 23:00:57

300k我都用4.7k,沿500ns

smallwood 发表于 2024-4-29 23:25:35

i2c 400khz采用中断模式是极容易出事的,因为中断太快太频繁会导致不可预料的事情发生,如果开了nack和stop中断更容易出事,因为中断时间相隔只有一bit,2.5us,所以,要稳定使用高速i2c,只能用dma

NFYG2022 发表于 2024-5-5 20:37:46

进一步测试发现,最大速度跟快速模式占空比有关(第一次听说这个...),设置I2C_FSMODE_DUTY_2_1时最大速度可达266kHz(267kHz就会卡死),正好是400kHz的2/3。I2C_FSMODE_DUTY_16_9时最大速度可达256kHz,正好是400kHz的16/25。

rei1984 发表于 2024-5-5 20:39:47

用dma 试试

NFYG2022 发表于 2024-5-5 20:46:40

rei1984 发表于 2024-5-5 20:39
用dma 试试
(引用自7楼)

DMA的程序跑不通,I2C总线一直处于BUSY,调了2天都没搞定,放弃了{:3_50:}

foxpro2005 发表于 2024-5-6 21:42:23

400K要用1K或2.2K上拉电阻了,再示波器看一下波形

页: [1]
查看完整版本: 硬件I2C速度达不到400kHz