SJA1000 接收数据错误在 CAN 总线通信中遇到的问题涉及 SJA1000 芯片的使用。数据传输完全正常,但接收到的数据不正确。例如,当发送两个字节,即 0x00 和 0xFF 时,SJA1000 会接收 0x00 和 0x00。但是,当发送 0x00、0x11、0x22 或 0xFF、0xFF 等数据时,SJA1000 会正确接收数据。为什么会这样?
Re: SJA1000 receive data incorrect亲爱的 Jozef,
感谢您在我最近的项目中给予的支持。
最后,我在ALE信号和接地之间添加了一个15pF的电容,之前的问题解决了。
还有一件事要提的是,SJA1000 和这个故障板上的控制器之间的信号是使用杜邦电缆全线连接的。在集成控制器和 SJA1000 的另一块板上,相同的硬件设计没有这个问题。因此,怀疑是线路问题造成的。
致以最诚挚的问候,
FrankRe: SJA1000 receive data incorrect亲爱的弗兰克
这种行为表明存在信号完整性问题,可能是由于
-
弱上拉/下拉或浮空线:
- 示波器探头可能增加了电容或起到了弱上拉/下拉的作用,从而稳定了 ALE 信号。
-
阻抗失配或反射:
- 电平移器或 PCB 布局可能会导致反射或电压等级不正确。
-
时间问题:
- ALE 信号可能有轻微的定时,探测它对定时的影响足以使其工作。
-
在 ALE 线路上添加一个上拉或下拉电阻器:
- 尝试 4.7kΩ 或 10kΩ 等值,观察稳定性是否有所改善。
-
-
审查级别换档器规格:
- 确保 TI 芯片支持 SJA1000 所需的驱动强度和时序。
-
-
尝试添加一个小型电容(例如,10—100 pF):
- 这有助于过滤噪音或稳定信号(如果探测有帮助的话)。
致以最崇高的敬意
约瑟夫
Re: SJA1000 receive data incorrect
0xFF received erroneous waveform0xFF 接收到错误波形
0xFF receives the correct waveform0xFF 接收到正确的波形
黄色代表其中一条数据线。
绿色代表 RD 线。
紫色代表 CS 线。
从图中可以看出,黄色信号具有上升脉冲,但不会保留。
测试过程中发现,使用示波器探头测量 ALE 信号时,接收到的数据是正确的。但是,当不使用探头测试 ALE 信号时,接收到的数据是不正确的。ALE 信号正常。我们使用的控制器通过 TI 电平转换芯片与 SJA1000 通信,该芯片将 3.3V 电压转换为 5V 电压。
Re: SJA1000 receive data incorrect亲爱的弗兰克
可能的原因和建议:
-
位填充或帧解释问题:
- CAN 采用位填充技术,即在连续五个相同值的位之后,插入一个互补位。如果填充或去填充逻辑配置错误或出现故障,它可能会误读某些模式,如
0xFF (全部为 1)。
- 检查收发器或 SJA1000 是否正确处理位填充和去填充。
-
定时或同步问题:
- 如果节点之间的波特率或定时参数(如传播延迟、相位段)不匹配,就会导致比特采样错误。
- 验证 CAN 总线上的所有节点都配置了相同的波特率和时序设置。
-
收发器问题:
- SJA1000 依赖于外部 CAN 收发器(如 TJA1040)。如果收发器出现故障或与总线不正确匹配,则可能会使某些位模式失真。
- 尝试更换收发器或用已知的好收发器进行测试。
-
电气噪声或信号完整性:
- 某些位模式可能更容易受到噪声的影响,尤其是在总线端接不当或有反射的情况下。
- 确保端接电阻正确(通常总线两端为 120Ω),并使用示波器检查信号完整性。
-
SJA1000 寄存器配置不正确:
- 再次检查验收过滤器、帧格式和操作模式(BasicCAN 与 PeliCAN)。
- 配置错误可能会导致控制器误解或丢弃某些帧。
致以最崇高的敬意
约瑟夫