S32K144 CAN Send Problem

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

S32K144 CAN Send Problem

跳至解决方案
1,136 次查看
chumcu
Contributor II

  我用官方S32K144-100EVB 开发板,可以发出CAN报文,编译器S32DS for arm 2.2。

  问题:但是,拔掉CAN线,CAN报文消失,即使CAN线恢复,CAN报文不恢复,发现有7个错误

  求帮助,(1)如何拔掉CAN线,CAN报文不消失,

                  (2)CAN线恢复后,CAN报文如何恢复正常,谢谢!

错误.JPG

     I  use S32K144-100EVB board can send CAN message , with S32DS for arm 2.2. But  when the CAN line is removed, the CAN message disappears, even if the CAN line is recovered, the CAN message is not recovered . When the CAN line is removed,  has  seven errors  in picture above.

   How to solve the problem,  when CAN line is removed , but CAN message  is send normally, Thanks.

 

0 项奖励
1 解答
1,012 次查看
Senlent
NXP TechSupport
NXP TechSupport

Hi@chumcu

RTM 4.0.0及以上的版本需要安装S32 DS V3.4

下面是我在网上看到测试bus-off相关的文档,写的好可以,你自己好好研究清楚,该说的点我已经和你说的很仔细了。我再和重复强调一点,总线上只存在一个节点的时候,你发送报文错误,此时会进入被动错误,但是无法进入bus-off,这种工况是不能自动恢复的,需要你重新初始化CAN模块。

https://blog.csdn.net/bjxdbz/article/details/114044821

 

在原帖中查看解决方案

11 回复数
1,120 次查看
Senlent
NXP TechSupport
NXP TechSupport

Hi@chumcu

“If during system startup only one node is operating, then its TXERRCNT increases in
each message it is trying to transmit, as a result of acknowledge errors (indicated by
the ACKERR bit in the Error and Status Register). After the transition to Error
Passive state, TXERRCNT does not increment anymore by acknowledge errors.
Therefore the device never goes to the Bus Off state.”

你这种工况就是上面数据手册所描述的,其实FlexCAN此时并没有进入bus-off状态,所有就算你恢复通讯,也不能自动恢复。

解决的方法,开始通讯的时候保证总线上存在一个以上的正常工作的节点,然后你再断开连接。

0 项奖励
1,115 次查看
chumcu
Contributor II

首先感谢你,但实际只有S32K144一个结点,往外发送CAN报文,断开CAN线再恢复CAN线,实际也需要CAN报文恢复,请问这样如何做,如何对哪些寄存器进行啥样的设置,或者你有这样的CAN例子分享吗,谢谢!

0 项奖励
1,112 次查看
Senlent
NXP TechSupport
NXP TechSupport

Hi@chumcu

还是看ESR1(FLTCONF)寄存器来判断错误类型,如果是bus-off,默认可以自动恢复。

如果你想关闭自动bus-off,可以设置CRTL1->BOFFREC.

参考测试代码

https://community.nxp.com/t5/S32K-Knowledge-Base/Example-S32K144-FlexCAN-TX-RX-Error-ISR-test-S32DS2...

 

0 项奖励
1,072 次查看
chumcu
Contributor II

ERRINT老报错,在哪里关掉ERRINT老报错,在哪里关掉

又试了半天,发现故障现象:ESR1的ERRINT(Error Interrupt)老报错误,显示“1”

(使用环境:(自己的CAN_PAL或官网CAN例子) +S32DS for arm 2.2 +S32K144-100EVB)

实际需求1:S32K144先发送报文,在接CAN线,希望检测到报文

实际需求2:只有S32K144发CAN报文,拔掉CAN线,在恢复CAN线,希望CAN报文正常发送

(ERRINT:BIT1ERR, BIT0ERR, ACKERR, CRCERR, FRMERR,or STFERR),

请问,在哪些函数把ESR1的ERRINT给关了,或者有满足需求的CAN参考例子,谢谢

 

0 项奖励
1,061 次查看
Senlent
NXP TechSupport
NXP TechSupport

Hi@chumcu

ERRINT:

This bit indicates that at least one of the error bits (BIT1ERR, BIT0ERR, ACKERR, CRCERR, FRMERR,
or STFERR) is set. If the corresponding mask bit CTRL1[ERRMSK] is set, an interrupt is generated to the
CPU. This bit is cleared by writing it to 1. Writing 0 has no effect.

默认你如果调用错误中断处理程序的时候,会帮你清ERRINT寄存器。

 

默认bus-off是自动恢复的。

1.你的第一个需求会存在总线不会进入bus-off状态

“如果在系统启动期间只有一个节点正在运行,则由于确认错误(由错误和状态寄存器中的 ACKERR 位指示),其 TXERRCNT 在尝试发送的每条消息中都会增加。 转换到错误被动状态后,TXERRCNT 不再因确认错误而递增。因此,器件永远不会进入总线关闭状态”

 

2.第二个工况理论上会进入bus-off,但是默认bus-off是自动恢复的,所以你不需要操作。

 

针对于第一种工况需要恢复的话,你需要在错误中断处理中判断出该工况,然后重新初始化FlexCAN模块。

0 项奖励
1,047 次查看
chumcu
Contributor II

感谢回答,请问在哪些错误中断函数,可以屏蔽、关掉ESR1报的故障,谢谢

0 项奖励
1,039 次查看
Senlent
NXP TechSupport
NXP TechSupport

Hi@chumcu

ESR1是错误状态寄存器,你可以不启动FlexCAN错误中断但是你又不能屏蔽ESR1寄存器的更新。

0 项奖励
1,015 次查看
chumcu
Contributor II

谢谢,但是还是不知道如何下手解决我说的问题,要不我试试RTM4.0的CAN,

听说RTM3.0的CAN有bug,但是RTM4.0不支持S32DS for  arm 2.2,

请问如何在 S32DS for  arm 2.2环境下,借用RTM4.0里的can、其他外设等例程、驱动,谢谢。

0 项奖励
1,013 次查看
Senlent
NXP TechSupport
NXP TechSupport

Hi@chumcu

RTM 4.0.0及以上的版本需要安装S32 DS V3.4

下面是我在网上看到测试bus-off相关的文档,写的好可以,你自己好好研究清楚,该说的点我已经和你说的很仔细了。我再和重复强调一点,总线上只存在一个节点的时候,你发送报文错误,此时会进入被动错误,但是无法进入bus-off,这种工况是不能自动恢复的,需要你重新初始化CAN模块。

https://blog.csdn.net/bjxdbz/article/details/114044821

 

1,004 次查看
chumcu
Contributor II

感谢你多次的回复,我再好好研究下,争取早日,把问题给解决了!

0 项奖励
1,096 次查看
chumcu
Contributor II

谢谢,参考代码可以发出CAN报文,但是拔掉、再恢复CAN线后,CAN报文不恢复。请问有拔掉CAN线,恢复CAN线CAN报文可以正常发送例子分享吗?(这个研究了半天,没搞定)

 

0 项奖励