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.

[参考译文] SK-AM64B:即使调整了 DTS 配置、CAN-Tx 也不会输出信号

Guru**** 2468610 points
Other Parts Discussed in Thread: SK-AM64B

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1466419/sk-am64b-can-tx-does-not-output-a-signal-despite-adjusted-dts-configuration

器件型号:SK-AM64B

工具与软件:

大家好!

我使用的是 SK-AM64B 板、并尝试使 CAN 接口正常运行。 我的目标是在 Tx 引脚上输出一个信号、以实现与 CAN 收发器的通信。 但是、即使对器件树源(DTS)进行多次调整、也无法在 Tx 引脚上观察到任何信号。 以下是我目前的情况和迄今为止所采取的步骤:


问题:

  • 发送 CAN 消息(cansend)时、控制器的 Tx 引脚(SOC_MAIN_UART5_TXD)上不会生成信号。
  • 控制器表现出不同的行为、具体取决于 Tx 和 Rx 引脚是否连接到外部器件(例如示波器)。

硬件和软件设置:

  • 电路板: SK-AM64B
  • 软件: 运行 TI 默认 Linux 映像tisdk-default-image-am64xx-evm-10.01.10.04.rootfs.wic.xz
  • 连接:
    • TX 和/或 Rx 直接连接到示波器(未使用收发器)
    • GND 已正确连接
  • 目标: 直接测量 Tx 信号、无需使用收发器。

采取的步骤和观察:

  1. DTS 调整:

    • 我已经调整了器件树中的 CAN 节点。
    • 在中k3-am64-main.dtsi
      main_mcan1: can@20711000 {
          compatible = "bosch,m_can";
          reg = <0x00 0x20711000 0x00 0x200>,
                <0x00 0x20718000 0x00 0x8000>;
          reg-names = "m_can", "message_ram";
          power-domains = <&k3_pds 99 TI_SCI_PD_EXCLUSIVE>;
          clocks = <&k3_clks 99 5>, <&k3_clks 99 0>;
          clock-names = "hclk", "cclk";
          interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>,
                       <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
          interrupt-names = "int0", "int1";
          bosch,mram-cfg = <0x0 128 64 64 64 64 32 32>;
          pinctrl-names = "default";
          pinctrl-0 = <&main_mcan1_pins_default>; /* Pinmux settings */
          status = "okay";
      };
      
    • 在中k3-am642-sk.dts
      Pinmux 设置如下所添加:
      mymcan1_pins_default: mymcan1-default-pins {
          pinctrl-single,pins = <
              AM64X_IOPAD(0x025c, PIN_INPUT, 0) /* (D17) MCAN1_RX */
              AM64X_IOPAD(0x0258, PIN_OUTPUT, 0) /* (C17) MCAN1_TX */
          >;
      };
      
  2. CAN 接口配置:
    执行以下命令来配置和测试 CAN 接口:

    ip link set dev main_mcan1 type can bitrate 500000 loopback off
    ip link set up dev main_mcan1
    cansend main_mcan1 123#AABBCCDD
    

  3. 环回测试:

    • 内部环回: 工作正常(已发送的 CAN 消息按预期接收)。
    • 外部硬件环回: 当 Tx 直接连接到 Rx 时、在总线上观察方波信号、指示发送和接收成功。

  4. 示波器观察结果:

    • 案例1:TX 已连接至示波器、Rx 未连接:
      Tx 引脚保持在~0.18V、并且在消息传输期间不观察到任何信号(cansend)。 如果从示波器上断开 Tx 连接、控制器进入总线关闭状态。
    • 案例2:Rx 连接到示波器、Tx 未连接:
      Rx 引脚始终如预期的那样为高电平。 断开 Rx 与示波器的连接不会触发总线关闭状态。
    • 案例3:Tx 和 Rx 均连接至示波器:
      在信息传输期间、总线上会出现方波信号。 不过、在初始检查时、波形与预期的 CAN 消息不匹配。
    • 情形4:Tx 和 Rx 均未连接:
      发送 CAN 消息会立即导致控制器进入总线关闭状态。

  5. 错误和调试尝试:

    • 已验证引脚多路复用是否设置正确、并且不存在冲突。
    • 观察到内核日志dmesg()、该日志在初始化期间没有显示错误、但控制器在引脚断开连接时报告总线关闭状态。
    • 已检查电气问题或干扰、但未发现异常。
    • 参考了 论坛主题 并实施了类似的更改。

