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.

[参考译文] AM62A7:标题:AM62A McSPI0 - D0 没有数据、D1 正常工作。 pindir 属性实际上是否有效?

Guru**** 2979400 points

Other Parts Discussed in Thread: AM62A7

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1655838/am62a7-title-am62a-mcspi0---d0-has-no-data-d1-works-does-pindir-property-actually-work

器件型号: AM62A7

我使用 AM62A7(定制电路板)、McSPI0 (spi@20100000) 连接到 SPI 面板。

问题: 我的面板的数据线连接到 SPI0_D0。 逻辑分析仪显示 CLK 和 CS 切换正常、但 D0 保持为 0—根本没有数据。 当我将同一根导线移至 SPI0_D1 相反位置时、会立即显示正确的 SPI 数据。

我尝试了什么: 添加 ti,pindir-d0-out-d1-in; 到 SPI0 节点,希望它会使 D0 携带数据。 在此之后:

  • D0 仍然没有数据
  • D1(以前工作过)也停止工作

我移除了属性,D1 恢复工作。

问题:

  1. 在 AM62A 上、McSPI 的 D0/D1 方向在硬件中实际上是固定的(D0 =仅输入、D1 =仅输出)、无法从软件更改?
  2. 如果是、为什么添加 ti,pindir-d0-out-d1-in 断点 D1、即使它应该是不可用的?
  3. 将导线移动到 D1(或进行 PCB 返工)是这里的唯一真正解决方法吗?

感谢您的帮助。



