打印
[牛人杂谈]

新唐51内核单片机的I2C是如何处理超时的

[复制链接]
903|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 huahuagg 于 2024-1-17 15:57 编辑

I2C简介:
I2C(Inter-Integrated Circuit)是一种串行通信协议,广泛应用于单片机和各种集成电路之间的通信。它是一种主从式的通信协议,支持多个设备在同一总线上通信。
I2C超时处理机制:
  • 超时计数器:
    • 这一系列芯片带有一组14位的超时计数器,用于监控I2C总线的通信时间。这个计数器是一个自动递增的寄存器,从零开始计数,直至溢出。
  • 使能超时定时器:
    • 在需要使用超时机制时,可以使能超时定时器。一旦超时定时器被使能,计数器开始自动计数。
  • 中断触发条件:
    • 如果开启了中断功能,当超时计数器溢出时,硬件会设置I2TOF(I2C Time-Out Flag)位,触发中断。
  • 计数器复位:
    • 为了重新开始计时,可以通过软件操作或硬件触发,清零计数器,从而重新开始计数。
  • I2C总线故障检测:
    • 如果I2C总线出现故障,超时计数器可能长时间不能被清零。当I2TOF位长时间保持1时,超时计数器将继续递增,直至溢出。
  • 中断处理:
    • 一旦I2TOF位被置1,表明发生了I2C通信超时,系统可以进入中断服务程序进行相应的处理,例如重新初始化I2C硬件或执行其他纠正措施。

使用特权

评论回复
沙发
huahuagg|  楼主 | 2024-1-17 15:52 | 只看该作者
此系列芯片带一组14位超时计数器,用于防止I2C总线故障。一旦使能了超时定时器,计数器开始计数直至溢出,即如果开启中断,I2TOF位会被硬件置1。当使能计数器,SI置1复位计数器, SI清0后重新开始计数。若I2C总线出现故障,SI 位长时间不能清0,14位的超时定时器就会溢出,并进入中断。

使用特权

评论回复
板凳
huahuagg|  楼主 | 2024-1-17 15:58 | 只看该作者

使用特权

评论回复
地板
埃娃| | 2024-1-29 11:00 | 只看该作者
定时器计数到一定值就超时了

使用特权

评论回复
5
jcky001| | 2024-1-29 16:57 | 只看该作者
新唐51内核单片机的I2C模块处理超时主要依赖于软件实现

使用特权

评论回复
6
电子乐园游园ing| | 2024-1-29 16:59 | 只看该作者
使用定时器判断超时的情况

使用特权

评论回复
7
mikewalpole| | 2024-2-3 17:05 | 只看该作者
I2C的超时处理是通过设置I2C控制器的相关寄存器来实现的。

使用特权

评论回复
8
mollylawrence| | 2024-2-4 20:58 | 只看该作者
在ISR中,可以设置一个标志位来跟踪I2C通信的状态。如果检测到超时情况,ISR可以清除该标志位,并执行必要的恢复操作,比如重置I2C接口或重新尝试通信。

使用特权

评论回复
9
wengh2016| | 2024-2-4 22:56 | 只看该作者
超时处理通常是通过软件来实现的。

使用特权

评论回复
10
louliana| | 2024-2-5 12:55 | 只看该作者
程序可以继续进行I2C通信,或者选择结束通信并关闭I2C控制器。

使用特权

评论回复
11
dspmana| | 2024-2-5 13:33 | 只看该作者
很多单片机都会提供硬件计时器来支持I2C的超时处理。

使用特权

评论回复
12
gaoyang9992006| | 2024-2-5 13:43 | 只看该作者
使用库函数的话,提供了超时处理的功能。

使用特权

评论回复
13
51xlf| | 2024-2-5 15:05 | 只看该作者
在等待I2C事件的同时,定时器持续递减计数,一旦达到0,则表示超时。

使用特权

评论回复
14
macpherson| | 2024-2-6 09:56 | 只看该作者
在I2C总线通信中,超时通常指的是在指定时间内设备未能完成数据的发送或接收。

使用特权

评论回复
15
iyoum| | 2024-2-6 12:55 | 只看该作者
比如I2C总线上的数据传输速度较慢,或者master设备在发送数据时出现故障。为了处理这些情况,单片机会包含一定的超时检测机制。

使用特权

评论回复
16
ulystronglll| | 2024-2-6 13:22 | 只看该作者
在开始I2C操作前,设置一个定时器或循环计数器,设定其初始值对应期望的最大等待时间。

使用特权

评论回复
17
youtome| | 2024-2-6 14:49 | 只看该作者
通过软件模拟I2C从机模式,并设置一个超时计数器来监控I2C通信过程

使用特权

评论回复
18
ulystronglll| | 2024-2-6 17:23 | 只看该作者
如果遇到I2C通信超时,首先应检查I2C总线的电气特性,比如上拉电阻是否适当,时钟频率是否设置得过高或过低,以及总线是否受到干扰。排除了这些硬件问题后,如果超时情况仍然存在,可以通过软件层面的策略来处理,比如在主循环中设置一个超时计时器,并在每次I2C通信前启动该计时器。如果在规定时间内没有收到从设备的响应,则可以认为通信超时,并执行预定的超时处理程序,比如重新初始化I2C接口或切换到另一种通信方式。

使用特权

评论回复
19
loutin| | 2024-2-6 20:57 | 只看该作者
I2C协议本身就定义了超时机制。

使用特权

评论回复
20
usysm| | 2024-2-6 21:27 | 只看该作者
在进行I2C通信时,可以通过设置这些寄存器来处理超时。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

118

主题

1187

帖子

1

粉丝