一、I2C通信异常及处理

(一)总线电压不匹配

  • 问题描述:I2C总线电压通常为3.3V或5V。如果总线上挂载的设备电压不匹配,例如2.5V设备与3.3V设备混用,可能会导致信号辨识错误,从而引起通信失败。
  • 处理方法:使用电压转换模块来解决电压不匹配的问题。

(二)MCU复位导致I2C异常

  • 问题描述:MCU在进行I2C通信时,如果发生复位,可能会导致I2C从设备进入死锁状态,即使复位后也无法恢复正常通信。
  • 处理方法
    1. 在通信时检测电压值,接近临界值时禁止I2C通信。
    2. 复位从设备。
    3. 在MCU上电时,通过SCL发送16个周期的时钟脉冲,帮助从设备从死锁状态中恢复。
    4. 在I2C总线上串联一个I2C缓冲器,自动恢复异常。

(三)从机挂死

  • 问题描述:当MCU作为I2C从机时,程序设计上的问题可能导致MCU无法正确读取或填充缓冲区,从而导致从机挂死。
  • 处理方法
    1. 确保I2C中断服务程序没有被意外屏蔽。
    2. 避免在中断服务程序中陷入死循环。
    3. 确保I2C功能系统没有被意外禁止。

(四)SDA死锁

  • 问题描述:在从机钳住总线期间,MCU异常复位可能导致SDA死锁。
  • 处理方法
    1. 在系统复位时,提供9个时钟信号来解除总线死锁。
    2. 在复位时给从机设备断电重启。

(五)硬件设计问题

  • 问题描述:硬件设计不当,如上拉电阻值过大,可能导致总线驱动能力不足,引起数据线与时钟线的电压拉高不足。
  • 处理方法:更换较小阻值的上拉电阻,增强总线驱动能力。

(六)总线通信异常

  • 问题描述:I2C通信中可能会出现总线通信异常,如设备未响应或数据传输失败。
  • 处理方法:使用try-except结构捕获并处理异常,例如捕捉IOError异常并输出错误信息。

(七)总线挂死

  • 问题描述:总线挂死可能由主机信号挂死、主机程序异常或从机拉死总线引起。
  • 处理方法
    1. 确保主机IO口正常,I2C状态机没有异常。
    2. 确保主机程序没有异常,能够正常主导I2C通信。
    3. 在从机拉死总线的情况下,通过补齐9个时钟信号来恢复通信。

二、SPI通信异常及处理

(一)SPI总线的四种模式

  • 问题描述:SPI总线有四种模式,由时钟极性(CPOL)和时钟相位(CPHA)决定。如果主设备和从设备的模式不匹配,会导致通信失败。
  • 处理方法:确保主设备和从设备的SPI模式设置一致。

(二)SPI总线的全双工通信

  • 问题描述:SPI总线是全双工通信,主机和从设备可以同时发送和接收数据。如果数据线连接错误或程序逻辑错误,会导致数据传输错误。
  • 处理方法:检查MOSI和MISO线的连接是否正确,确保程序逻辑正确处理发送和接收数据。

(三)SPI总线的片选信号(CS)问题

  • 问题描述:片选信号(CS)用于激活特定的从设备。如果CS信号控制错误,可能会导致错误的从设备被选中或从设备未被正确选中。
  • 处理方法:确保CS信号的控制逻辑正确,避免多个从设备同时被选中或从设备未被选中。

(四)SPI总线的最大设备数量

  • 问题描述:SPI总线的最大设备数量取决于主机的CS引脚数量。如果CS引脚数量不足,可能会限制从设备的数量。
  • 处理方法:合理规划CS引脚的使用,必要时可以使用GPIO扩展器来增加CS引脚数量。

(五)SPI总线的三线模式

  • 问题描述:SPI的三线模式是指使用SDIO线代替MOSI和MISO线,实现半双工通信。如果程序逻辑错误,可能会导致数据传输错误。
  • 处理方法:确保程序逻辑正确处理SDIO线的数据方向切换,避免数据冲突。

三、UART通信异常及SafetyLib和FCCU处理

(一)波特率不匹配

  • 捕获情况:SafetyLib和FCCU可以捕获接收数据的错误模式,如连续出现大量错误数据,进而判断可能是波特率不匹配。
  • 处理方式:FCCU触发复位操作,尝试恢复UART到默认状态,再重新配置正确的波特率。若复位后仍存在问题,可能进入故障状态并记录相关错误信息。

(二)缓冲区溢出

  • 捕获情况:通过监测缓冲区的使用情况和数据接收速率,SafetyLib和FCCU能够检测到缓冲区溢出的状况。
  • 处理方式:FCCU触发复位操作,清空缓冲区,重新开始接收数据。同时,可能调整缓冲区管理策略,如增大缓冲区大小或优化数据处理流程,避免再次发生溢出。

