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.

[参考译文] TCAN4550:使用 TX 缓冲器发送消息

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1249204/tcan4550-sending-message-using-tx-buffer

器件型号:TCAN4550

您好!

我正在尝试使用外部石英40MHz 从 TCAN 4550发送消息。 要发送的消息是具有扩展 ID 的 CAN2.0b。

问题是、当我尝试使用 TX 缓冲器0发送消息时、CAN 上没有任何内容正在进行、我看到消息仍处于挂起状态(通过读取 TXBRP)

收发器配置步骤如下所示:

1/清除状态寄存器0x000CU (写入0xFFFFFFFF)

2/仅激活 CANDOM 和 CANSLNT (0x0830寄存器)

3/如果 PWRON 中断、则将其清除(在0x0820寄存器处)

4/解锁受保护的寄存器

5/停用 FD 运行(FDOE 和 BRSE = 0x00)

6/配置标称时序,我想要500kbit 与81.3% SP :

   您能为本部分提供帮助吗? 我认为我对40Mhz 晶体是正确的:

        NBRP = 0x0001U /* 0x02 = 0x01、因为收发器解释(val + 1)*/

        NTSEG1 = 0x1EU; /* 0x20 = 0x1E、因为-1用于 SYNC 位和收发器解释(val + 1)*/

        NTSEG2 = 0x07U; /* 0x08 = 0x07、因为收发器解释(val + 1)*/

        NSJW  = 0x00U;   /* 0x01但0x00、因为收发器解释(val + 1)*/

7/即使未使用、也要配置数据位时序

8/配置全局过滤器(拒绝所有远程帧、接受所有其他帧用于测试目的)

9/配置 MRAM:

  • 清除所有 MRAM (用0填充)
  • 0x8000:ID 过滤器接受
  • 0x8100:RX FIFO
  • 0x8200:RX 缓冲区
  • 0x8300:TX FIFO
  • 0x8400:TX 缓冲器

10/锁定保护的寄存器

11/激活中断 RF0N_EN 以接收新消息

12/激活线路中断:EINT0 = 0x01

13/设置时钟基准(40MHz)

14/设置正常模式

15/在 TX 缓冲器地址上写入我的 CAN 消息

16/写入 TXBAR 0x01

我做错了什么?

谢谢!

凯文

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

    尊敬的 Kevin:

    标称位定时设置看起来正常。  此外、通常您的序列看起来不错、

    您需要为我提供实际的 MRAM 配置寄存器值以及所需的各种类型缓冲区和 FIFO 元素数量、以验证每个元素类型是否具有正确的起始地址、并且没有重叠的段。

    《TCAN45xx 软件用户指南》中提供了一些 您可以尝试复制的示例。  

    问题是、当我尝试使用 TX 缓冲区0发送消息时、CAN 上没有任何消息、我看到该消息仍处于挂起状态(通过读取 TXBRP)

    您能解释一下" CAN 上没有什么"是什么意思吗?  您是否用示波器观察 CANH 和 CANL 信号、而未发现任何活动?

    总线上是否有其他 CAN 节点可以确认您尝试发送的消息?  如果没有第二个 CAN 节点确认消息、则消息将始终保持"待定"状态、因为没有其他节点确认已接收到发送的消息。

    此致、

    乔纳森

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

    Jonathan、您好!

    感谢您的快速回复。 是的、我在总线上有一个正在采集 CAN 消息的 PCAN。 我说 CAN 没有开启的意思是、我无法使用我的 PCAN 看到任何帧。

    以下是我的 MRAM 配置:

    XIDFC (0x1088) :

    • FLSEA:0x0000 (用于0x8000)
    • lse:0x01 (仅1个滤波器)

      @0x8000写: 0x3FFFFFFF

    • EFEC : 3b001(存储在 Rx FIFO 0中)
    • EFID1 :0x1FFFFFF

       @0x8004写: 0x8000000

    •  EFT:2B10 (经典过滤器)
    •  EFID2:0x00000000

       是否可以确认此配置应接受所有扩展传入帧?

    XIDM (0x1090):

    • eIDM:0x1FFFFFF

            设置此寄存器与上述方法(扩展 ID 过滤器地址处的 MRAM 配置)有何区别?

    RXF0C (0x10A0):

    • F0OM:0-FIFO 0阻塞模式
    • F0WM :0
    • F0S :0x04 (4个单元)
    • F0SA:0x0100 (0x8100)

    RXBC (0x10AC):

    • RBSA:0x0200 (适用于0x8200)

    RXESC (0x10BC):

    • RBDS:0x0 (8字节数据字段)
    • F0DS:0x0 (8字节数据字段)

    TXBESC (0x10C8)

    • TBDS:0x0 (8字节数据字段)

    TXEFC (0x10F0):

    • EFWM:0x00
    • EFS:0x04
    • EFSA:0x0300 (对于0x8300)

    TXBC (0x10C0):

    • TFQM:1 (队列)
    • TFQS:4个 Tx 缓冲器
    • NDTB:0
    • TBSA:0x0400 (对于0x8400)

    我认为这种配置不可能有任何重叠。

    谢谢!

    凯文

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

    尊敬的 Kevin:

    您能否确认此配置应接受所有扩展传入帧?

    似乎要接受 ID 介于0x00000000和0x1FFFFFF 之间的所有消息。  是这样吗?  如果是、我认为您想要使用范围滤波器、而不是经典滤波器、因为经典滤波器将执行逻辑与、使用 ID 和掩码来检查每个位是否有匹配的值。  因此、通常使用传统过滤器来挑选特定的消息 ID。

    如果要接受所有帧、只需设置全局滤波器配置(GFC 寄存器0x1080)中的接受不匹配帧标准/扩展寄存器字段、即可接受帧进入 RX FIFO 0或 RX FIFO 1。

     设置此寄存器和上述方法(扩展 ID 筛选器地址处的 MRAM 配置)有何区别?

    EFID2域具有不同的含义、具体取决于 EFEC 域的配置方式。  TCAN4550-Q1使用博世开发的 MCAN IP。  有关 MCAN 功能的其他信息、请参阅 MCAN 用户手册。  请参阅第2.4.6节

    我认为此配置不可能有任何重叠。

    我同意此 MRAM 配置不应出现重叠部分。

    您是否还可以共享正在尝试传输的 TX 消息缓冲区内容? 可能存在格式问题。

    您是否还可以通过 SPI 读取来验证所有配置寄存器是否已正确设置为您的预期值?  例如、您需要在控制寄存器(0x1018)中将 INIT 和 CCE 位都设置为"1"、以设置写保护 MCAN 位。  如果仅设置了 INIT 位、则在您写入 MCAN 配置寄存器时不会设置它们。

    您是否在配置期间看到可能指示存在错误的任何中断或状态位被设置?  此外、您可以读回 MODE_SEL 字段以确保仍处于正常模式吗?

    除非控制寄存器(0x1018)中设置了禁用自动重发(DAR)位、否则一旦将 TX 缓冲区添加请求(TXBAR)寄存器中的 TX 缓冲区位置位、器件就应反复尝试发送该报文、直至其得到成功应答。 或者接收到太多 TX 错误并进入总线关闭状态。

    此致、

    乔纳森