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

TMS320F280025: 在配置使用其CAN的BUSOFF测试时,针对ACK位的干扰BUSOFF功能正常,但在针对RTR位的干扰时候,无法进入BUSOFF的状态,导致BUSOFF逻辑失效

Part Number:TMS320F280025

如上是bus_off测试结果;如下是底层配置代码:

//初始化配置

GPIO_setPinConfig(GPIO_30_CANA_RX);
GPIO_setPinConfig(GPIO_31_CANA_TX);
//初始化CAN模块
CAN_initModule(CANA_BASE);
//设置波特率
// CAN_setBitRate(CANA_BASE, DEVICE_SYSCLK_FREQ, 500000, 20);
CanaRegs.CAN_BTR.bit.BRPE = 0;
CanaRegs.CAN_BTR.bit.BRP = 9;
CanaRegs.CAN_BTR.bit.SJW = 3;
CanaRegs.CAN_BTR.bit.TSEG1 = 15;
CanaRegs.CAN_BTR.bit.TSEG2 = 2;

//采样点计算 = TSEG1+1+1/(TSEG1+TSEG2+3)

CAN_clearInterruptStatus(CANA_BASE, CAN_INT_INT0ID_STATUS);
CAN_enableInterrupt(CANA_BASE, CAN_INT_IE0 | CAN_INT_ERROR | CAN_INT_STATUS);

Interrupt_register(INT_CANA0, &ECAN_ISR_EX);

Interrupt_enable(INT_CANA0);

CAN_clearGlobalInterruptStatus(CANA_BASE, CAN_GLOBAL_INT_CANINT0);
CAN_enableGlobalInterrupt(CANA_BASE, CAN_GLOBAL_INT_CANINT0);

Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP9);

//启动转换
CAN_startModule(CANA_BASE);

//BUS_OFF判断

void CANBUS_Ecan_isr(CANBUS_handle p)
{
uint32_t status;
status = CAN_getInterruptCause(CANA_BASE);

if(status == CAN_INT_INT0ID_STATUS)
{
status = CAN_getStatus(CANA_BASE);
TEC = CanaRegs.CAN_ERRC.bit.TEC;
REC = CanaRegs.CAN_ERRC.bit.REC;

if(((status & ~(CAN_STATUS_TXOK | CAN_STATUS_RXOK)) != 7) &&
((status & ~(CAN_STATUS_TXOK | CAN_STATUS_RXOK)) != 0))
{
p->err_flag = 1;
if(status & CAN_STATUS_BUS_OFF)
{
CAN_disableRetry(CANA_BASE);
p->Busoff_flag = 1;
p->Off_delay_cnt = 0;
}
}
else if(status & CAN_STATUS_TXOK)
{
CAN_clearInterruptStatus(CANA_BASE, TX_MSG_OBJ_ID);
p->err_flag = 0;
p->Busoff_cnt = 0;
}
}
else if(status == TX_MSG_OBJ_ID)
{
CAN_clearInterruptStatus(CANA_BASE, TX_MSG_OBJ_ID);
p->err_flag = 0;
}
else if(status < TX_MSG_OBJ_ID)
{

p->err_flag = 0;
CAN_readMessageWithID(CANA_BASE, status, &canbus.frameType, &rxMsgData.Ram_ID.all, rxMsgData.Data);

CAN_clearInterruptStatus(CANA_BASE, status);

p->Rxd_data_finish_flag = 1; //receive success

}
}

Vivian Gao:

感谢您对TI产品的关注! 关于你的咨询,我们正在确认你的问题,稍后回复您。

,

Eirwen:

请尝试参考下面两个链接:

TMS320F28035: Can't trigger BUSOFF when R0 and RTR bit are interfered – C2000 microcontrollers forum – C2000Tm︎ microcontrollers – TI E2E support forums

TMS570LS0714: TMS570 CAN BUS can't enter to BUSOFF when doing the RTR interference – Arm-based microcontrollers forum – Arm-based microcontrollers – TI E2E support forums

,

user6165063:

感谢您得回答,我这边浏览了您提供的帖子,该帖子最终并没有给出有效的解决方案,说会线下讨论交流,但后面并没有继续更新,请帮忙跟进该问题,或者提供有效的解决方案,谢谢

,

user6165063:

请问该问题还有在跟进吗

,

Eirwen:

当ACK和RTR实例发生时,是否还监视错误计数器? 每个误差都会导致误差计数器的增加,当帧正确传输/接收时,误差会减少。 如果错误计数器达到255,则总线关闭。 每种错误类型都有不同的权重。 ACK (我认为是传输错误的一部分)的权重为8个计数。 其他类型的错误计数较低。 检查错误计数器寄存器CAN_ERRC值以及遇到CAN错误时这些值的增量。 

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280025: 在配置使用其CAN的BUSOFF测试时,针对ACK位的干扰BUSOFF功能正常,但在针对RTR位的干扰时候,无法进入BUSOFF的状态,导致BUSOFF逻辑失效
分享到: 更多 (0)