请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TCAN1146-Q1 工具/软件:
您好:
我这边发生了一些关于总线故障的奇怪行为、这些故障包括:
- 将 CANH 与 CANL 短接
- 将 CANL 与 VBAT 短接
- 将 CANH 与 GND 短接
故障物理施加在总线上、我可以通过 INT_CANBUS 寄存器读取总线故障源错误、几乎仅持续 1 秒。 然后、与总线故障源相对应的位再次翻转为 0、就像故障不再应用、尽管该故障仍在总线上实际应用。
例如:将 CANH 与 CANL 短接
我可以从 INT_CANBUS 寄存器读取值 0b00100000 (0x20)、其中在施加指示相关总线故障的故障后、位 5 被正确设置为 1。 但是、在 1 秒后再次检查该位、我从 INT_CANBUS 读取了 0x0、这意味着收发器不再检测到故障、尽管该故障仍应用在总线上。
分段场景:
- 施加总线故障
- 故障值在 INT_CANBUS 寄存器中锁存 1 秒
- 故障值在 1 秒后不再锁存(但实际上仍会应用)
- 然后、通信中断
对代码的见解:
- 总线故障检查是通过轮询函数中的 INT_CANBUS 寄存器定期完成的、该函数每 500ms 轮询一次。
- 我只能从 INT_CANBUS 读取正确的值 2 次(500ms * 2 = 1 秒)、因此该值不再被锁存。
- 每次读取 INT_CANBUS 寄存器后、 代码都会手动清除被翻转为 1 的位、即总线故障源、因为该寄存器是 R/W1C、不是自清零位。
另一方面、这种行为 器件的正常运行 出现以下错误:
- 将 CANL 与 GND 短接
- 将 CANH 与 VBAT 短接
其中、只要实际施加了故障、就始终会在 INT_CANBUS 寄存器中锁存该故障。 但是、在这种情况下、通信将始终开启。
谢谢。