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.

[参考译文] TCAN4551-Q1:TCAN4551 在 CAN 通信~20 分钟 (20 帧/100ms) 后进入总线关闭状态

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1637185/tcan4551-q1-tcan4551-enters-bus-off-after-20-minutes-of-can-communication-20-frames-100ms

器件型号: TCAN4551-Q1

您好:

我们使用的是 TCAN4551 芯片、并且会遇到以下问题:

器件通电后、我们使用通过 PCAN-USB 连接的 PCAN-View 来传输数据。 我们使用扩展 CAN ID 以每 100ms 的时间发送 20 个数据包。 此外、我们使用水印中断功能、其阈值配置为 50、Baudrate 为 500kbps。

在大约 20 到 30 分钟的操作后、在 PCAN-View 中观察到总线重载/总线关闭错误。

使用 TCAN4x5x_MCU Device_Interrupts DEV_ir ={0}读取器件中断时、收到以下错误:

//@简短 DEV_IR[5]:CANERR、CAN 错误

此外、当使用 API 读取 MCAN 中断时:

TCAN4x5x_MCAN_ReadInterrupts (TCAN4x5x_MCAN_Interrupts * ir);

我们会收到以下状态:
//@IR 简述[25] BO:BUS_OFF 状态已更改


我们尝试了使用基于 GPIO 的复位序列复位芯片、但问题仍然存在。 即使在对器件执行完整的下电上电后、问题也无法解决。

使用的 GPIO 复位序列如下:

GPIO_SET_LEVEL (GPIO_NO、LVL_HIGH);
SLEEP_ms (20);//以 ms 为单位进行睡眠

//释放复位
GPIO_SET_LEVEL (GPIO_NO、LVL_LOW);
SLEEP_s (1);//以秒为单位睡眠


您能否确认这是否是正确的复位顺序?

此外、我们希望获得有关如何正确处理总线繁重和总线关闭情况以及在器件端应实施哪些恢复或错误处理机制的指导。

