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.

[参考译文] DRA821U:用于 ospi0 上 SPI-NOR 闪存的 QSPI 接口

Guru**** 2650475 points

Other Parts Discussed in Thread: DRA821U

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1584108/dra821u-qspi-interface-for-spi-nor-flash-on-ospi0

器件型号: DRA821U

你好
我正在尝试将 w25q128 SPI NOR 闪存连接到 dra821u 上的 ospi0

这是引脚多路复用:

&wkup_pmx0{
mcu_fss0_ospi0_pins_default:mcu_fss0_ospi0-default-pins{
pinctrl-single、pins =<
J721E_WKUP_IOPAD (0x000、PIN_OUTPUT、0)/*(B6) MCU_OSPI0_CLK */
J721E_WKUP_IOPAD (0x02c、PIN_OUTPUT、0)/*(D6) MCU_OSPI0_CSn0 */
J721E_WKUP_IOPAD (0x00c、PIN_INPUT、0)/*(D8) MCU_OSPI0_D0 */
J721E_WKUP_IOPAD (0x010、PIN_INPUT、0)/*(C7) MCU_OSPI0_D1 */
J721E_WKUP_IOPAD (0x014、PIN_INPUT、0)/*(C5) MCU_OSPI0_D2 */
J721E_WKUP_IOPAD (0x018、PIN_INPUT、0)/*(A5) MCU_OSPI0_D3 */
>;
};

这里是 ospi0 节点:  

&ospi0{
状态=“正常“;
pinctrl-names =“default";“;
pinctrl-0 =<&MCU_fss0_ospi0_pins_default>;

闪存@0{
兼容=“JEDEC、SPI-NOR“;
REG =<0x0>;
SPI-TX-BUS-WIDTH =<1>;
SPI-Rx-BUS-WIDTH =<4>;
SPI-max-frequency =<40000000>;
CDN、tshsl-ns =<60>;
CDN、tsd2d-ns =<60>;
CDN、tchsh-ns =<60>;
CDN、tslch-ns =<60>;
CDN、读取延迟=<2>;
};
};

不幸的是、在 Linux 中、ospi0 控制器仍然连接到 hyperbus:

root@jacinto-OSM-m:/sys/bus/platform/devices # ls 47040000.hyperbus/

因此、系统加载了错误的驱动程序:

Root@jacinto-OSM-m:/sys/bus/platform/devices dmesg |grep hbmc am
[1.281950]  hbmc -am654 47040000. hyperbus:带有驱动程序 hbmc -am654 的探测器失败、错误为–22

我希望按照 k3-j7200-mcu-wakeup.dtsi 中的说明加载 am654-ospi 驱动程序:
ospi0:SPI@47040000{
      兼容=“ti、am654-ospi“、“CDN、QSPI-NOR“;

您能帮我为简单的 QSPI NOR 闪存、Hyperbus 接口正确配置 ospi0 吗?

多谢致以诚挚的问候
Stephan



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

    您好、Stefan:

    您能否分享在您的案例中生成的 DTB? 是否应用了任何叠加?

    此致、
    Tanmay

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

    你好、Tanmay
    我们正在开发定制板。 未应用覆盖。
    请查看随附的 DTB。


    e2e.ti.com/.../k3-j7200-jacinto-osm-m.dtb


    正如 DTC -i DTB -O dts k3-j7200-jacinto-OSM-m.dtb 所示

    ospi0 节点已启用、hyperbus 已禁用

    hyperbus@47034000 {
                        compatible = "ti,am654-hbmc";
                        reg = <0x00 0x47034000 0x00 0x100 0x05 0x00 0x01 0x00>;
                        power-domains = <0x08 0x66 0x01>;
                        clocks = <0x07 0x66 0x00>;
                        assigned-clocks = <0x07 0x66 0x05>;
                        assigned-clock-rates = <0x13de4355>;
                        #address-cells = <0x02>;
                        #size-cells = <0x01>;
                        mux-controls = <0x1b 0x00>;
                        status = "disabled";
                    };

    spi@47040000 {
                        compatible = "ti,am654-ospi\0cdns,qspi-nor";
                        reg = <0x00 0x47040000 0x00 0x100 0x05 0x00 0x01 0x00>;
                        interrupts = <0x00 0x348 0x04>;
                        cdns,fifo-depth = <0x100>;
                        cdns,fifo-width = <0x04>;
                        cdns,trigger-address = <0x00>;
                        cdns,phase-detect-selector = <0x02>;
                        clocks = <0x07 0x67 0x00>;
                        assigned-clocks = <0x07 0x67 0x00>;
                        assigned-clock-parents = <0x07 0x67 0x02>;
                        assigned-clock-rates = <0x9ef21aa>;
                        power-domains = <0x08 0x67 0x01>;
                        #address-cells = <0x01>;
                        #size-cells = <0x00>;
                        status = "okay";
                        pinctrl-names = "default";
                        pinctrl-0 = <0x1c>;

                        flash@0 {
                            compatible = "jedec,spi-nor";
                            reg = <0x00>;
                            spi-tx-bus-width = <0x01>;
                            spi-rx-bus-width = <0x04>;
                            spi-max-frequency = <0x2625a00>;
                            cdns,tshsl-ns = <0x3c>;
                            cdns,tsd2d-ns = <0x3c>;
                            cdns,tchsh-ns = <0x3c>;
                            cdns,tslch-ns = <0x3c>;
                            cdns,read-delay = <0x02>;
                        };
                    };




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

    您好、

    在这种情况下,我也会假设 yur ospi 控制器也被探测。 您能分享内核的 dmesg 日志吗? 我期待类似以下日志的内容:

    [    5.692064] spi-nor spi0.0: mt35xu512aba (65536 Kbytes)
    [    5.697338] 8 fixed-partitions partitions found on MTD device 47040000.spi.0
    [    5.704444] Creating 8 MTD partitions on "47040000.spi.0":
    [    5.709919] 0x000000000000-0x000000080000 : "ospi.tiboot3"
    [    5.716013] 0x000000080000-0x000000280000 : "ospi.tispl"
    [    5.721763] 0x000000280000-0x000000680000 : "ospi.u-boot"
    [    5.727590] 0x000000680000-0x0000006a0000 : "ospi.env"
    [    5.733184] 0x0000006a0000-0x0000006c0000 : "ospi.env.backup"
    [    5.739375] 0x0000006c0000-0x0000007c0000 : "ospi.sysfw"
    [    5.745141] 0x000000800000-0x000003fc0000 : "ospi.rootfs"
    [    5.750969] 0x000003fe0000-0x000004000000 : "ospi.phypattern"
    

    此外、使用的引导模式是什么?如何刷写引导介质?

    您能否在 dtb /boot/dtb/ti/k3-j7200-common-proc-board.dtb 上运行 md5sum 并将其与您构建的 dtb 进行比较?

    此致、
    Tanmay

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

    你好、Tanmay
    只有报告 SPI 的内核命令行。

    root@jacinto-OSM-m:/sys/bus/platform/drivers/ti-qspi dmesg |grep spi
    [0.000000]  内核命令行:console=ttyS2115200n8 earlycon=ns16550a,mmio32,0x0000mtddparts=47040000.spi.0:(ospi.tiboot3)@@
    [0.000000]  未知内核命令行参数“mtdparts=47040000.spi.0:512k(ospi.tiboot3)、2m(ospi.tispl)、4m(ospi.u-boot)、128k(ospi.env.spi),128k(ospi.env.backup)@@
    [2.463671]     mtddparts=47040000.spi.0:512k(ospi.tiboot3)、2m(ospi.tispl)、4m(ospi.u-boot)、128k(ospi.env)、128k(ospi.env.backup)、@2m(ospi.256fw)、4m(ospi.u-boot.enw)、@…………………………


    未加载 ospi 驱动程序。

    root@jacinto-OSM-m:/sys/bus/platform/drivers ls *spi*
    Cadence-QSPI:
    bind uevent 取消绑定

    OMAP2_mcspi:
    40310000.SPI bind uevent 取消绑定

    TI-QSPI:
    bind uevent 取消绑定

    如果要加载它、它应该出现在 47040000 以下的某个位置

    我为电路板创建了一个新 DTS

    MD5SUM arch/arm64/boot/dts/ti/k3-j7200-jacinto-OSM-m.dts  
    7724af097fbcacaefdd0f6b6e3ee5311 arch/arm64/boot/dts/ti/k3-j7200-jacinto-OSM-m.dts

    MD5SUM arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts  
    708261cb89503519103467ad41dbfd06 arch/arm64/boot/dts/ti/k3-j7200-common-proc-board.dts

    我当前正在从 SDCARD 引导。
    QSPI 将用作存储、而不是用于引导。

    此致

    Stephan

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

    尊敬的 Stephan:

    我想确认的是传递给内核的正确 dtb。 您能否在 u-boot 处停止并执行 printenv 命令并共享输出? 请确保 printenv 输出未因显示大小而被截断。 确保对 UART 输出进行变形。

    此外、uEnv.txt 中还有什么内容吗? 您能同时分享一下吗?

    u-boot 环境具有正在使用的设备树的名称。 您是否更改过它?

    此致、
    Tanmay

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

    你好、Tanmay
    以下是相关环境


    =>打印 fdtfile  
    fdtfile=ti/k3-j7200-jacinto-OSM-m.dtb
    =>打印 bootcmd
    bootcmd=运行 init_${boot};运行 get_kern_${boot};运行 get_FDT_${boot};运行 run_kern;
    =>打印引导
    BOOT=MMC
    =>打印 GET_FDT_${BOOT}
    get_FDT_MMC=load MMC ${bootpart}${fdtaddr}${bootdir}/dtb/${fdtfile}
    =>打印引导目录
    bootdir=/boot

    Linux 中还显示了正确的模型:
    Root@Jacinto -OSM-m:~ó n # cat /proc/device-tree/model  
    Jacinto OSM-M

    (请参阅上面的列表)

    此致
    Stephan



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

    尊敬的 Stephan:

    uEnv.txt 呢? 您使用的是任何设备吗?

    此致、
    Tanmay

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

    我们不使用 uENv.txt。
    中编译了环境。
    您预计该问题在哪里?

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

    尊敬的 Stephan:

    我认为这是由于内核使用了不正确的 FDT 进行引导。 因此、我想消除 FDT 更改可能产生的影响。 除此之外、内核中不存在节点是没有意义的。

    就像测试一样、您可以尝试从设备树中禁用某些其他器件(如 PCIe 或以太网)、并查看是否看到从内核日志中移除了探测跟踪。

    此致、
    Tanmay

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

    我很抱歉、我的 DTB 应用正确。 我在电路板上运行了 I2C 上的 CAN3-16、USB、以太网和 EEPROM。 遗憾的是、OSPI 驱动器不愿意加载。

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

    Stephan、

    你可以尝试比较:

    diff --git a/board/ti/j721e/evm.c b/board/ti/j721e/evm.c
    index 11635d3d178..9e919923713 100644
    --- a/board/ti/j721e/evm.c
    +++ b/board/ti/j721e/evm.c
    @@ -112,6 +112,8 @@ int board_fit_config_name_match(const char *name)
     /* Returns 1, if onboard mux is set to hyperflash */
     static void __maybe_unused detect_enable_hyperflash(void *blob)
     {
    +       return;
    +
            struct gpio_desc desc = {0};
            char *hypermux_sel_gpio = (board_is_j721e_som()) ? "8" : "6";
     
    

    基本上在 EVM 上、 detect_enable_hyperflash 函数会根据 GPIO 状态修改内核 dtb。 因为它是定制板、而不是 EVM。
    请注释此呼叫。

    这应该是 OSPI 而不是 HBMC。 请告诉我。

    谢谢、
    Keerthy