SPI@20100000{
            兼容=“ti、am654-mcspi\0ti、OMAP4-mcspi“;
            REG =<0x00 0x20100000 0x00 0x400>;
            中断=<0x00 0xac 0x04>;
            #address-cells =<0x01>;
            #size-cells =<0x00>;
            电源域=<0x03 0x8d 0x01>;
            时钟=<0x02 0x8d 0x00>;
            状态=“正常“;
            pinctrl-names =“default“;
            pinctrl-0 =<0x27 0x56>;
            TI、pindir-d0-out-D1-in;

            面板@0{
                兼容=“inanbo、t28cp45tn89-v17“;
                REG =<0x00>;
                电源=<0x28>;
                背光=<0x29>;
                DC-GPIO =<0x23 0x06 0x00>;
                复位 GPIO =<0x23 0x07 0x01>;
                旋转=<0x00>;
                SPI-max-frequency =<0xf4240>;
                SPI-Rx-BUS-WIDTH =<0x01>;

                端口{

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

    尊敬的 Sajid:
    您能检查 pinctrl 设置吗? 正确吗?
    您可以尝试使用以下行中的内容:

    pinctrl_spi0: main-spi0-default-pins {
    	pinctrl-single,pins = <
    		AM62PX_IOPAD(0x01bc, PIN_OUTPUT, 0) /* (B21) SPI0_CLK */
    		AM62PX_IOPAD(0x01b4, PIN_OUTPUT, 0) /* (D20) SPI0_CS0 */
    		AM62PX_IOPAD(0x01c0, PIN_OUTPUT, 0) /* (B20) SPI0_D0 */
    		AM62PX_IOPAD(0x01c4, PIN_INPUT, 0) /* (C21) SPI0_D1 */
    	>;
    };
    
    &main_spi0 {
    	pinctrl-names = "default";
    	pinctrl-0 = <&pinctrl_spi0>;
    	ti,pindir-d0-out-d1-in;
    	status = "okay";
    };

    引脚地址可能错误、请查看 AM62A 数据表、并改用 AM62AX_IOPAD。

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

    您好、

    感谢您的建议。 这是我在测试后发现的结果。

    我当前的 pinctrl 已符合您的建议:

    main-spi0-default-pins {
            pinctrl-single,pins = <0x1b4 0x10000 0x1bc 0x54000 0x1c0 0x10000 0x1c4 0x54000>;
            phandle = <0x27>;
    };
    
    • 0x1b4 (SPI0_CS0)= 0x10000 →Ω 输出、无 RXACTIVE
    • 0x1bc (SPI0_CLK)= 0x54000 →RXACTIVE 设置
    • 0x1c0 (SPI0_D0)= 0x10000 →Ω 输出、无 RXACTIVE(与 PIN_OUTPUT 相同)
    • 0x1c4 (SPI0_D1)= 0x54000 →RXACTIVE 设置(与 PIN_INPUT 相同)

    因此、D0 已焊盘配置为仅输出、D1 已支持输入、与片段的意图相匹配。

    还根据 AM62A 数据表焊盘配置表确认偏移:

    Pad   Ball   Signal     PADCONFIG reg          Offset
    B15   B15    SPI0_D0    PADCONFIG112  0x000F41C0   -> 0x1c0
    E15   E15    SPI0_D1    PADCONFIG113  0x000F41C4   -> 0x1c4
    

    两者 SPI0_D0SPI0_D1 分别列出了多路复用器模式 0 为/ main-spi0-default-pins 0x1c0 0x1c4、与我们在中使用的内容相匹配(偏移和,多路复用器模式 0)。 因此、根据数据表、我们 pinctrl 条目中的焊盘偏移和多路复用器选择是正确的、这不是错误的失调电压或多路复用模式问题。

    我的 SPI0 节点:

    spi@20100000 {
            compatible = "ti,am654-mcspi\0ti,omap4-mcspi";
            reg = <0x00 0x20100000 0x00 0x400>;
            interrupts = <0x00 0xac 0x04>;
            #address-cells = <0x01>;
            #size-cells = <0x00>;
            power-domains = <0x03 0x8d 0x01>;
            clocks = <0x02 0x8d 0x00>;
            status = "okay";
            pinctrl-names = "default";
            pinctrl-0 = <0x27 0x56>;
            ti,pindir-d0-out-d1-in;
            panel@0 {
                    compatible = "inanbo,t28cp45tn89-v17";
                    reg = <0x00>;
                    power-supply = <0x28>;
                    backlight = <0x29>;
                    dc-gpios = <0x23 0x06 0x00>;
                    reset-gpios = <0x23 0x07 0x01>;
                    rotation = <0x00>;
                    spi-max-frequency = <0xf4240>;
                    spi-rx-bus-width = <0x01>;
                    port {
                            endpoint {
                                    remote-endpoint = <0x2a>;
                                    phandle = <0x3e>;
                            };
                    };
            };
    };
    

    ti,pindir-d0-out-d1-in; 添加以下内容后的测试结果:

    • D0 上无数据
    • 也没有 D1 上的数据(此行之前工作正常)

    ti,pindir-d0-out-d1-in; 移除后:

    • d0:无数据
    • D1:正确的 SPI 数据、匹配正常工作的参考板的预期命令序列

    因此、添加属性不会将数据移动到 D0、它只会中断之前正常工作的 D1 路径、而根本不会修复 D0。

    这与另一个线程中报告的内容相匹配、在该线程中发现 DPE0/DPE1 对 AM62x/AM62A 硬件没有实际影响: e2e.ti.com/.../faq-am62x-mcspi-d0-and-d1-direction-in-spi-bootmode

    您能否确认 D0=MISO/D1=MOSI 是否仅在 AM62A 的 McSPI 上的硬件中固定、而不可从软件/器件树中更改? 如果有办法在 D0 上获得 MOSI、您能否将我指向正确的属性或寄存器序列、因为 ti,pindir-d0-out-d1-in 这里似乎没有这样做?

    感谢你的帮助。

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

    您好、
     您认为这个具有和不具有 ti、pindir-d0-out-D1-in 标志的寄存器的值是多少?

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

    这是没有的  ti,pindir-d0-out-d1-in;
    devmem2 0x2010012C w /dev/mem 已打开。 0xffffb8bf8000 映射的闪存。 读取地址 0x2010012C (0xffffb8bf812c):0x20012444

    更重要的是 ti,pindir-d0-out-d1-in;
    devmem2 0x2010012C w /dev/mem 已打开。 映射到地址 0xffffaa7eb000 的存储器。 读取地址 0x2010012C (0xffaa7eb12c):0x20062444

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

    尊敬的 Sajid:
    谢谢。 寄存器看起来正确、我来尝试在我这边复制问题 将在本周结束前做出回应。

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

    尊敬的 Sajid:
    我尝试了同样的在我的终端,它至少适用于 4 线配置。 您是否尝试使用 3 线配置?

    以下是我的实验的详细信息:

    不带 ti 的 DTSO、pindir-d0-out-D1-in:(在 D1 上看到的输出)(寄存器值 0x2010012C = 0x200103C8)  

    // SPDX-License-Identifier: GPL-2.0
    /*
     * DT overlay for AM62A
     * Copyright (C) 2023-2025 Texas Instruments Incorporated - https://www.ti.com/
     */
    
    /dts-v1/;
    /plugin/;
    
    #include "k3-pinctrl.h"
    
    &main_pmx0 {
    	main_spi0_pins_default: main-spi0-pins-default {
    		pinctrl-single,pins = <
    				AM62AX_IOPAD(0x01bc, PIN_INPUT, 0) /* (A17) SPI0_CLK */
    				AM62AX_IOPAD(0x01c0, PIN_INPUT, 0) /* (B15) SPI0_D0 */
    				AM62AX_IOPAD(0x01c4, PIN_INPUT, 0) /* (E15) SPI0_D1 */
    				AM62AX_IOPAD(0x01b4, PIN_INPUT, 0) /* (D16) SPI0_CS0 */
    		>;
    	};
    };
    
    &main_spi0 {
           status = "okay";
           pinctrl-names = "default";
           pinctrl-0 = <&main_spi0_pins_default>;
           spidev@0 {
                   spi-max-frequency = <24000000>;
                   reg = <0>;
                   compatible = "rohm,dh2228fv";
           };
    }; 

    具有 ti、pindir-d0-out-D1-in 的 DTSO:  (在 D0 上看到的输出) (寄存器值 0x2010012C = 0x200603C8)  

    // SPDX-License-Identifier: GPL-2.0
    /*
     * DT overlay for AM62A
     * Copyright (C) 2023-2025 Texas Instruments Incorporated - https://www.ti.com/
     */
    
    /dts-v1/;
    /plugin/;
    
    #include "k3-pinctrl.h"
    
    &main_pmx0 {
    	main_spi0_pins_default: main-spi0-pins-default {
    		pinctrl-single,pins = <
                            AM62AX_IOPAD(0x01bc, PIN_INPUT, 0) /* (A17) SPI0_CLK */
                            AM62AX_IOPAD(0x01c0, PIN_INPUT, 0) /* (B15) SPI0_D0 */
                            AM62AX_IOPAD(0x01c4, PIN_INPUT, 0) /* (E15) SPI0_D1 */
                            AM62AX_IOPAD(0x01b4, PIN_INPUT, 0) /* (D16) SPI0_CS0 */
    		>;
    	};
    };
    
    &main_spi0 {
           status = "okay";
           pinctrl-names = "default";
           pinctrl-0 = <&main_spi0_pins_default>;
           ti,pindir-d0-out-d1-in;
           spidev@0 {
                   spi-max-frequency = <24000000>;
                   reg = <0>;
                   compatible = "rohm,dh2228fv";
           };
    }; 

    在目标上使用 gcc 编译的示例应用程序:
    TI-PROCESSOR-SDK-LINUX-edgeai-am62a-evm-11.01.07.05/board-support/ti-linux-kernel-6.12.35+git-ti/tools/spidev_test.c

    运行示例:

    root@am62axx-evm:~# ./a.out -D /dev/spidev1.0 -s 12000000 -v
    spi mode: 0x0
    bits per word: 8
    max speed: 12000000 Hz (12000 kHz)
    TX | FF FF FF FF FF FF 40 00 00 00 00 95 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF F0 0D  |......@.........................|
    RX | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  |................................|

    地址 0x20100128 处的寄存器值= 0x00000001(您是否也可以共享该寄存器值?)

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

    您好、

    是的、我使用 3 线 (9 位 SPI) 配置。

    我的 LCD 是 E24RG12432LWIM800-C、它使用 ST7789V 控制器。 此面板的 Linux 驱动程序为: https://github.com/torvalds/linux/blob/master/drivers/gpu/drm/panel/panel-sitronix-st7789v.c

    寄存器地址 0x20100128(带或不带)的值  ti,pindir-d0-out-d1-in;
    相同。

    devmem2 0x20100128(带
    /dev/mem 已打开。
    0xffffb539b000 映射的存储器。
    读取地址 0x20100128 (0xffb539b128):0x00000001

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

    好的、让我在内部检查 3 线的使用情况、但是使用 4 线模式但只连接 3 线是否可行?

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

    是的,请检查此. 我正在等待您的答复。 谢谢你  

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

    尊敬的 Sajid:  
    尝试在我这边复制您的设置 您能否确认面板不需要将任何信息传回处理器(即,它是只写面板)? 尝试评估是否不需要在同一数据线上进行双向通信。

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

    嗨、
     此问题是否尚未解决? 我检查了驱动器和您的 DTS、似乎没有处于 3 线模式、而是处于 4 线 SPI 模式(因为已经定义了直流 GPIO)。 只是您不需要连接一条 SPI 线、但模式仍然是 4 线。

    我正在尝试使用您的 DTS 节点、能否共享原始 DTS 文件而不是最终解析的 DTS 文件、以避免使用 <0x06 0x23 0x00>;这种语法?

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

    问题仍未解决。 是的、我使用 3 线模式、因为我的驱动器当前仅支持该模式。

    我还有一个关于 UART5_RTSN 引脚的问题、该引脚与 OSPI0_LBCLKO进行多路复用。 每当我在器件树 (DTS) 中配置此引脚并重新启动系统时、电路板在启动期间挂起、无法成功引导。 但是、如果我从 DTS 中删除此引脚配置、系统将正常引导。

    我已将解压缩的 DTS 和引导日志log.txt() 附加到您的参考位置。 您能否帮助确定导致此问题的原因?e2e.ti.com/.../current_5F00_dts.txte2e.ti.com/.../2022.logs.txt

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

    尊敬的 Sajid:

    [引用 userid=“702165“ url=“~/support/processors-group/processors/f/processors-forum/1655838/am62a7-title-am62a-mcspi0---d0-has-no-data-d1-works-does-pindir-property-actually-work/6404567 ]我还有一个关于 UART5_RTSN 引脚 的问题、该引脚与 OSPI0_LBCLKO 进行多路复用。 每当我在器件树 (DTS) 中配置此引脚并重新启动系统时、电路板在启动期间挂起、无法成功引导。 但是、如果我从 DTS 中删除此引脚配置、系统将正常引导。

    请为此创建一个单独的 TT。

    我已附加了已解压缩的 DTS

    如前所述、解析的 DTS 对我没有用处。 您能分享用于构建 dtb/dtbo 的 DTS 吗?