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.

[参考译文] 基于 ARM 的微控制器论坛

Guru**** 2538950 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1474785/arm-based-microcontrollers-forum

部件号:RM57L843


工具/软件:

您好:

我的问题与 TMS320x281x 和 RM57Lx 之间交换的扩展 CAN 帧的应用程序数据部分中的零星错误有关。
CAN 总线分析器不能指示帧错误、但可以看到线路上的应用程序数据不正确。 有时、应用程序数据的第一个或第二个字节显示为零或已移位位。 TMS320x281x 不会指示帧上的 CRC 错误。  

您以前见过这个问题吗?

由 HALCOMNGEN 创建并由 RM57Lx 应用程序导入的 canTransmit 函数包含这段代码、从 2011 年 9 月开始在 SPNA131(在 Hercules ARM 安全 MCU 上配置 CAN 节点)第 3.3 节的“canTransmit"函“函数中未出现:

/**-为配置 IF1
*-信息方向 — 写入
*-数据更新
*-启动变速箱
*/
节点->IF1CMD = 0x87U;

TIFF1CMD 使用 0xf8 初始化。

IF1DATx 正在填充正确的数据。

这是否与我的问题有关?  

此致、

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

    尊敬的 Marcio:

    我的问题与 TMS320x281x 和 RM57Lx 之间交换的扩展 CAN 帧的应用程序数据部分中的零星错误有关。
    CAN 总线分析器不能指示帧错误、但可以看到线路上的应用程序数据不正确。 有时、应用程序数据的第一个或第二个字节显示为零或已移位位。 TMS320x281x 不会指示帧上的 CRC 错误。

    我认为在 RM57x 中不会有任何单独的位来启用 CRC。 CAN 实例应在每次传输数据时为数据生成 CRC。

    可能是由于数据交换发生在应用程序代码本身、因此不生成 CRC 错误。 我的意思是、只有在介质/总线中发生数据损坏的情况下才会触发 CRC 错误、如果在提供给 CAN 实例之前修改了数据、则不会出现任何 CRC 错误。

    --
    此致、
    Jagadish。

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

    您好 Jagadish。

    感谢您的答复。

    我在  将 CAN 消息写入 IF1DATx 后、将其记录在 RM57Lx 中用于传输的 CAN 消息的应用数据部分。 然后、我使用在 Windows 上运行的程序计算消息的 CRC。 它不会在这些消息中找到 CRC 错误。

    此外、我会记录  TMS320x2812 CPU 收到的消息的数据部分、并使用相同的 Windows 程序计算 CRC、然后程序会在某些消息中发现 CRC 错误。


    很多时候、“00"会“会替换一个有效字节。 例如、TMS320x2812 中接收并记录的消息“D-0-6D-11-00-21-3F-3F-3F"应该“应该是“D-0-6D-11-24-21-3F-3F-3F"。“。  同样、“E0-76-11-24-28-3F-00-3F"应为“应为“E0-76-11-24-28-3F-3F-3F",“,而、而“90-4D-71-24-2D-00-3F-00"应为“应为“90-4D-71-24-2D-3F-00"。“。


    下面是发送函数。 'BD'是一个具有字节缓冲区的类、BD.GetLoad() 返回缓冲区中已使用的字节数(消息的应用程序数据部分的大小,始终为 8)。 在应用程序的上下文中、MessageBox 可以是 4、5 或 6。

    BOOLEAN CanATransmit(ENUM_CAN_MESSAGE_BOX messageBox, BD& bd)
    {
        BOOLEAN success = FALSE;
        DWORD regIndex = (messageBox - 1U) >> 5U;
        DWORD bitIndex = 1U << ((messageBox - 1U) & 0x1FU);
    
        // Check for pending message:
        // 0=No transmission has been requested for this message object.
        // 1=The transmission of this message object is requested and is not yet done.
        if ((REG_CAN_A->TXRQx[regIndex] & bitIndex) == 0U)
        {
            // No pending message, start new transmission.
    
            // Wait until IF1 is ready for use.
            while ((REG_CAN_A->IF1STAT & MASK_BIT_7) != 0) { }
    
            // Configure IF1 for message direction (Write) and Start Transmission.
            REG_CAN_A->IF1CMD = 0x87U;
    
            // Copy data into IF1.
            for (DWORD i = 0; i < MAX_DATA_LENGTH_CAN; i++)
            {
                if (i < bd.GetLoad())
                {
                    REG_CAN_A->IF1DATx[i] = bd[i];
                }
                else
                {
                    REG_CAN_A->IF1DATx[i] = 0;
                }
            }
    
            // Copy data into message box.
            REG_CAN_A->IF1NO = (BYTE)messageBox;
    
            // TODO: For debug only. Log
            text.Copy("\r\nt=");
            text.AppendArray(bd.GetBuffer(), bd.GetLoad(), '-');
            HMISendTextMessage(text.GetCStr());
            // TODO
    
            // Ok.
            success = TRUE;
        }
    
        // TODO: For debug only. Log
        else
        {
            text.Copy("\r\nTx pending error");
            HMISendTextMessage(text.GetCStr());
        }
        // TODO
    
        return success;
    }

    此致、

    Marcio。

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

    尊敬的 Marcio:

    您有任何 PCAN-View 工具吗?

    如果我们将 PCAN 视图连接到另一端而不是  TMS320x2812、则如果传输中出现任何错误、使用 CRC 进行解码将显示如下错误:

    而且、该 TMS320x 不是 Hercules 控制器的一部分、并且有一个不同的 BU 来支持该器件、似乎问题出在 TMS320x 端

    因此、我的建议是创建另一个部件号为 TMS320x 的螺纹。 然后将其分配给相应 BU 中的专家、他们可以在 TMS320x End 上验证出了什么问题。 我并不是要关闭此主题;在您的问题得到完全解决之前、我们仍然可以保持该主题处于打开状态。

    --
    此致、
    Jagadish。

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

    你好  Jagadish!

    我们有一个 CAN 协议分析器工具 (Microchip)、我已经在总线上记录了消息。 奇怪的是、它不显示 CRC 错误、但日志显示由 RM57Lx 生成的消息的数据部分、但有错误。

    这可能是配置问题吗? 这就是我们使用的设置。

    这可能是总线还是收发器出现硬件问题?

    关于上下文信息、在我的测试中、我们有 2 个 TMS320x 和 3 个 RM57Lx。 在 50ms 的周期内、每个 TMS320x 发送 21 条消息(命令发送到 RM57Lx)、每个 RM57Lx 发送 2 条消息(响应到 TMS320x)。 TMS320x 不会相互通信。 RM57Lx 不会相互通信。

    此致、
    Marcio。

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

    尊敬的 Marcio:

    解锁此主题的原因是 TI 未正确关闭该主题、因此我再次解锁它。

    对失禁的道歉。

    您是否仍坚持解决此问题、如果是、请让我知道您现在的问题所在。

    --
    此致、
    Jagadish。

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

    您好 Jagadish。

    我还无法确定问题。 TMS320x 上的应用在 RM57Lx 生成的扩展 CAN 消息的数据部分中仍然会遇到零星的错误。

    也就是说、偶尔丢失的消息不会影响系统。 然而,我认为这种行为不应该发生。

    如果您对问题的原因有任何建议、我将不胜感激。

    此致、

    Marcio。

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

    尊敬的 Marcio:

    您能否尝试更改以下线程中提到的采样点和/或传播延迟参数一次:

    (19) TMS5700332:CAN 时序配置--采样点--基于 Arm 的微控制器--内部论坛--基于 Arm 的微控制器--内部-- TI E2E 支持论坛

    (19) RM57L843:CAN 比特率配置 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    (19) TMS570LS3137:CAN 消息传输间隔设置问题 — 基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    --
    此致、
    Jagadish。

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

    尊敬的 Marcio:

    Marcio 做得很好!

    我正在 e2e 中添加您的解决方案以供将来参考:

    我在´ve 年 12 月发布的 TMS320F281x DSP 器件勘误表(文档版本 T)中的勘误表“eCAN:如果与 eCAN 寄存器的 eCAN 访问发生冲突、CPU 访问 eCAN 寄存器可能会失败“中发现了我的问题 (SPRZ193T)。

    我在 TMS320x 上实施了解决方法、问题消失了。

    --
    此致、
    Jagadish。