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-Q1:接收和发送问题。

Guru**** 2798555 points

Other Parts Discussed in Thread: TCAN4550, TCAN4550-Q1

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

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1126696/tcan4550-q1-receive-and-send-problems

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

尊敬的 TI 团队:
 我在调试 Tcan4550发送时遇到问题。 发送数据帧后 、Tcan4550将始终发送该帧。 这是正常的吗? 它是否打开某种模式? 如何关闭?
 我尝试打开一次性模式使用命令"canconfig CAN0 ctrlmode 一次性打开"、但它不起作用、甚至已发送。  

 没有第二个节点连接到 CAN 总线。

 在这种情况下、如何确保我的驱动程序正常?

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

    您好、Arvin、

    这种行为是正常的。 CAN 控制器期望它们在总线上传输的每条消息至少被一个其它有效的 CAN 控制器确认。 如果未接收到确认、则假定消息丢失(可能来自尚未完全唤醒的节点)、因此通常的做法是在确认消息被接收之前重新传输。 因此、TCAN4550的默认行为是重新发送任何会导致 ACK 错误的 CAN 帧。  

    为了改变这个运行状态并且不管 ACK 错误状态如何、只发送一次帧、控制寄存器(地址 h1018 [6])的 DAR 字段可被设定为禁用自动重发送。 在写入 DAR 字段之前、请务必通过向 INIT 和 CCE 字段(地址 h1018[0:1])写入1来解锁受保护的寄存器字段。  

    让我知道这是否会对您的测试产生预期的影响。

    此致、
    Eric Schott

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

    您好 Eric:
    感谢你的答复。

    我使用您的 Linux 驱动程序代码。

    m_CAN.c
    静态空 m_CAN_CHIP_CONFIG (struct net_device *dev){
    (笑声)

    /*禁用自动重传(所有版本)*/
    ++cdev->can.ctrlmode = cdev->can.ctrlmode | can_CTRLMODE_one_shot;
    if (cdev->can.ctrlmode & can_CTRLMODE_one_shot)
    cccr |= CCCR_DAR;
    (笑声)

    对于上述修改、我检查了寄存器以确认设置成功、但我使用 CAN 分析仪观察未发送数据。

    如果我删除此修改并发送数据帧、我可以看到 tcan4550始终在发送

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

    Arvin、

    发送 CAN 帧时可能会出现另一个错误。 您能否读取寄存器0x1040以查看最后一个发送错误代码?

    此致、

    Eric Hackett

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

    root@linux-perf:~#./cansend CAN0 -I 12 0x11 0x22 0x33
    接口= CAN0、系列= 29、类型= 3、PROTO= 1
    [4][59.399147][TCAN]m_CAN_START_Xmit[1814]:启动。
    6>[59.399193] tcan4x5x spi6.0 CAN0:TX 数据包(data_len = 16):
    <4>[59.399205] 0c00 0000 0300 0000
    <4>[59.399240] 1122 3300 0000 0000
    <4>[59.399272]
    [4][59.399320][tCAN]m_CAN_START_Xmit[184]:结束
    [4][59.399369][tCAN]m_CAN_TX_handler[1666]:启动。
    6>[59.399387] tcan4x5x spi6.0 CAN0:TX 数据包(data_len = 16):
    <4>[59.399395] 0c00 0000 0300 0000
    <4>[59.399427] 1122 3300 0000 0000
    <4>[59.399459]
    [4][59.399471][tCAN]m_CAN_TX_handler[1673]:CF->CAN_id=0x0000000c。
    [4][59.399483][tCAN]m_CAN_TX_handler[1681]:CF->CAN_id=0x0000000c。
    [4][59.401471][tCAN]m_CAN_TX_handler [1759]:fifo_header.id=0x00300000、fifo_header.dlc=0x00830000。
    [4][59.401842][tCAN]m_CAN_TX_handler[1766]:CF->DATA[0]= 17。
    [4][59.401858][tCAN]m_CAN_TX_handler [1767]:CF->DATA[1]=34。
    [4][59.401870][tCAN]m_CAN_TX_handler [1768]:CF->DATA[2]=51。
    [4][59.401881][tCAN]m_CAN_TX_handler [1769]:CF->DATA[3]= 0。
    [4][59.402752][tCAN]m_CAN_TX_handler[1791]:结束

    root@linux-perf:~#
    root@linux-perf:~# echo 1040 >/sys/kernel/debug/tcan/tcan4x5x_reg
    root@linux-perf:~# cat /sys/kernel/debug/tcan/tcan4x5x_reg
    0x00010008
    root@linux-perf:~#

    寄存器0x1040的值为0x00010008。

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

    Arvin、

    根据0x1040的读数、似乎发生了一些发送错误、您还能得到寄存器0x1044的值吗? 这将为我们提供发生的错误类型。

    此致、

    Eric Hackett  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="119655" URL" URL"~/support/interface-group/interface/f/interface-forum/1126696/tcan4550-Q1-receive-and-send-problems/4182581#4182581"] 0x1044

    0x1044  ->   0x0000070b

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

    Arvin、

    这表明发生了 ACK 错误。 正如 Eric Schott 前面所述、由于没有其他 CAN 节点确认来自 TCAN4550-Q1的消息、因此会发生 Ack 错误。 当您禁用 DAR 时、分析仪是否根本看不到任何内容? 还是因为没有应答而直接发出消息? 是否有办法将分析仪设置为发送 ACK 本身、或者它是否无法传输消息?

    此致、

    Eric Hackett  

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

    您好 Eric:
    cccr |= CCCR_DAR;

    通常情况下、应发出一帧数据。 对吧?

    但在该模式下、我在 CAN 逻辑分析仪上看不到任何信息。

    使用示波器也未在 CANL 和 CANH 上找到任何波形。

    该器件仅连接到 CAN 逻辑分析仪、我不知道逻辑分析仪是否可以视为节点?

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

    您好、Arvin、

    如果示波器、逻辑分析仪或大多数其他标准测试设备不包含将连接到 CANH 和 CANL 线路以接收和确认 CAN 消息的物理 CAN 收发器和 CAN 控制器、则不会将其视为节点。  CAN 总线分析仪工具种类繁多、它们通常是基于 USB 的 CAN 工具、具有内部 CAN 控制器和 MCU、可将 CAN 数据传递到运行软件的计算机。  通过网络搜索 CAN 总线分析仪、您可以找到各种选项。

    另一种方法是在总线上放置一个基于 TCAN4550的第二块板来接收数据、然后您可以使用传统的示波器和逻辑分析仪在数据在电路板之间传输时对其进行监控。

    如果您没有第二个电路板、最佳选择是通过将 TEST.LBCK 位设置为"1"、将 CCCR.MON 位设置为"0"来将电路板配置为外部回路模式。  在此模式下、器件会将 CAN 消息广播到总线、以便您可以使用示波器或逻辑分析仪查看该消息、并将消息数据循环回 RX 输入、以便在 RX FIFO 或专用缓冲器中查看传输的消息。  但是、这是一种测试模式、因此器件将忽略确认(ACK)错误、因为总线上没有其他器件确认消息。

    下图取自《Bosch M_CAN 用户指南》、显示了如何配置内部和外部环回测试模式。  您可以在此找到完整指南(链接)。

    将禁用自动变速器(DAR)位设置为"1"只会阻止器件在第一次传输尝试没有确认的情况下多次发送消息。 但是、当您处于外部回路模式时、不需要设置 DAR 位。  如果未将 TEST.LBCK 位设置为"1"、并且在示波器或逻辑分析仪上看不到活动、则可能存在触发、水平刻度和/或垂直刻度问题。 CAN 消息只会传输一次、如果设备设置不正确、很容易错过。

    此致、

    Jonathan

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

    好的、感谢您的快速回答。
    现在内部回送测试和外部回送测试都正常。 我将在将来有另一个节点器件时执行测试。 可以先关闭此案例。

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

    不用客气。  如果您有任何其他问题、请告知我们。

    此致、

    Jonathan