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.

[参考译文] J722SXH01EVM:J722S:Linux 和 RTOS 之间的 MCAN STB 引脚控制中存在冲突

Guru**** 2867690 points

Other Parts Discussed in Thread: TCA6424

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1625381/j722sxh01evm-j722s-conflict-in-mcan-stb-pin-control-between-linux-and-rtos

器件型号: J722SXH01EVM
主题中讨论的其他器件: TCA6424

我们正在使用 Linux(在 A53 上)和 RTOS(在 MCU R5F 上)在 J722S EVM 上开发一个系统。

【问题】
RTOS 控制 STB  MCAN (CAN-FD) 收发器的(待机)引脚、并 Low 通过 GPIO 将其设置为。 但是、在 Linux 启动并 RPMsg 准备就绪后、相应的 GPIO 引脚会意外切换到 High、从而停止 CAN 通信。
我们不打算在 Linux 端使用这个 STB 引脚;它应完全由 RTOS 控制。

【调查】
使用该 gpioinfo 命令、我们确认 line 17 的 gpiochip0(对应于) MCAN0_STB正在被“standby"占用“占用、并被 output high Linux 内核配置为。

 
gpiochip0 - 24 lines:
    ...
    line  17:       "MCAN0_STB"             output consumer="standby"

此引脚位于tca6424上的 I2C GPIO 扩展器 () 上 i2c@20000000

【我们尝试过的】
为了从 Linux 端禁用此引脚控制、我们在中尝试了几个设备树覆盖修改 k3-j722s-vision-apps.dts。 但是、这些方法都不会改变 gpioinfo 输出、并且问题仍然存在。

  1. 覆盖 pinctrl-0  mcu_mcan0 节点的属性以排除 STB 引脚定义。

  2.  standby-gpios  mcu_mcan0 使用从节点中删除属性 /delete-property/ standby-gpios;

  3. 将 status  mcu_mcan0 节点的设置为 "disabled"

即使将节点的状态设置为后 "disabled"、PIN 仍将作为“待机“使用。 这使我们认为问题可能源于更基本的内核行为、而这种行为无法通过简单的设备树叠加来解决。