谢谢你。

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

    您好 Amit、

    我对您的测试设置的理解是、您正在以每 100ms 20 帧的速率将 CAN 消息从 PCAN-View 发送到 TCAN4551、并且 TCAN4551 仅接收任何 CAN 帧、但不会将任何 CAN 帧传回 PCAN-View。  这是正确的吗?

    在 CAN 中、仅当发送错误计数器 (TEC) 超过 255 时、才会进入总线关闭条件。  为了使 PCAN-View 进入 Bus Off 状态、TCAN4551 必须在从 PCAN-View 传输的消息上投射足够的错误帧、以使 PCAN-View 的 TEC 在 255 以上递增。

    如果 TCAN4551 正常工作、则可能会导致这种情况的原因是 TCAN4551 和 PCAN-View 之间的位时序配置不同。  位时间可能相同、但它们可能具有不同的采样点位置、或者根据所使用的时钟波特率分频器比率等为每位分配的时间量子不同。这可能会导致一些偶尔的采样错误。

    另一种可能是 TCAN4551 工作正常、这可能会导致错误。  一个因素是验证所用元素数量的 MRAM 分配不超过总共 2k 字节。  由于对 MRAM 地址空间的读取或写入将绕回到最后一个地址之后的 MRAM 起始位置、因此可能会发生重叠的存储器段而没有直接实现它。  例如、MRAM 地址空间为 0x8000 至 0x87FF、如果您尝试读取或写入地址 0x8800、这与读取或写入地址 0x0800 相同。

    您提到的水线位为 50、当器件只有 2k 的总内存时、该水线位非常高、在分配完整 64 字节数据空间的大多数应用中、可能不支持 50 个 RX FIFO 元素。  我不知道您的配置是什么、但如果您重叠了 MRAM 空间、您最终可能会通过覆盖配置的其他部分来破坏您的配置。

    我不知道您的时钟配置是什么以及您使用的是晶体时钟源还是单端时钟源、但如果不稳定或在正确的频率容差范围内、这也可能导致误差。  如果您使用晶体、可能需要确保时钟稳定并查看 TCAN455x 时钟优化和设计指南应用报告 (链接)

    对于 GPIO 复位问题、只需向 RST 引脚施加大于 30us 的高电平脉冲即可强制器件看到 POR 事件。  一旦 RST 引脚变为高电平、内部主内核 LDO 和晶体振荡器电路就被禁用、从而发生上电复位事件。  RST 引脚返回低电平后需要 700us 的最小延迟、以便主内核 LDO 恢复、然后才能开始 SPI 通信。  可能需要几毫秒的额外延迟才能让晶体开始振荡、因此需要确定所需的总时间。  等待一秒钟是可以的、但比需要的时间要长得多。

    您也可以通过 SPI 写入 DEVICE_RESET 位 (0x0800[2]= 1) 以启动复位事件。  这相当于 GPIO(硬件)事件。

    发生复位事件后、TCAN4551 中的所有寄存器都需要重新配置、就像这是初始上电一样。

    此致、

    Jonathan

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

    您好 Jonathan、

    感谢您的详细答复。

    请在下面找到请求的详细信息:

    1.安装确认:
    TCAN4551 当前仅配置为接收器、不会传回任何 CAN 帧。 因此、它不会主动确认帧。

    2.位时序配置:

    PCAN 视图:

    f_clock=8000000、nom_brp=1、nom_tseg1=13、nom_tseg2=2、nom_SJW=1、 NOM_SAM=0

    TCAN4551 (MCAN):

    TCAN4x5x_MCAN_TCANNomTiming Nominal_Timing_Simple ={0};
    TCANNomTiming.NominalBitRatePrescaler = 2;
    TCANNomTiming.NominalTqBeforeSamplePoint = 32;
    TCANNomTiming.NominalTqAfterSamplePoint = 8;

    3.时钟配置:
    我们使用频率为 40MHz 的振荡器

    4. MRAM 配置:


    TCAN4x5x_MRAM_Config MRAMConfiguration ={0};
    //标准 ID 元素的编号、必须有一个过滤器写入每个定义的元素的 MRAM
    MRAMConfiguration.SIDMumElements = 32;
    //扩展 ID 元素的编号、必须为定义的每个元素编写一个写入 MRAM 的过滤器
    MRAMConfiguration.XIDNumElements = 32;
    // RX0 元素数量
    MRAMConfiguration.Rx0NumElements = 50;
    // RX0 数据有效载荷大小(使用定义)
    MRAMConfiguration.Rx0ElementSize = MRAM_8_MDQ Byte_Data;
    // MRAMConfiguration.Rx0ElementSize = MRAM_64_ElementSize Byte_Data;
    // RX1 元素数量
    MRAMConfiguration.Rx1NumElements = 0;
    // RX1 数据有效载荷大小(使用定义)
    MRAMConfiguration.Rx1 元素大小= MRAM_64_ElementSize Byte_Data;
    // RX 缓冲器元素数量
    MRAMConfiguration.RxBufNumElements = 0;
    // RX 缓冲区数据有效载荷大小(使用定义)
    MRAMConfiguration.RxBufElementSize = MRAM_64_ElementSize Byte_Data;
    // TX 事件 FIFO 元素数量
    MRAMConfiguration.TxEventFIFONumElements = 0;
    // TX 缓冲区元素数量
    MRAMConfiguration.TxBufferNumElements = 0;
    // TX 缓冲区数据有效载荷大小(使用定义)
    MRAMConfiguration.TxBufferElementSize = MRAM_64_ElementSize Byte_Data;

    /*使用上述设置配置 MCAN 内核、该块中的更改是受写保护寄存器、
    *所以,这是最有道理的一次做,所以我们只解锁和锁定一次*/
    //首先使受保护的寄存器可访问
    TCAN4x5x_MCAN_EnableProtectedRegisters ();
    //启用 FD 模式和比特率切换

    此致、
    Amit

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

    您好 Amit、

    //标准 ID 元素数量、您必须为定义的每个元素将过滤器写入 MRAM
    MRAMConfiguration.SIDMumElements = 32;
    //扩展 ID 元素的编号、必须为定义的每个元素编写一个写入 MRAM 的过滤器
    MRAMConfiguration.XIDNumElements = 32;

    我看到您正在分配 32 个 SID 过滤器元素和 32 个 XID 过滤器元素。  只要创建了 32 个 SID 和 32 个 XID 过滤器元素并将它们加载到已分配的 MRAM 中、这就可以。  您不应分配比实际 SID 和 XID 过滤器更多的 SID 和 XID 过滤器元素。  这是因为当收到消息时、器件会将传入的消息与从第一个过滤器开始的所有过滤器元素进行比较、以确定消息是否与其中一个过滤器匹配。  如果它与过滤器匹配、则根据过滤器来存储它、但如果不匹配、则会根据全局过滤器配置寄存器的配置方式来存储或拒绝它。

    如果分配的过滤器元素多于过滤器、则会出现此问题、因为设备会尝试将消息过滤为已分配给过滤器元素但不包含有效过滤器的空白 MRAM 单元格。

    如果配置并加载了 32 个 SID 和 32 个 XID 过滤器元素、则不会出现问题。  但是、由于我知道您处于初步评估状态、甚至没有配置 TX 缓冲器元素、因此在我看来、您似乎不太可能已经配置了总共 64 个筛选器元素。   

    我建议仅根据需要为要加载到 MRAM 中的确切过滤器数量分配 SID 和 XID 过滤器元素。

    请确认是 TCAN4551 还是 PCAN 正在进入总线关闭状态、还是两者都进入这两者。

    此致、

    Jonathan