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.

[参考译文] TMS320F28069:CAN 状态位

Guru**** 2540720 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1115613/tms320f28069-can-status-bit

器件型号:TMS320F28069

大家好、

以下是客户提出的问题、可能需要您的帮助:

调试可以接收稳定性、在 DSP 软件运行后可以正常发送和接收。

然后尝试拔下 CAN 电缆、然后连接 CAN 器件、在连续几次插入连接后、设置了 CAN 的两位 CCE 和 ACKE、CAN 无法正确发送或接收。 ACKE 与硬件电缆是否相关? 在什么情况下将设置 CCE?

有时会设置 SMA、SE 错误、但这些位不应导致 CAN 接收和传输错误。

您可以帮助检查此案例吗? 谢谢。

此致、

樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="496057" url="μ C/support/microset/C2000-microset-group/C2000/f/C2000-microset-forum/1115613/tms320f28069-ca-status-bit"]ACKE 与硬件电缆是否相关? [/报价]

    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 将在两种情况下设置:

    1. 当 CCR 位由软件置位时、用于配置 CANBTC
    2. 当 CCR 位在总线关闭状态下由 CAN 模块置位时

    在这两种情况下、传输/接收都不会发生。

    [~用户名="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 连接也不会恢复正常。  

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~用户名="496057" url="支持/微控制器/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4138950#4138950]Bus 不连接状态、这是指拔下 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 中。 这可能是正在发生的情况。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    那么,当前的情况是如何使链路恢复,即使出现此错误也是如此? 或者只有在电源关闭后才能恢复?  
    或者在当前情况下我可以做什么,比如重新初始化某些寄存器?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Haresh、

    Xiaohuang Li 是我的客户、您可以在此主题中直接讨论此问题、如果您需要任何进一步的帮助、请告知我。

    谢谢、此致、

    樱桃

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    小黄

                   重复干扰节点(故意)可能会使发送或接收错误计数器递增到255以上、从而将节点推到脱离总线(BO)状态。 您可以通过检查 CCR 位是否为1来验证节点是否确实位于 BO 中。

    BO 有两种方法:

    1. 手动方法:在 BO 时清除 CCR 位。
    2. 自动方法:在初始化期间使 ABO=1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我仍然很困惑、为什么在 DSP 成功初始化 eCAN 后可以设置 CCE 位。

    我的问题是在插入-拔下 CAN 设备数次后设置 CCE 位。

    我是否可以使用上述方法来解决我的问题?  

    现在、这个问题似乎可以在断电和重新上电后解决。 这不是我的意图。 我的目的是在不断电和上电的情况下恢复 CAN TX-Rx;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现另一种现象、即 CAN RX-TX 不起作用、然后我观察 CAN 寄存 器、即使 DSP 软件发送了大量数据、也不能将 TM 设置为1。


    根据我的理解,事件 TX 将导致 TM 设置,对吧? 但现在不是;
    为什么会发生这种情况?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="487859" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4146init#4146298"]我仍不明白为什么在 DSP 成功  报价 eCAN 后可以设置 CCE 位[/quot]

    每次 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。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回复、

    我发现、一旦出现上述问题、如果我重新调用 InitECana (void)将有助于使 eCAN RX-Tx 恢复正常状态。

    BTW,如果 SRES 位再次置位,eCAN 是否必须重新初始化或 NOR?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="487859" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1115613/tms320f28069-cAN-STATUS-bit/4146383#4146383"]我发现上述问题发生后、如果我重新调用 InitCana (tCAN)帮助恢复正常状态[引用 eCAN-Tx]。

    这是因为在初始化过程中 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中的示例