搜索
bottom↓
回复: 8
打印 上一主题 下一主题

硬件I2C速度达不到400kHz

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2024-4-29 20:40:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的AT32F421单片机的硬件I2C,照着官方例子写的,一主一从,中断触发通信。主机以200Hz频率向从机发送读请求以及写数据。

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

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

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入442汤圆

2
发表于 2024-4-29 22:36:32 | 只看该作者
400k换成1k上拉试试。卡住时检查硬件状态。

出0入475汤圆

3
发表于 2024-4-29 22:47:25 来自手机 | 只看该作者
示波器看过波形吗……

出0入18汤圆

4
发表于 2024-4-29 23:00:57 来自手机 | 只看该作者
300k我都用4.7k,沿500ns

出0入8汤圆

5
发表于 2024-4-29 23:25:35 来自手机 | 只看该作者
i2c 400khz采用中断模式是极容易出事的,因为中断太快太频繁会导致不可预料的事情发生,如果开了nack和stop中断更容易出事,因为中断时间相隔只有一bit,2.5us,所以,要稳定使用高速i2c,只能用dma

出0入0汤圆

6
 楼主| 发表于 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。

出0入25汤圆

7
发表于 2024-5-5 20:39:47 | 只看该作者
用dma 试试

出0入0汤圆

8
 楼主| 发表于 2024-5-5 20:46:40 | 只看该作者

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

出0入76汤圆

9
发表于 2024-5-6 21:42:23 来自手机 | 只看该作者
400K要用1K或2.2K上拉电阻了,再示波器看一下波形

回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 06:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表