【问题】
您能否提供正式的、推荐的方法来防止 Linux 内核控制 MCAN0_STB 引脚?
我们应如何修改器件树、内核配置或驱动程序源代码、以确保 RTOS 提供专用的 GPIO 控制?


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

    root@j722s-evm:/opt/vision_apps gpioinfo
    gpiochip0 - 24 行:
    第 0 行:“TRC_MUX_SEL"输出“输出消费者=“TRC_MUX_SEL"</s>“
    线路 1:“OSPI/ONAND_MUX_SEL"输入“输入
    第 2 行:“McASP1_FET_SEL"输出“输出消费者=“McASP1_FET_SEL"</s>“
    第 3 行:“ctrl_PM_I2C_OE#"输入“输入
    第 4 行:“CSI_VIO_SEL"输入“输入
    第 5 行:“USB2.0_MUX_SEL"输出“输出低电平有效耗电元件=“P05-HOG"</s>“
    线路 6:“CSI01_MUX_SEL_2"输入“输入
    第 7 行:“CSI23_MUX_SEL_2"输入“输入
    第 8 行:“LMK1_OE1"输入“输入
    第 9 行:“LMK1_OE0"输入“输入
    线路 10:“LMK2_OE0"输入“输入
    线路 11:“LMK2_OE1"输入“输入
    线路 12:“GPIO_RGMII1_RST#"输入“输入
    第 13 行:“GPIO_AUD_RSTn"输出“输出消费者=“GPIO_AUD_RSTn"</s>“
    第 14 行:“GPIO_eMMC_RSTn"输入“输入
    第 15 行:“GPIO_uSD_PWR_EN"输出“输出消费者=“regulator-mmc1"</s>“
    第 16 行:“USER_LED2"输入“输入
    第 17 行:“MCAN0_STB"输出“输出消费者=“待机“
    第 18 行:“PCIe0_1L_RC_RSTz"输出“输出消费者=“reset"</s>“
    第 19 行:“PCIe0_1L_PRSNT#"输入“输入
    第 20 行:“ENET1_EXP_SPARE2"输入“输入
    第 21 行:“ENET1_EXP_PWRDN"输入“输入
    第 22 行:“PD_I2ENET1_I2CMUX_SELC_IRQ"输入“输入
    第 23 行:“ENET1_EXP_RESETZ"输入“输入

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

    尊敬的 Masao-san:

    如果未从 Linux 访问任何 MCAN、请从 DTS 中删除 MCAN 相关节点。 您可以参考此提交来确定与哪些节点相关: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/commit/arch/arm64/boot/dts/ti/k3-j722s-evm.dts?h=ti-linux-6.12.y&id=46ca5c7207703b36025228a6b7a29198a1539d10

    对于使用 MCAN0_STB 的情况、有针对性的注释是:Transceiver2 节点从扩展器消耗 GPIO 引脚。 此引脚由 MAIN_mcan0 而不是 MCU_mcan0 使用。 具体而言、以下行:

    • STANDBY-GPIO =<&exp1 17 GPIO_ACTIVE_HIGH>

    此致、

    Takuma

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

    你好、Takuma-San。

    根据提供的信息、
    我们修改了设置、并确认了第 17 行:“MCAN0_STB"成为“成为输入。 在这种状态下、
    当我们在 RTOS 中将相应的 GPIO 设置为低电平时、它会在 Linux 启动后更新为高电平。

    但是、如果我们在 Linux 引导后在 RTOS 中将其更改为低电平、则没有问题。

    因此、我们怀疑可能有一些控制机制会将 GPIO 设置为高电平、即使第 17 行:“MCAN0_STB"处于“处于输入状态也是如此。
    请就我们在这方面应调查的要点或观点提供指导。

    此致、
    Takayama 正夫


    e2e.ti.com/.../_1030_DT_2D8A9A5B1130_Linux_6E30_MCAN_2171B9521653_html.htm

    root@j722s-evm:/opt/vision_apps gpioinfo
    gpiochip0 - 24 行:
    第 0 行:“TRC_MUX_SEL"输出“输出消费者=“TRC_MUX_SEL"</s>“
    线路 1:“OSPI/ONAND_MUX_SEL"输入“输入
    第 2 行:“McASP1_FET_SEL"输出“输出消费者=“McASP1_FET_SEL"</s>“
    第 3 行:“ctrl_PM_I2C_OE#"输入“输入
    第 4 行:“CSI_VIO_SEL"输入“输入
    第 5 行:“USB2.0_MUX_SEL"输出“输出低电平有效耗电元件=“P05-HOG"</s>“
    线路 6:“CSI01_MUX_SEL_2"输入“输入
    第 7 行:“CSI23_MUX_SEL_2"输入“输入
    第 8 行:“LMK1_OE1"输入“输入
    第 9 行:“LMK1_OE0"输入“输入
    线路 10:“LMK2_OE0"输入“输入
    线路 11:“LMK2_OE1"输入“输入
    线路 12:“GPIO_RGMII1_RST#"输入“输入
    第 13 行:“GPIO_AUD_RSTn"输出“输出消费者=“GPIO_AUD_RSTn"</s>“
    第 14 行:“GPIO_eMMC_RSTn"输入“输入
    第 15 行:“GPIO_uSD_PWR_EN"输出“输出消费者=“regulator-mmc1"</s>“
    第 16 行:“USER_LED2"输入“输入
    第 17 行:“MCAN0_STB"输入“输入
    第 18 行:“PCIe0_1L_RC_RSTz"输出“输出消费者=“reset"</s>“
    第 19 行:“PCIe0_1L_PRSNT#"输入“输入
    第 20 行:“ENET1_EXP_SPARE2"输入“输入
    第 21 行:“ENET1_EXP_PWRDN"输入“输入
    第 22 行:“PD_I2ENET1_I2CMUX_SELC_IRQ"输入“输入
    第 23 行:“ENET1_EXP_RESETZ"输入“输入

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

    尊敬的 Masao-san:

    客户能否从器件树中移除整个 Transceiver2 节点和 mcan 节点?

    此致、

    Takuma

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

    你好、Takuma-San。

    在删除中的设置 diff.txt 并进行检查后、我发现系统无法再启动。
    是否有任何不应删除的设置?

    此致、
    Takayama 正夫
    e2e.ti.com/.../3005.console.loge2e.ti.com/.../3005.diff.txt

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

    尊敬的 Masao-san:

    删除 MCAN 不应导致引导时间问题。

    根据错误日志“Failed on FDT_OVERLAGE_APPLY ():FDT_ERR_NOTFOUND“、似乎 U-Boot 无法加载编译后的 DTB 器件树文件。 我建议在构建器件树时检查构建日志、并检查 dtb 文件是否已成功刷写。

    此致、

    Takuma

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

    你好、Takuma-San。

    感谢您的反馈。

    在重新组织并继续执行任务后,我能够保持  MCAN0_STB  AT  LO 。 感谢您的合作。

    在第 17 行中、单独的“MCAN0_STB"输入“输入导致其变为  你(们)好  静电放电。 通过额外禁用标有★的设置、我能够解决该问题。 我现在将关闭此主题。

    can-phy0 {
        compatible = "ti,tcan1042";
        #phy-cells = <0x00>;
        max-bitrate = <0x4c4b40>;
        pinctrl-names = "default";
        pinctrl-0 = <0x72>;
        standby-gpios = <0x73 0x0c 0x0>; // ★
        phandle = <0x0f>;
    };

    再次感谢您的帮助。

    此致、
    Takayama 正夫