大家好、
以下是客户提出的问题、可能需要您的帮助:
调试可以接收稳定性、在 DSP 软件运行后可以正常发送和接收。
然后尝试拔下 CAN 电缆、然后连接 CAN 器件、在连续几次插入连接后、设置了 CAN 的两位 CCE 和 ACKE、CAN 无法正确发送或接收。 ACKE 与硬件电缆是否相关? 在什么情况下将设置 CCE?
有时会设置 SMA、SE 错误、但这些位不应导致 CAN 接收和传输错误。


您可以帮助检查此案例吗? 谢谢。
此致、
樱桃
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
以下是客户提出的问题、可能需要您的帮助:
调试可以接收稳定性、在 DSP 软件运行后可以正常发送和接收。
然后尝试拔下 CAN 电缆、然后连接 CAN 器件、在连续几次插入连接后、设置了 CAN 的两位 CCE 和 ACKE、CAN 无法正确发送或接收。 ACKE 与硬件电缆是否相关? 在什么情况下将设置 CCE?
有时会设置 SMA、SE 错误、但这些位不应导致 CAN 接收和传输错误。


您可以帮助检查此案例吗? 谢谢。
此致、
樱桃
ACKE 与 H/W 电缆无关。 当网络上没有其它节点发送 ACK 信号时、ACKE 就会发生。
[引用 userid="496057" URL"~/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1115613/tms320f28069-co-status-bit"]在什么情况下将设置 CCE?CCE 将在两种情况下设置:
在这两种情况下、传输/接收都不会发生。
[~用户名="496057" url="支持/微控制器/C2000-micro-group/C2000/f/C2000-micro-forum/1115613/tms320f28069-ca-status-bit"]有时会设置 SMA、SE 错误、但这些位不应导致 CAN 接收和传输错误。
[/报价]SMA 不会。 SE 表示发生了填充错误。
您好、Haresh、
感谢您的支持。
[引用 userid="10172" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4134534#4134534"]当 CCR 位由 CAN 模块在总线关闭条件下设置时[/QUERC]]总线断开状态、这是否指的是拔下 CAN 线路?
现在的情况是、当硬件受到干扰时、CAN 连接完全失败、即使在消除外部干扰的情况下、CAN 连接也不会恢复正常。
谢谢、此致、
樱桃
不可以。当 TEC 或 REC 为≥255时、总线关闭是一个条件。 当通信期间出现大量错误时、将发生 BO。 请注意、断开 CAN 线路可能会导致 BO。
~引用 userid="496057" URL"μ C/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4138950#4138950"]CAN 连接即使在消除外部干扰的情况下也不会恢复正常。 [/报价]节点可能处于 BO 状态。 如果是、它将不会参与通信。 如果 ABO=1、则节点可以自动从 BO 退出、前提是没有更多错误。 如果 ABO = 0、节点将保持在 BO 中。 这可能是正在发生的情况。
每次 CCR 位被置位时、CCE 位都将被置位。
[引用 userid="487859" URL"~/support/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4146298#4146298"]我的问题是在多次插拔 CAN 设备后设置 CCE 位。[/QUERPLET ]这是因为由于节点总线关闭而设置了 CCR 位。
[~ userid="487859" url="支持/microcontrollers/C2000-microcontrollers-group/CC2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4146298#4146298]\n 是否可以使用上述方法来解决我的问题? [/报价]是的。
[~ userid="487859" URL"/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4146298#4146298"]我的目的是在不断电和上电的情况下恢复 CAN TX-Rx;无需重启电源。 如果节点处于脱离总线状态、您可以通过清除 CCR 位将其置于脱离总线状态。 如果您不想自动从 BO 中恢复,则此选项适用。 另一个选项是使用 SRES 位执行软件复位。
[~ userid="487859" url="支持/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4146313#4146313]]根据我的理解,事件 TX 将导致 TM 集,对吧? 但现在不是;[/报价]在模块传输时确实会设置 TM。 确保模块实际正在传输并使用32位读取。 有关信息,请访问 www.ti.com/lit/SPRA876。
这是因为在初始化过程中 CCR 位被置位和清零。
[引用 userid="487859" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4146383#4146383]BTW,如果 SRES 位再次置位,eCAN 是否必须重新启动或重新启动或重新启动?[?]最好重新初始化寄存器。 如 TRM 中所述、MBX 内容未修改。
您是否意味着此设置将有所帮助?
{
/*为 CAN 控制寄存器创建影子寄存器结构。 这是
因为只允许对这些寄存器进行32位访问。 16位访问
这些寄存器可能会损坏寄存器内容或返回
错误数据。 *
struct eCAN-regs ECanaShadow;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 0~23是 TX
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CONFIG_TX_MSG_Boxs ();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 24~31为 Rx
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CONFIG_RCV_MSG_Boxs ();
// TAN、RMPn、GIFn 位在复位时都为零并且再次被清零
//作为预防措施。
ECANARegs.CANTA.ALL = 0xFFFFFFFF;//清除所有 Tan 位*/
ECANaRegs.CANRMP.ALL = 0xFFFFFFFF;//清除所有 RMPn 位*/
ECANaRegs.CANGIF0.ALL = 0xFFFFFFFF;//清除所有中断标志位*/
ECANaRegs.CANGIF1.ALL = 0xFFFFFFFF;
/*为 eCANA*/配置位定时参数
EALLOW;
ECanaShady.CANMC.ALL = ECanaRegs.CANMC.ALL;
ECanaShady.CANMC.bit.CCR = 1;//设置 CCR = 1
ECanaRegs.CANMC.ALL = ECanaShadure.CANMC.ALL;
//等待 CPU 被授予更改配置寄存器的权限
操作
{
ECanaShady.canes.all = ECanaRegs.canes.all;
} while (ECanaShading.canes.bit.CCE!= 1);//等待 CCE 位被置位。
//步骤6. 对主控制寄存器(CANMC)进行如下编程:
// 1. 清除 CCR (CANMC.12)= 0
// 2. 清除 PDR (CANMC.11)= 0
// 3. 清除 DBO (CANMC.10)= 0
// 4. 清除 WUBA (CANMC.9)= 0
// 5. 清除 CDR (CANMC.8)= 0
// 6. 清除 ABO (CANMC.7)= 1
//7. 清除 STM (CANMC.6)= 0
//8. 清除 SRES (CANMC.5)= 0
//9. 清除 MBNR (CANMC.4-0)= 0
ECanaShady.CANMC.ALL = ECanaRegs.CANMC.ALL;
ECanaShady.CANMC.bit.CCR = 0;//设置 CCR = 0
ECanaShady.CANMC.bit.PDR = 0;//设置 PDR = 0
ECanaShady.CANMC.bit.DBO = 0;//设置 DBO = 0
ECanaShady.CANMC.bit.WUBA = 0;//设置 WUBA = 0
ECanaShady.CANMC.bit.CDR = 0;//设置 CDR = 0
ECanaShady.CANMC.bit.ABO = 1;//设置 ABO = 1
ECanaShady.CANMC.bit.STM = 0;//设置 STM = 0
ECanaShady.CANMC.bit.SRES = 0;//设置 SRES = 0
ECanaShady.CANMC.bit.MBNR = 0;//设置 MBNR = 0
ECanaRegs.CANMC.ALL = ECanaShadure.CANMC.ALL;
//等待 CPU 不再具有更改配置寄存器的权限
操作
{
ECanaShady.canes.all = ECanaRegs.canes.all;
} while (ECanaShading.canes.bit.CCE!= 0);//等待 CCE 位被清除。
EDIS;
EALLOW;
ECANaRegs.CANMIM.ALL = 0xFFFFFFFF;
ECANaRegs.CANMIL.ALL = 0;
ECANaRegs.CANGIF0.ALL = 0xFFFFFFFF;
ECANaRegs.CANGIM.ALL = 0x0003FF07;
EDIS;
}
我不清楚您尝试使用此代码完成什么、因此我无法进行评论。 只有在配置 CANBTC 寄存器时、才需要设置 CCR 位、而不是用于 CANMC 寄存器。 请参阅 www.ti.com/lit/SPRA876中的示例。