(三)硬件中断或干扰

  • 捕获情况:SafetyLib和FCCU可以检测到信号的异常变化,如出现毛刺、频繁的电平跳变等,从而判断存在硬件中断或干扰。
  • 处理方式:FCCU触发复位操作,尝试恢复硬件正常状态。若问题依旧,可能采取措施如增加信号滤波、调整硬件布局或屏蔽干扰源等,以减少干扰影响。

(四)帧错误

  • 捕获情况:根据UART通信协议,SafetyLib和FCCU在接收数据时会对帧格式进行检查,发现不符合规定的帧格式即捕获帧错误。
  • 处理方式:FCCU触发复位操作,重新初始化UART接收状态机。同时,可能对帧格式设置进行重新检查和配置,确保正确的帧格式被使用。

(五)奇偶校验错误

  • 捕获情况:SafetyLib和FCCU在接收数据时会按照设定的奇偶校验规则进行校验,发现校验不匹配即捕获该错误。
  • 处理方式:FCCU触发复位操作,重新开始接收数据。若校验错误频繁出现,可能检查发送方和接收方的奇偶校验设置是否一致,并重新配置相关参数。

(六)数据丢失

  • 捕获情况:通过监测数据传输的连续性和完整性,SafetyLib和FCCU能够发现数据丢失的情况,如序列号不连续、预期数据未在规定时间内到达等。
  • 处理方式:FCCU触发复位操作,重新同步数据传输。同时,可能采用自动重发请求机制(ARQ),要求发送方重新发送丢失的数据,以保证数据的完整性。

(七)无法发送但可以接收

  • 捕获情况:SafetyLib和FCCU在发送数据时检测到发送失败,如发送缓冲区无法写入、发送完成中断未触发等情况,同时接收功能正常。
  • 处理方式:FCCU触发复位操作,检查发送相关的硬件和软件设置。若问题出在发送引脚或发送缓冲区,可能重新配置相关资源,恢复发送功能。

(八)共地问题

  • 捕获情况:监测信号的电平变化和通信质量,SafetyLib和FCCU发现信号电平异常波动或误判增多,判断可能存在共地问题。
  • 处理方式:FCCU触发复位操作,检查接地连接。若问题依旧,可能采取措施如使用隔离模块、重新设计接地方案等,以解决共地问题。

(九)信号完整性问题

  • 捕获情况:SafetyLib和FCCU通过监测信号的完整性,如信号的幅度、上升时间、下降时间等,发现信号失真或衰减等问题。
  • 处理方式:FCCU触发复位操作,检查信号传输线路。若问题依旧,可能采取措施如使用信号调理电路、优化传输线路布局等,以改善信号完整性。

(十)超时设置不合理

  • 捕获情况:SafetyLib和FCCU在接收数据时,若超过设定的超时时间仍未接收到完整的数据帧,会捕获超时错误。
  • 处理方式:FCCU触发复位操作,重新设置合理的超时时间。同时,可能优化数据传输策略,如调整发送间隔、增加数据重发机制等,以避免超时问题。

四、看门狗相关问题及处理

(一)硬件看门狗和软件看门狗的区别

  • 硬件看门狗:通过硬件电路实现,独立于主处理器运行,即使主处理器出现故障,看门狗仍然可以正常工作。
  • 软件看门狗:通过软件程序实现,依赖主处理器运行,如果主处理器出现故障,看门狗可能无法触发复位操作。

(二)看门狗定时器的主要功能

  • 功能描述:看门狗定时器的主要功能是检测和处理系统故障。如果系统在规定时间内没有重置看门狗,看门狗会触发复位操作,以防止系统死锁或异常。

(三)看门狗定时器的“喂狗”操作

  • 操作描述:喂狗操作是指在规定的时间内重置看门狗定时器的操作。这通常通过写入特定的寄存器或执行特定的指令来完成,以防止看门狗触发复位操作。

(四)看门狗定时器的复位条件

  • 条件描述:看门狗定时器的复位条件通常是在规定的时间内没有收到“喂狗”信号。当看门狗计时器溢出时,会触发复位操作,将系统重置到初始状态。

(五)实现低功耗的看门狗定时器

  • 实现方法:实现低功耗的看门狗定时器可以通过选择低功耗的硬件看门狗芯片或优化软件看门狗的实现来实现。例如,使用低功耗的定时器,减少定时器的中断频率,或者在睡眠模式下使用看门狗。

(六)看门狗定时器在嵌入式系统中的应用

  • 应用场景:看门狗定时器广泛应用于嵌入式系统中,用于提高系统的可靠性和容错能力。例如,在工业控制系统、汽车电子、智能家居等领域,看门狗定时器可以有效防止系统因软件或硬件故障而死锁或异常。
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