问题:

为什么发送 CAN 消息时、尽管存在配置并且在某些情况下缺少总线关闭状态、Tx 引脚为什么保持非活动状态?
为什么方波仅在连接 Tx 和 Rx 时出现、以及它为什么与预期的 CAN 消息不匹配?
如何在不使用收发器的情况下验证 Tx 引脚的输出、是否需要额外的配置或调试才能实现这一点?

提前感谢您的支持!

此致、
Albert Hösl è re

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

    Albert  

    似乎我们错过了这个问题、请给我们几天时间返回。  

     感谢您为您的提问所做的详细分析和总结。

    此致

    Mukul  

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

    您好!

    我正在尝试重新创造这个条件。 与 CAN 驱动器开发人员讨论了另一个问题、我在 CAN 节点定义中看不到收发器列出。 您可能需要查看 AM64 DTS 的 gp EVM 示例:

    https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/arch/arm64/boot/dts/ti/k3-am642-evm.dts

    此致、

    Schuyler

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

    您好!

    首先,感谢您的反馈。 下面是我们进度和最近测试的简要更新:


    1. DTS 修改
    我更新了电路板的器件树("k3‑am642-sk.dts")、采用了完全符合"k3-am642-evm.dts"中规定的收发器节点。 唯一的 更改是添加收发器节点并在主 CAN 节点中引用它:

    transceiver1: can-phy0 {
        compatible = "ti,tcan1042";
        #phy-cells = <0>;
        max-bitrate = <5000000>;
        // standby-gpios = <&exp1 8 GPIO_ACTIVE_HIGH>;
    };
    
    main_mcan1: can@20711000 {
        compatible = "bosch,m_can";
        reg = <0x00 0x20711000 0x00 0x200>,
              <0x00 0x20718000 0x00 0x8000>;
        reg-names = "m_can", "message_ram";
        power-domains = <&k3_pds 99 TI_SCI_PD_EXCLUSIVE>;
        clocks = <&k3_clks 99 5>, <&k3_clks 99 0>;
        clock-names = "hclk", "cclk";
        interrupts = <GIC_SPI 158 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-names = "int0", "int1";
        bosch,mram-cfg = <0x0 128 64 64 64 64 32 32>;
        pinctrl-names = "default";
        pinctrl-0 = <&main_mcan1_pins_default>;
        phys = <&transceiver1>;
        status = "okay";
    };
    


    2.在没有外部收发器的情况下进行测试
    我首先在没有外部收发器的情况下测试了 CAN 接口。 和以前一样、使用"关闭"时、在 Tx 引脚上未观察到信号、控制器立即进入总线关闭状态。 (之前的行为保持不变。)


    3.使用外部收发器进行测试
    接下来、我将 TCAN1042HVDR 连接到电路板。 我测量了 CANH 和 CANL 之间的电压、并且持续观察到大约2.5V 、这证实了收发器已启用。 但是、当发送 CAN 消息时、Tx 引脚上不出现信号、控制器再次立即关闭总线。


    所有硬件连接(布线、端接)和 DTS 配置(直接采用"k3-am642-evm.dts ")都已经过验证。 但主要问题仍然存在:传输期间无法观察到 Tx 信号。

    如有任何进一步的见解或建议来诊断 CAN 控制器不驱动 Tx 线路、我将不胜感激。

    此致、

    Albert Hösl è re