当前位置:首页 > 嵌入式 > 嵌入式分享
[导读]I²C边沿慢与多主冲突,需要不同证据和处理方法。嵌入式接口既要证明开漏线路满足电气限制,也要定义仲裁丢失后的事务语义;单纯降频或增加重试,无法同时解决这两个问题。

I²C边沿慢与多主冲突,需要不同证据和处理方法。嵌入式接口既要证明开漏线路满足电气限制,也要定义仲裁丢失后的事务语义;单纯降频或增加重试,无法同时解决这两个问题。

开漏输出只能主动拉低,线路高电平由上拉电阻和总线电容共同形成。电容越大,上升沿越慢;上拉电阻减小可加快上升,但低电平时器件必须吸收更大电流。选值不是越小越好,而是在目标模式的上升时间上限、总线电容和各器件低电平灌电流能力之间求解。连接器、线缆、多个输入引脚和探头都会增加电容,实验室短线上的波形不能代表整机布线。对近似一阶RC线路,按规范常用的百分之三十至百分之七十阈值计算,上升时间约等于零点八四七三乘以电阻和电容的乘积。这一估算需满足被动上拉与集中参数近似,不能直接套用主动上拉或强分布效应线路。

NXP I²C规范为不同速度模式定义了上升时间与总线电容限制。工程上应先估算或实测总线电容,再以所选上拉和电源电压核对最坏上升时间及低电平电流;若两项无法同时满足,就需减少电容、分段总线、使用缓冲器或降低速率模式,而不是只改驱动时钟寄存器。多组上拉并联也会降低等效阻值,因此扩展板接入后应重新检查灌电流。

逻辑分析仪将模拟波形转换成高低电平后,可能隐藏边沿缓慢及阈值穿越时刻。测量应使用合适的探头和上升时间定义,并在总线最远端观察。设备输入滤波和阈值差异还可能让不同器件对同一波形判断不同。若总线以高于电气限制的速度运行,通信错误可能随温度、电容或设备数量变化,固件重试只会增加总线占用,无法修复信号本身的边沿。

多控制器总线的仲裁则由控制器在发送过程中比较自己输出的逻辑值与实际总线电平。因线路采用开漏结构,发送高电平的一方若观察到总线仍为低,就应判定仲裁丢失并停止本次发送,让获胜者继续完成事务。软件不能把仲裁丢失等同于设备无应答后立即强制拉低SCL或发STOP,否则可能破坏获胜控制器的帧。硬件外设是否自动释放、提供仲裁丢失标志及如何清除,都由具体型号决定。

事务重试应等总线回到空闲并采用有限次数或退避策略,避免多个控制器在同一时刻重复碰撞。重试前还需判断上一次命令是否已经对目标器件产生副作用:一次寄存器写可能已被另一个控制器完整发送,而本机只观察到后续仲裁失败。将非幂等命令盲目重放,可能执行两次。系统应通过事务标识、读回确认或可幂等命令设计来处理不确定完成状态。

例如双方发送不同目标地址时,失去仲裁的一方尚未选中自己的目标;但若双方发送了相同地址和相同前缀,直到数据阶段才分出胜负,目标已接收一部分共同内容。因此嵌入式应用需按命令副作用分析重试边界,不能仅凭地址已应答判断本机事务成功。若硬件支持仲裁丢失后转入被寻址目标模式,也要由驱动处理这个状态转换,不能让错误恢复代码直接复位整个共享总线。

电气裕量保证位能被识别,仲裁与重试策略保证多个发起者正确协作。分别验证最坏负载下的边沿与并发事务,再检查完成状态的不确定性,才能可靠共享总线。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