CAN控制器和CAN收发器初始化

   最近项目中遇到CAN的物理层测试问题,主芯片S32K144,CAN芯片TJA1043:

单帧唤醒,出现收到第一帧时TXD出现一个12us的下拉波形,如下图:
在这里插入图片描述
正确图形:

在这里插入图片描述
分析如下:

未接其它ECU的情况下,单帧唤醒,由于CAN还没有初始化,CANOE发送出去的报文收不到ACK,CANOE会一直自动重发,如下图所示;
在这里插入图片描述从收到第一帧唤醒报文,开始运行其它应用初始化程序(如EEPROM),先初始化CAN控制器,再设置CAN收发器,当收发器设置进入Normal Mode时,有可能会处于重发帧的中间或者结束和起始。

a.当处于重发帧的中间时,收发器开始解释后半帧数据,并将数据传到RXD上,按照帧结构(帧起始+仲裁段+控制段+数据段+CRC段+ACK段+帧结束)解析接收到的后半部分帧数据,会检测到错误一般会是STUFF错误,所以会在最后给出主动错误帧。
错误帧结构如下图:

在这里插入图片描述
出现12us的下拉波形,就是连续6个显性电平位(速率500Kbit,算下来每一个bit位的时间是2us);

b.当处于重发帧的结尾或者开始时,收发器能够解析到完成的一帧CAN报文,并且在ACK段,TXD给出一个2us的ACK应答。

通过多次测试,无法让每次唤醒都能接收一帧完整的报文,即不出现12us的下拉波形(错误帧)。而且,将唤醒帧的内容进行修改,测试的结果不同;因为从收到唤醒帧到设置CAN控制的STB、EN脚,几乎是固定的;但是唤醒帧中的内容因为CAN总线位填充的规则存在,导致没一帧唤醒帧的长度不一样。

调整CAN控制器和CAN收发器的初始化顺序之后,即先打开收发器再初始化CAN控制器,测试结果如下图:
在这里插入图片描述图中,初始化收发器之后,就能正确的转化CANH和CANL收到的报文了,只有在CAN控制器初始化完成之后会给出ACK应答,否则无法应答。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值