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.

[参考译文] TCAN4550EVM:CANbus 发送数据不稳定

Guru**** 1744610 points
Other Parts Discussed in Thread: TCAN4550EVM, TCAN4550
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1374877/tcan4550evm-canbus-transmit-data-is-unstable

器件型号:TCAN4550EVM
主题中讨论的其他器件: TCAN4550

工具与软件:

大家好、团队成员:

我遇到 CAN 传输问题。

传输非常不稳定、接收方并不总是收到数据。

但是、当我将 WriteTXBuffer 和 TransmitBufferContents 之间的时间延长至超过一秒时、数据传输将变得更加稳定。

什么原因可能导致该问题?

我已经测试了我的接收设备、没有问题。

//写入 TX 缓冲区

TCAN4x5x_MCAN_WriteTXBuffer (0、标头、TxData);

//发送消息

TCAN4x5x_MCAN_TransmitBufferContents (0);

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

    尊敬的 HSINYU:

    我不清楚你所说的"传输非常不稳定、接收者并不总是收到数据"的确切含义。  我不知道这是否意味着器件没有响应传输请求、并且由于某种原因没有在 CAN 总线上传输消息、这可能表明存在与时钟相关的问题。  或者、如果这意味着已发送消息中产生错误、导致无法成功传输到接收设备。

    在测试期间、您是否可以通过示波器来监控 CAN 总线、以便查看测试期间 CAN 波形是否有任何问题?  当您在 WriteTXBuffer 和 Transmit BufferContents 函数之间添加额外延迟时、波形是否有任何差异?  当您尝试传输时、是否看到 CAN 总线上丢弃了任何错误帧?

    您是否还可以监控各种状态、中断、错误计数器和 TX 缓冲寄存器、以查看器件是否标记了错误或问题?

    0x0820 -器件中断

    0x0824或0x1050 - MCAN 中断

    0x1018 -控制寄存器(监控 INIT 位)

    0x1040 -错误计数器寄存器(CAN 发送和接收错误计数器)

    0x1044 -协议状态寄存器(CAN 特定状态信息、包括错误代码)

    0x10C4 - TX FIFO/队列状态寄存器

    0x10CC - TX 缓冲区请求待处理(查看消息是否处于待发送状态)

    0x10D8 -发生了 TX 缓冲区添加请求传输(查看消息是否成功发送)

    此致、

    Jonathan

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

     Jonathan、您好!

    很抱歉这么晚才回复。

    我通过 stm32wb5连接到 tcan4550evm。

    程序执行如下所示。

    但是、器件要接收两个 CAN 传输、必须有0.3秒的时间间隔。

    如果少于0.3秒、很容易遇到无法丢弃第二个数据的情况。

    该延迟时间是否合理?

    理论上、两次 CAN 传输之间的间隔对于 tcan4550应该是多长时间?

     

    init_can ();//运行主 MCAN 配置序列。 主要的配置就在这里!

    uint8_t data[4]={0x55、0x66、0x77、0x88};//定义数据有效载荷

    Sieg_tcan_Tx (DATA、MCAN_DLC_4B);

    HAL_DELAY (300);//延迟300毫秒(0.3秒)

    DATA[0]= 0x11;

    DATA[1]= 0x22;

    DATA[2]= 0x33;

    DATA[3]= 0x44;

    Sieg_tcan_Tx (DATA、MCAN_DLC_4B);

    Int Sieg_tcan_Tx (uint8_t * TxData、uint32_t len)

    /*准备 Tx 消息标头*/

    TCAN4x5x_MCAN_TX_Header ={0};//初始化 CAN 标头

    标头。 DLC = len;//数据长度为8个字节

    标头。 ID = 0x100;//设置 CAN ID

    标头。 FDF = 1;//启用 CAN FD 帧

    标头。 BRS = 1;//比特率切换启用

    标头。 EFC = 0;

    标头。 MM = 0;

    标头。 RTR = 0;

    标头。 XTD = 0;//使用标准 ID

    标头。 ESI = 0;//错误状态指示器

    if (* TxData =1)

    标头。 ID = 0x100;//设置 CAN ID

    设计

    标头。 ID = 0x111;//设置 CAN ID

    //写入 TX 缓冲区

    TCAN4x5x_MCAN_WriteTXBuffer (0、&Header、TxData);

    //发送消息

    TCAN4x5x_MCAN_TransmitBufferContents (0);

    返回0;

    }

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

    尊敬的 HSINYU:

    时序基于 SPI 和 CAN 比特率的组合、以及 CAN 和 SPI 消息之间的空闲时间。  您需要计算系统将消息内容传输到 TX 缓冲器元素并传输消息所需的时间。  您还可以简单地使用示波器或逻辑分析仪测量这一点、以确定从 SPI 开始到 CAN 消息传输的时间。

    由于这两条消息仅使用单个 TX 缓冲器、因此在尝试加载第二条消息之前、还应验证第一条消息是否成功传输。  如果不这样做、且 TX 消息仍处于等待发送中、则可以用新消息覆盖 TX 缓冲区内容、或在尝试传输时用部分覆盖来损坏该内容。

    您可能需要在第二条消息之前向发生 TX 缓冲区传输(0x10D8)或 TX 缓冲区请求挂起(0x10CC)寄存器添加一个读取操作、以验证第一条消息的状态以及将该缓冲区重复用于新消息是否安全。

    你也可以尝试使用多个专用 TX 缓冲区、或者一个具有多个 TX 缓冲区的 TX FIFO 或队列来避免这个潜在问题。

    一旦 TX 缓冲区添加请求(0x10D0)寄存器中设置了 TX 缓冲区的位、器件将根据 CAN 总线活动和协议的仲裁规则尽快尝试发送。  如果 CAN 总线上还有其他活动、可能无法确切了解成功发送消息所需的时间、因此最好是验证 TX 缓冲区是否可用。

    我还建议您查看 MCAN 用户手册 (链接)由 Bosch 发布、了解有关 TCAN4550中使用的 CAN FD 控制器 IP 的更多信息。

    此致、

    Jonathan

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

     Jonathan、您好!

    为满足产品要求、我关闭了 CAN FD。

    关闭 CAN FD 后、不再遇到相同的问题。

    未修改任何其他内容。 相关信息如下。

    此致、

    Hsinyu