zynq i2c读取高频读数系统异常
  lGvz3zkAZAoH 2023年11月24日 16 0

背景:zynq7020 按照1KHz i2c 读取iam20680的数据。

异常结果:

cdns-i2c e0004000.i2c: timeout waiting on completion

Unable to handle kernel paging request at virtual address 6e1247a0

pgd = c7cb0000[6e1247a0] *pgd=00000000

Internal error: Oops - BUG: 80000005 [#1] PREEMPT SMP ARM

Modules linked in: dma_proxy(O)


解决方案:

1 . 将i2c重复读取次数及超时时间加大

ret=ioctl(fd_i2c0, I2C_TIMEOUT, 5); // 设置超时

ioctl(fd_i2c0, I2C_RETRIES, 5); // 设置重试次数

2 . 此时还是会出现崩溃的现象,则需要查看硬件电路,IIC总线上的上拉电阻是否合适,如果时钟低于10KHz,则总线上的上拉电阻最大为10K;如果低于400KHz的,则上拉电阻为4.7KHz , 400KHz以上的为2.2K; 该值只是建议值,有具体的计算公式。总线的上拉电阻与信号线(SCL,SDA)的寄生电容,组成了RC电路,对于高频的时钟数据变化,如果RC 值过大造成高电平识别异常,导致无法正确识别高电平,故超时。


将上拉电阻更换为2K后,再次运行系统,则正常了。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月24日 0

暂无评论

推荐阅读