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:TCAN4550 MRAM Tx 缓冲器 FIFO/队列

Guru**** 2451110 points
Other Parts Discussed in Thread: TCAN4550EVM, TCAN4550

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1550243/tcan4550evm-tcan4550-mram-tx-buffer-fifo-queue

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

工具/软件:

我对 TCAN4550EVM 有疑问。

我将通过 SPI 接口连接 Raspberry Pi 和 TCAN4550 EVM。

我的目标是测量通过 TCAN4550 的 CAN 总线 DB-9 线束连接器从 Raspberry Pi 传输的 CAN 帧数据。

我已经基于 TCAN4550 样片程序创建了一个程序、旨在从 TCAN4550 的 TxBuffer 传输数据、但并没有成功。

我可以从 Raspberry Pi 读取和写入 TCAN4550 EVM 寄存器。

我是根据 TCAN4550 软件用户手册写入 SPI、但我似乎无法从寄存器 0x10C4 检索空闲电平;我得到的值为 0。

根据数据表、这是由于 Tx 被配置为队列(寄存器 TXBC.TFQM =‘1')导致的。

使用 AHB_READ_32 () 读取 TXBC 返回 0x4a000174。 由于 0x4a000174 指示 TXBC.TFQM=1、因此我相信 Tx 已配置为队列。

MRAM 配置似乎是使用 TCAN4x5x_MRAM_Configure() 设置的、但我找不到在示例程序中将 Tx 配置为 FIFO 的方法。

如何将 Tx 配置为 FIFO 运行?

 

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

    以下是一些其他问题。

    我已经检查了寄存器并获得了以下值:

    0x0824:0x10000000
    0x1044:0x0000070f

    似乎发生了与数据阶段相关的错误。

    如果您能确定此错误的原因、我将感谢您的答复。

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

    野村山你好

    您可能需要修改 TCAN4550.c 文件中的 TCAN4x5x_MRAM_Configure() 函数、以通过设置 TFQM 位删除将其设置为队列模式的行。  默认情况下、器件使用 FIFO 模式。

        // TX Buffer
        MRAMValue = MRAMConfig->TxBufferNumElements;
        if (MRAMValue > 32)
            MRAMValue = 32;
    
    
        registerValue = 0;
        if (MRAMValue > 0)
        {
            registerValue = ((uint32_t)(MRAMValue) << 24) | ((uint32_t)startAddress);
            registerValue |= REG_BITS_MCAN_TXBC_TFQM;               // Sets TFQM to 1 (Queue mode), and sets all registers to be generic non-dedicated buffers.
        }
        startAddress += (((uint32_t)TCAN4x5x_MCAN_TXRXESC_DataByteValue((uint8_t)MRAMConfig->TxBufferElementSize) + 8) * (uint16_t)MRAMValue);
        AHB_WRITE_32(REG_MCAN_TXBC, registerValue);

    遗憾的是、协议状态寄存器会在读取后复位、并且您共享的返回值看起来不是错误发生后第一次读取后的返回值。  DLEC 和 LEC 值均为“7",“,这、这意味着自上次读取以来没有变化。  

    一般而言、数据段中的协议错误来自总线上节点之间导致采样错误的不同位时序配置。  借助使用比特率切换的 CAN FD、可在消息标头中 BRS 位的采样点切换到更快的数据比特率。  因此、所有器件都需要具有相同的采样点和位时序配置、以便同时在所有器件上切换到更快的比特率。   如果有任何不同、则器件可能会在不同时间对该位进行采样、从而导致错误。

    您可能需要验证总线上所有节点的数据位时序设置是否相同。

    此致、

    Jonathan

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

    您好 Jonathan、

    感谢您的回答。

    按照您的建议禁用代码后、我确认传输成功。

    此致、

    野村市