TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049: DCAN的Error如何清除呢?

Part Number:TMS320F280049

各位大神好,我最近的一个工程,发现Dcan经常死掉,于是在轮询的时间里加了一句话,去复位can:

//===================================================================

status_err = CAN_getStatus(CANA_BASE);

temp1= status_err & CAN_STATUS_BUS_OFF;
temp2= status_err & CAN_STATUS_EWARN ;
temp3= status_err & CAN_STATUS_EPASS ;

if( (temp1==CAN_STATUS_BUS_OFF) || (temp2== CAN_STATUS_EWARN) || ( temp3== CAN_STATUS_EPASS) )
{
CAN_Reset(CANA_BASE);
//CAN_enableController(CANA_BASE);
}

//===================================================================

CAN_Reset(CANA_BASE);这个是自己封装的函数,是把SWR支起来,去复位can,但是仍然无法去掉故障;

因此死后仿真查看,发现CAN_CTL的init位置1,于是在里面加了CAN_enableController(CANA_BASE);去复位init位。

但是,复现故障后,发现CAN_ES的EWarn和EPass位被置起来了,而且CAN_ERRC里面,CAN_RP置了1,CAN_REC装满了(0x7F)。

于是can就悲惨的无法工作了。

求个办法,怎么样去避免这个情况。我觉得can无法工作,应该和CAN_ERRC计数器满溢有关。

复现这个问题的办法是,设置can波特率为500k,然后用1000K的波特率去给他丢一包,然后再回来。发现can停工了。

luys:

CAN_CTL的PMD是0101,也就是 Parity function disabled ,为啥也会这样呢

,

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛,如有答复将尽快回复您。谢谢!

,

Cherry Zhou:

您好,请问CAN node是由于bus上的错误而进入了bus-off的状态?还是说特意使用不匹配的bit-rate创建的bus-off?

如果 BO 是由于总线上的错误出现的,那请您先检查node进入 BO 的原因。 bus-off是一种比较严重的错误。您需要找到传输期间发生该错误的根本原因。 在正确设计 / 配置的网络中,通信错误应该很少,虽然可能会由于外部噪声出现一些错误,但一旦干扰消失,总线会自行恢复,protocol是这样设计的。

假设node进入 BO (不管是因为错误还是特意设置的) ,node必须等待至少 128×11 隐性 bit-times,才能从 BO 中取出。 这段时间不能缩短,因为是由 CAN protocol定义的。 请您尝试等待这段时间,然后再使能控制器。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049: DCAN的Error如何清除呢?
分享到: 更多 (0)