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:在 SDR 模式下无法检测 NOR 闪存 x8 OSPI

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1629387/am62a7-not-able-to-detect-nor-flash-x8-ospi-in-sdr-mode

器件型号: AM62A7

尊敬的 TI 技术支持团队:

我们已经开发了基于 TI AM62Ax SK EVM 的定制电路板。 在该电路板上、我们将 OSPI NAND 闪存替换为 OSPI NOR 闪存器件型号 MT35XU02GCBA2G12 。 接口连接与用于 OSPI NAND 的接口连接相同。

TI SDK 版本:
TI-PROCESSOR-SDK-LINUX-edgeai-am62a-EVM-10-01_00_05

MT35XU02GCBA2G12 器件支持 x8 八通道 SPI SDR 模式 以及上电和引导模式。

以下是在 U-Boot 期间捕获的日志:

=> SF 探针 3:0 JEDEC_SPI_NOR 闪存@0:无法识别的 JEDEC ID 字节:FF、ff、ff 无法在 3:0 初始化 SPI 闪存(错误 0)
 
相关源文件:
 
drivers/MTD/SPI/SPI-NOR-CORE.c
 
呼叫流:
 
SPI_FLASH_PROBLE_SLAVE -> SPI_NOR_SCAN ()
 
在内部spi_nor_scan()、协议的硬编码如下:
NOR->reg_proto  = snor_proto_1_1_1;
nor->write_proto = snor_proto_1_1_1;
NOR->READ_PROTO = SNOR_PROTO_1_1_1;
 

根据我们的分析、SPI NOR 驱动程序仅尝试检测中的闪存器件 x1 SPI 模式 、这会导致错误“无法识别的 JEDEC id 字节:f, ff, ff“。 我们也尝试了修改 dts 文件中的模式、但它没有效果、因为 x1 SPI 模式是在中硬编码的spi_nor_scan()

我们需要您提供有关如何为添加支持的指导 x8 八通道 SPI SDR 模式 以便可以在 U-Boot 阶段检测 NOR 闪存。

请建议启用此功能所需的更改或补丁。

此致、
Tejas Patel

 

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

    尊敬的 Tejas:

    您可以尝试下面的修补程序吗?

    diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
    index 7468e37f..ff320c40 100644
    --- a/drivers/mtd/spi/spi-nor-core.c
    +++ b/drivers/mtd/spi/spi-nor-core.c
    @@ -4465,9 +4465,16 @@ int spi_nor_scan(struct spi_nor *nor)
     #endif
     
            /* Reset SPI protocol for all commands. */
    -       nor->reg_proto = SNOR_PROTO_1_1_1;
    -       nor->read_proto = SNOR_PROTO_1_1_1;
    -       nor->write_proto = SNOR_PROTO_1_1_1;
    +       /* Dynamically set protocol based on DT bus width */
    +       if (nor->spi->mode & SPI_RX_OCTAL) {
    +               nor->reg_proto = SNOR_PROTO_8_8_8;
    +               nor->read_proto = SNOR_PROTO_8_8_8;
    +               nor->write_proto = SNOR_PROTO_8_8_8;
    +       } else {
    +               nor->reg_proto = SNOR_PROTO_1_1_1;
    +               nor->read_proto = SNOR_PROTO_1_1_1;
    +               nor->write_proto = SNOR_PROTO_1_1_1;
    +       }
            nor->read = spi_nor_read_data;
            nor->write = spi_nor_write_data;
            nor->read_reg = spi_nor_read_reg

    请确保 DTS 指定 8 位宽度、以便 触发 SPI_RX_Octal。

    &ospi0 {
        ...
        flash@0 {
            compatible = ... ;
            spi-tx-bus-width = <8>;
            spi-rx-bus-width = <8>;
            ...
        };
    };
    

    此致、
    Vinu

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

    尊敬的 Vinu:  

    我已尝试过您建议的更改、但问题未解决。  

    也尝试了值 8  spi_nor_read_reg 和 spi_nor_write_reg、但问题未解决。   

    static int spi_nor_read_reg (struct spi_nor *nor、u8 代码、u8 * val、int len)

    结构体 spi_mem_op = SPI_MEM_OP (SPI_MEM_OP_CMD(代码, 8. )、   
    SPI_MEM_OP_NO_ADDR
    SPI_MEM_OP_NO_DEMVE、
    SPI_MEM_OP_DATA_IN (len、NULL、0));
    内部 ret;

    spi_nor_setup_op (nor、&op、nor->reg_proto);

    RET = SPI_NOR_READ_WRITE_reg (NOR、&op、val);
    IF (RET < 0)
    dev_dbg (nor->dev、“error %d reading %x\n“、ret、code);

    返回 ret;
    }

    static int spi_nor_write_reg (struct spi_nor *nor、u8 操作码、u8 *buf、int len)

    结构体 spi_mem_op = SPI_MEM_OP (SPI_MEM_OP_CMD(操作码, 8. )、  
    SPI_MEM_OP_NO_ADDR
    SPI_MEM_OP_NO_DEMVE、
    SPI_MEM_OP_DATA_OUT (len、NULL、0));

    spi_nor_setup_op (nor、&op、nor->reg_proto);

    if (len == 0)
    op.data.dir = SPI_MEM_NO_DATA;

    返回 SPI_NOR_READ_WRITE_reg (NOR、&op、buf);
    }

    请建议启用此功能所需的更改或补丁。

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    您能否共享设备树节点和日志?

    此致、
    Vinu

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

    尊敬的 Vinu:  

    ==============  arch/arm/dts/k3-am62a7-sk.dts ==============================

    ospi0_pins_default:ospi0-default-pins{
    pinctrl-single、pins =<
    AM62AX_IOPAD (0x000、PIN_INPUT、0)/*(H24) OSPI0_CLK */
    AM62AX_IOPAD (0x02c、PIN_OUTPUT、0)/*(F23) OSPI0_CSn0 */
    /* AM62AX_IOPAD (0x038、PIN_OUTPUT_PULLUP、1)*//*(G20) OSPI0_CSn3 */
    /* AM62AX_IOPAD (0x038、PIN_OUTPUT、7)*//*(G20) OSPI0_CSn3*/
    /* AM62AX_IOPAD (0x030、PIN_OUTPUT、7)*//*(G20) OSPI0_CSn1*/
    AM62AX_IOPAD (0x00c、PIN_INPUT、0)/*(E25) OSPI0_D0 */
    AM62AX_IOPAD (0x010、PIN_INPUT、0)/*(G24) OSPI0_D1 */
    AM62AX_IOPAD (0x014、PIN_INPUT、0)/*(F25) OSPI0_D2 */
    AM62AX_IOPAD (0x018、PIN_INPUT、0)/*(F24) OSPI0_D3 */
    AM62AX_IOPAD (0x01c、PIN_INPUT、0)/*(J23) OSPI0_D4 */
    AM62AX_IOPAD (0x020、PIN_INPUT、0)/*(J25) OSPI0_D5 */
    AM62AX_IOPAD (0x024、PIN_INPUT、0)/*(H25) OSPI0_D6 */
    AM62AX_IOPAD (0x028、PIN_INPUT、0)/*(J22) OSPI0_D7 *
    /* AM62AX_IOPAD (0x008、PIN_INPUT、0)*//*(J24) OSPI0_DQS */
    /* AM62AX_IOPAD (0x0004、PIN_OUTPUT、0)(K22) OSPI0_LBCLKO */
    >;
    /*bootph-all;*/
    };

    &ospi0{

    pinctrl-names =“default";“;
    /*pinctrl-0 =<&ospi0_pins_default &ospi0_reset_pins>;*/
    pinctrl-0 =<&ospi0_pins_default>;
    状态=“正常“;
    /*status =“disabled";“;*/
    //bootph-all;

    闪存@0{
    /*兼容=“JEDEC、SPI-NOR“;*/
    兼容=“微米、mt35xu02g“、“JEDEC、SPI-NOR“;
    REG =<0x0>;
    SPI-TX-BUS-WIDTH =<8>;
    SPI-Rx-BUS-WIDTH =<8>;
    SPI-max-frequency =<25000000>;
    /*spi-max-frequency =<12500000>;*/

    /*关键:告诉 U‑Boot 不要尝试传统模式*/
    //SPI-NOR、八进制 str;
    /*spi-nor、no-hotplug;*/
    //SPI-NOR、无传统;

    /*可选但安全*/
    //SPI-NOR,禁用 — 复位;

    //bootph-all;
    /*启用八通道 DTR */
    /*spi-nor、octal-dtr-enable;*/
    /*no-op-dtr;*//*通过禁用 DTR*/强制 SDR

    /*resets =<&ospi_reset 0>;
    /*reset-names =“闪存“;*/
    /*RESET_GPIOs =<&MAIN_GPIO0 14 GPIO_ACTIVE_LOW>;*/
    CDN、tshsl-ns =<60>;
    CDN、tsd2d-ns =<60>;
    CDN、tchsh-ns =<60>;
    CDN、tslch-ns =<60>;
    CDN、读取延迟=<4>;
    /*CDN、phy-mode;*/


    /* DDR (DTR) 操作需要*/
    /*CDN、enable-phy;*/

    分区{
    兼容=“固定分区“;
    #address-cells =<1>;
    #size-cells =<1>;

    标签=“ospi.tiboot3";“;
    REG =<0x0 0x80000>;
    };

    分区@80000{
    标签=“ospi.tispl";“;
    REG =<0x80000 0x200000>;
    };

    分区@280000 {
    标签=“ospi.u-boot";“;
    REG =<0x280000 0x400000>;
    };

    分区@680000 {
    标签=“ospi.env";“;
    REG =<0x680000 0x40000>;
    };

    分区@6c0000 {
    标签=“ospi.env.backup";“;
    reg =< 0x6c0000 0x40000>;
    };

    分区@2000000 {
    标签=“ospi.rootfs";“;
    REG =<0x2000000 0x5fc0000>;
    };

    分区@7fc0000{
    label =“ospi.phypatern";“;
    reg =<0x7fc0000 0x40000>;
    };


    };

    =========  arch/arm/dts/k3-am62-main.dtsi =====

    fss:BUS@fc00000{
    compatible =“simple-bus";“;
    REG =<0x00 0x0fc00000 0x00 0x70000>;
    #address-cells =<2>;
    #size-cells =<2>;
    范围;

    ospi0:SPI@fc40000{
    兼容=“ti、am654-ospi“、“CDN、QSPI-NOR“;
    REG =<0x00 0x0fc40000 0x00 0x100>、
    0x05 0x00000000 0x01 0x00000000>;
    中断= ;
    CDN、FIFO 深度=<256>;
    CDN、FIFO 宽度=<4>;
    CDN、触发器地址=<0x0>;
    CDN、相位检测选择器=<2>;
    Clocks =<&K3_CLKS 75 7>;
    Assigned-clocks =<&K3_CLKS 75 7>;
    assigned-clock-parter =<&k3_CLKS 75 8>;
    分配的时钟速率=<1666666>;
    电源域=<&K3_PDS 75 TI_SCI_PD_EXCLUSTED>;
    #address-cells =<1>;
    #size-cells =<0>;
    STATUS =“已禁用“;
    };
    };

    我们已经尝试了启用和禁用 SPI-NOR、八进制 str 、CDN、phy-mode、 CDN、enable-phy、bootph-all 。  

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    时序操作和八路模式需要数据选通和环回时钟引脚。 您能实现这些功能吗?

    /* AM62AX_IOPAD (0x008、PIN_INPUT、0)*//*(J24) OSPI0_DQS */
    /* AM62AX_IOPAD (0x0004、PIN_OUTPUT、0)(K22) OSPI0_LBCLKO */

    此外、还需要 bootph-all。 请启用它。  

    您能否尝试恢复驱动程序补丁并启用以下配置?

    CONFIG_SPI_FLASH_SOFT_RESET=y
    CONFIG_SPI_FLASH_SOFT_RESET_ON_BOOT=y

    此致、
    Vinu

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

    尊敬的 Vinu:  

    感谢您立即重播。  

    我已尝试建议的设置。  问题未解决。  

    请指导我们是否可以尝试其他设置。  

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    即使添加配置后、您是否获得了完全相同的误差?

    您能分享最新的 DT 和 CONFIG 吗?  

    此致、
    Vinu

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

    尊敬的 Vinu:  

    感谢您的即时响应。  请根据要求参阅以下详细信息。   为简单起见、我们获取了 SDK 版本 10.01.00.05 的新副本、并仅在 DTS 和 A53 配置文件中应用了与 NOR 闪存相关的更改。   

    e2e.ti.com/.../sdk_5F00_10_5F00_a53_5F00_config.txte2e.ti.com/.../4375.k3_2D00_am62a7_2D00_sk.txt

    => SF 探针 0:0
    JEDEC_SPI_NOR 闪存@0:无法识别的 JEDEC ID 字节:FF、ff、ff
    在 0:0 处初始化 SPI 闪存失败(错误 0)

    PFA A53 dts 文件。  

    PFA A53 配置文件。   (CONFIG_SPI_FLASH_SOFT_RESET=y、 CONFIG_SPI_FLASH_SOFT_RESET_ON_BOOT=y)

    OSPI 接口原理图。  

    我们还厌倦了在配置文件中启用以下设置、但问题是相同的。  

    CONFIG_SPI_FLASH=y
    CONFIG_DM_SPI_FLASH=y
    CONFIG_SPI_FLASH_SPI_NOR=y
    CONFIG_SPI_FLASH_SFDP_support=SFDP_support=y
    CONFIG_SPI_FLASH_SMART_HWCAPS=y
    CONFIG_SPI_NOR_Octal=y
    CONFIG_SPI_NOR_TXRX=y
    CONFIG_SPI_FLASH_MT35XU=y

    从我们进行的实验中可以看出、u-boot nor-flash 驱动器不支持 x8 OSPI 模式来读取 ID。         请帮助解决此问题。  

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    您使用较旧版本的 SDK 是否有任何原因? 是否可以使用最新的 SDK (v11)?

    此致、
    Vinu

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

    尊敬的 Vinu:  

    我们使用的是版本  10.01.00.05。    

    版本 11.  默认情况下不支持使用“SF probe“命令来检测 NOR 闪存。 因此、我们将 10.01.00.05 版本用于本实验。  

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    版本 11.  默认情况下不支持“SF probee“

    这将是因为配置默认被禁用。  

    应通过启用所需的配置并添加 DT 节点来轻松启用该功能。

    以下是启用 SF 探针和 NOR 支持所需的一些配置。 您可以比较 defconfig 10 和 11 以识别任何其他缺失的配置。

    CONFIG_CMD_SF=y
    CONFIG_SPI=y
    CONFIG_DM_SPI=y
    CONFIG_CADENCE_QSPI=y
    CONFIG_SPI_FLASH=y
    CONFIG_MTD=y
    CONFIG_DM_MTD=y
    CONFIG_CMD_MTDPARTS=y

    DT 节点示例

    &ospi0 {
        status = "okay";
        
        flash@0 {
            compatible = "jedec,spi-nor";
            reg = <0x0>;
            spi-tx-bus-width = <8>;
            spi-rx-bus-width = <8>;
            spi-max-frequency = <25000000>; /* Adjust based on your flash chip specs */
            
            /* Define MTD partitions here if needed */
        };
    };

    如果可能、最好使用最新的 SDK、因为它会包含更多支持。

    您也可以尝试启用以下配置吗
    CONFIG_SPI_FLASH_MT35XU=y

    此致、
    Vinu

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

    尊敬的 Vinu:  

    我将尽力切换到版本 11。  对 SF 探针做相关的配置更改。   

    与  drivers/MTD/SPI/SPI-NOR-CORE.c 在两个版本中相同。 我认为只有.config 和.dts 更改不足以使 x8 DDR 模式正常工作。

    同时、请建议对 spi-nor-core.c  进行一些更改、以添加对 x8 DDR 模式下读取 NOR 闪存 ID 的支持。  

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    请检查使用启用的代码  CONFIG_SPI_FLASH_MT35XU  亮起  spi-nor-core.c
    它应该能有效地解决这个问题。

    不是 MT35XU0 的器件 2. GCBA2G12 在 DDR x8 中引导、而不是 SDR x8?

    此致、
    Vinu

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

    尊敬的 Vinu:  

    感谢您的即时响应。  

    配置文件中的 CONFIG_SPI_FLASH_MT35XU =y。   

    上电后、NOR 闪存处于 x8 DDR 模式。  

    /*启用八通道 DTR */
    SPI-NOR、八进制 dtr-enable;       <-  使用这些设置在 DTS 中启用 DDR x8。   

    spi_nor_scan ()->spi_nor_read_id ()->spi_nor_set_fixups (NOR)-spi_nor_micon_octor_dtr_enable () -  原始序列。  

    spi_nor_scan ()->spi_nor_set_fixups (NOR)->spi_nor_microcontroller_toctor_dtr_enable ()->spi_nor_read_id ()-> - 实验序列。  

    我们尝试了上述 2 个序列、但错误是相同的。  

    ========= log ===============e2e.ti.com/.../spi_2D00_nor_2D00_core.c

    => SF 探针 0:0
    JEDEC_SPI_NOR 闪存@0:无法识别的 JEDEC ID 字节:FF、ff、ff
    在 0:0 处初始化 SPI 闪存失败(错误 0)

    我随附了 spi-nor-core.c 文件。  

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    共享  SPI_NOR_READ_ID 的补丁、如果读取 ID 为 0xff、该补丁将回退到 8D 模式。

    diff --git a/drivers/mtd/spi/spi-nor-core.c b/drivers/mtd/spi/spi-nor-core.c
    index 7468e37f..0bee96e1 100644
    --- a/drivers/mtd/spi/spi-nor-core.c
    +++ b/drivers/mtd/spi/spi-nor-core.c
    @@ -1576,6 +1576,31 @@ static const struct flash_info *spi_nor_read_id(struct spi_nor *nor)
                    return ERR_PTR(tmp);
            }
     
    +       /* Fallback for JEDEC ID ff, ff, ff. Read in Octal DTR for Micron Xccela */
    +       if (id[0] == 0xff && id[1] == 0xff && id[2] == 0xff) {
    +               struct spi_mem_op op = SPI_MEM_OP(
    +                       SPI_MEM_OP_CMD(SPI_NOR_OP_RDID, 0),
    +                       SPI_MEM_OP_NO_ADDR,
    +                       SPI_MEM_OP_DUMMY(8, 0), /* 8 dummy cycles in 8D */
    +                       SPI_MEM_OP_DATA_IN(SPI_NOR_MAX_ID_LEN, id, 0));
    +
    +               /* Set up 8D-8D-8D */
    +               nor->reg_proto = SNOR_PROTO_8_8_8_DTR;
    +               nor->read_proto = SNOR_PROTO_8_8_8_DTR;
    +               nor->write_proto = SNOR_PROTO_8_8_8_DTR;
    +
    +               /* Micron Xccela requires repeated command extension in Octal DTR */
    +               nor->cmd_ext_type = SPI_NOR_EXT_REPEAT;
    +
    +               spi_nor_setup_op(nor, &op, SNOR_PROTO_8_8_8_DTR);
    +
    +               tmp = spi_mem_exec_op(nor->spi, &op);
    +               if (tmp < 0) {
    +                       dev_dbg(nor->dev, "error %d reading JEDEC ID in 8D mode\n", tmp);
    +                       return ERR_PTR(tmp);
    +               }
    +       }
    +
            info = spi_nor_ids;
            for (; info->name; info++) {
                    if (info->id_len) {

    请检查此方法是否有效。

    另外、请注意、初始补丁的编写给人的印象是 NOR 将在 x8 SDR 上启动。

    但由于它将在 x8 DDR 中引导、请查看 将 SNOR_PROTO_8_8_8 更改为 SNOR_PROTO_8_8_8_DTR 后它是否有效

    此致、
    Vinu

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

    尊敬的 Vinu:  

    Thaks vinu 为 imamate 响应。  

    应用更改后。 出现以下错误。  

    => SF 探针 0:0
    JEDEC_SPI_NOR 闪存@0:无法识别的 JEDEC ID 字节:00、00、00
    在 0:0 处初始化 SPI 闪存失败(错误 0)

    此致、

    Tejas Patel  

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

    尊敬的 Tejas:

    请检查此主题并尝试补丁。
    AM625:使用 mt35xu02g OSPI 器件时出现问题。

    此致、
    Vinu

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

    尊敬的 Vinu:  

    您建议的线程与  MT35XU02GCBA1G12-0AAT  引导模式为 x8 SDR 模式相关。  

    我们的问题与 MT35XU02GCBA2G12 引导模式是 x8 DDR 模式有关。

    我们将检查建议的修补程序并更新您。  

    此致、

    Tejas Patel  

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

    尊敬的 Tejas:

    [引述 userid=“645340" url="“ url="~“~/support/processors-group/processors/f/processors-forum/1629387/am62a7-not-able-to-detect-nor-flash-x8-ospi-in-sdr-mode/6296794

    您建议的线程与  MT35XU02GCBA1G12-0AAT  引导模式为 x8 SDR 模式相关。  

    [/报价]

    引导模式实际上是 SDR x1、而不是 SDR x8。

    我已经要求检查线程,以确保 Micron 固定器是为您的设备应用.

    此致、
    Vinu

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

    尊敬的 Vinu:

    是 SDR x 1 模式。

    已签入 u-boot。   

    修正将在读取 ID 功能后调用。  在 CONFIG 中设置 CONFIG_SPI_FLASH_MT35XU 以分配固定值。 但在我们的场景中、读取 ID 失败、因此它不会调用 fixups。  

    信息= SPI_NOR_READ_ID (NOR);
    IF (IS_ERR_OR_NULL (INFO))
    RETURN -ENOENT;
    NOR->INFO = INFO;

    SPI_NOR_set_fixups (NOR);

    ===================

    第一步需要读取 NOR 闪存的 ID。  

    我们还尝试了以下更改(以在踏频驱动程序中启用 DDR 模式)、但无法读取 ID。  

    μOpen file folder驱动器/MTD/SPI/SPI-NOR-CORE.c

    1. 添加新的操作码定义
      • 顶部和其他 SPINOR_OP_*定义:

    define SPINOR_OP_RDID_DDR 0x9E /* Micron DDR 读取 ID */

    1. 添加 DDR 标志
      • 在 include/linux/mTD/spi-nor.h(其中定义了标志)中:

    #define SNOR_F_DDR_MODE 位 (10)

    1. 修改 spi_nor_read_reg()
      • 在 spi_nor_setup_op () 之前插入逻辑:

    if ((NOR->flags & SNOR_F_DDR_MODE)&& CODE == SPINOR_OP_RDID){op.cmd.opped =(SPINOR_OP_RDID_DDR << 8)| 0x00;op.cmd.nbytes = 2;op.cmd.buswidth = 8;op.cmd.dtr = true;op.data.buswidth = 8; op.data.dtr = true;op.data.nbytes = len;}

    1. 确保探针设置 DDR 标志(用于测试)
    • 在 Micron 闪光固定或探头路径中:

    NOR->flags |= SNOR_F_DDR_MODE;

    I ² COpen file folder器/SPI/Cadence_QSPI_APB.c

    1. 更新 Cadence_QSPI_APB_COMMAND_READ_setup()
      • 在 Cadence_QSPI_SET_PROTOCOL (priv、op) 之后:

    if (op->cmd.nbytes == 2 &&(op->cmd.dtr || op->cmd.buswidth == 8) priv->dtr = true;

    1. 更新 Cadence_QSPI_APB_COMMAND_READ ()
    • 确保操作码提取适用于 DDR:

    if (priv->dtr) opode = op->cmd.opode >> 8; else opode = op->cmd.opode;

    I ² COpen file folder器/SPI/Cadence _QSPI_APB.c(已存在)

    • Cadence_QSPI_enable_dtr ()
    • 无需更改、但确认它是从 Cadence_QSPI_APB_COMMAND_READ_setup() 调用的。
    • 此函数设置 CSQSPI_REG_CONFIG_DTR_PROTO 和 CSQSPI_REG_CONFIG_DUAL_OPCODE。

    I ² COpen file folder器/MTD/SPI/SPI-NOR-CORE.c(Micron 帮助器)

    • spi_nor_micon_octal_dtr_enable ()
    • 电阻器。 这会将 Micron 闪存本身配置为 DDR 模式(写入 CFR0V/CFR1V)。
    • 无需更改、但应确保在 Micron 器件的探测期间调用它。

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    感谢您提供的信息。

    您能告诉我 Linux 线程的状态吗?
    AM62A7:在内核引导期间、无法在内核模式下检测 NOR 闪存 x8 OSPI 

    修补程序现在是否正常工作?

    此致、
    Vinu

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

    尊敬的 Vinu:  

    立即重播。  

    补丁无法正常工作。  

    我更新了该 TT 中的详细日志。  

    请查看日志并建议相关更改。  

    谢谢、  

    Tejas Patel

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

    尊敬的 Tejas:

    您能检查一下配置吗

    CONFIG_SPI_FLASH_STMICRO=y

    是否已启用?

    另外、如果您已更新 spi-nor-ids.c 文件、请告知我。 如果没有、请应用此补丁并检查它是否有效。

    diff --git a/drivers/mtd/spi/spi-nor-ids.c b/drivers/mtd/spi/spi-nor-ids.c
    index 91ae49c9..ec473078 100644
    --- a/drivers/mtd/spi/spi-nor-ids.c
    +++ b/drivers/mtd/spi/spi-nor-ids.c
    @@ -361,7 +361,7 @@ const struct flash_info spi_nor_ids[] = {
            { INFO("mt35xu01gaba", 0x2c5b1b, 0,  128 * 1024,  1024, USE_FSR | SPI_NOR_OCTAL_READ | SPI_NOR_4B_OPCODES) },
     #endif /* CONFIG_SPI_FLASH_MT35XU */
            { INFO6("mt35xu01g",  0x2c5b1b, 0x104100, 128 * 1024,  1024, USE_FSR | SPI_NOR_OCTAL_READ | SPI_NOR_4B_OPCODES) },
    -       { INFO("mt35xu02g",  0x2c5b1c, 0, 128 * 1024,  2048, USE_FSR | SPI_NOR_OCTAL_READ | SPI_NOR_4B_OPCODES) },
    +       { INFO("mt35xu02g",  0x2c5b1c, 0, 128 * 1024,  2048, USE_FSR | SPI_NOR_OCTAL_READ | SPI_NOR_4B_OPCODES | SPI_NOR_OCTAL_DTR_READ) },
     #endif
     #ifdef CONFIG_SPI_FLASH_SPANSION       /* SPANSION */
            /* Spansion/Cypress -- single (large) sector size only, at least
    也请共享您的配置文件。
    此致、
    Vinu
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Vinu:  

    感谢您立即重播。  

    CONFIG_SPI_FLASH_STMICRO=y 未启用。 我已启用并应用更改并检查、但问题未解决。  

    PFA 配置文件。

    PFA: spi-nor-core.c、 cadence_QSPI_APb.c、spi-mem.c   

    在 x8 DDR 读取 ID 模式中:函数调用从 spi_mem_exec_op() 返回。  请回顾一下。  

    ==================================

    静态常量结构 FLASH_INFO *SPI_NOR_READ_ID(结构 SPI_NOR *NOR)

    int tmp;
    U8 id[SPI_NOR_MAX_ID_LEN];
    const struct flash_info *info;

    printk(“%s\n",“,__func__、__func__);
    tmp = NOR->READ_reg (NOR、SPINOR_OP_RDID、id、SPI_NOR_MAX_ID_LEN);
    如果 (tmp < 0){
    dev_dbg (nor->dev、“error %d reading JEDEC ID\n“、tmp);
    返回 ERR_ptr (tmp);
    }

    dev_err (nor->dev、“->无法识别的 JEDEC ID 字节:%02x、%02x、%02x\n“、
    ID[0]、id[1]、id[2]);

    如果是 1
    printk(“\n--fallback--\n");</s>“
    /* JEDEC ID ff、ff 的回退 为 Micron Xccela */读取 Octal DTR
    如果 (id[0]== 0xff && id[1]== 0xff && id[2]== 0xff){
    结构体 spi_mem_op = spi_MEM_OP (
    SPI_MEM_OP_CMD (SPINOR_OP_RDID、8)、
    //SPI_MEM_OP_CMD (0x9E、8)、
    SPI_MEM_OP_NO_ADDR
    SPI_MEM_OP_DEMVE (8、8)、/*在 8D 中 8 个虚拟周期*/
    SPI_MEM_OP_DATA_IN (SPI_NOR_MAX_ID_LEN、id、0);

    printk(“\n--fallback:in--\n");</s>“
    /*设置 8D-8D-8D */
    NOR->reg_proto = snor_proto_8_8_DTR;
    NOR->READ_PROTO = SNOR_PROTO_8_8_8_DTR;
    nor->write_proto = snor_proto_8_8_8_DTR;

    /* Micron Xccela 需要 Octal DTR 中的重复命令扩展*/
    NOR->cmd_ext_type = SPI_NOR_EXT_REPEAT;
    //NOR->cmd_ext_type = SPI_NOR_EXT_NONE;

    SPI_NOR_setup_op (NOR、&op、SNOR_PROTO_8_8_8_8_DTR);

    tmp = spi_mem_exec_op (nor->spi、&op);
    如果 (tmp < 0){
    dev_dbg (nor->dev、“在 8D 模式下读取 JEDEC ID 时出错%d \n“、tmp);
    返回 ERR_ptr (tmp);
    }
    }
    #endif
    INFO = SPI_NOR_ID;
    对于 (; info->name; info++){
    if (info->id_len){
    if(!memcmp (info->id、id、info->id_len))
    返回信息;
    }
    }

    dev_err (nor->dev、“无法识别的 JEDEC ID 字节:%02x、%02x、%02x\n“、
    ID[0]、id[1]、id[2]);
    返回 ERR_ptr (-ENODEV);
    }

    ========== drivers/spi/spi-mem.c  ====

    spi_mem_exec_op

    /*
    *一些控制器仅优化特定路径(通常是
    *读取路径)并期望内核使用常规 SPI
    *其他情况下的接口。
    */
    if(!ret || ret !=-ENOTSUPP){
    SPI_RELEASE_BUS(从器件);
    printk(“%s:%d\n“、__func__、__line__);
    返回 ret;
    }

    }

    ========== U-boot 日志 ================

    -- spi_nor_scan --           
    SPI_NOR_READ_ID
    spi_nor_read_reg
    SPI_NOR_setup_op
    SPI_NOR_READ_WRITE_reg
    spi_mem_exec_op:mem

    Cadence_SPI_mem_support_op:1555
    Cadence_QSPI_APB_COMMAND_READ_setup:dtr:0x1
    Cadence_QSPI_SET_PROTOCOL
    Cadence_QSPI_enable_dtr
    Cadence_QSPI_APB_COMMAND_READ
    Cadence_QSPI_APB_exec_flash_cmd
    spi_mem_exec_op:347
    JEDEC_SPI_NOR 闪存@0:->无法识别的 JEDEC ID 字节:FF、ff、ff

    --回退--

    --回退:在--
    SPI_NOR_setup_op
    DTR
    op->cmd.ophode:0x9f
    CMD BW:0x8、OP:0x9f9f、ext:0x9f、NB:0x2、dtr:0x1         <- 8_8_8_DTR 模式  
    添加 BW:0x0、OP:0、ext:0x9f、Nb:0x0、dtr:0x1
    Dum BW:0x8、NB:0x10、dtr:0x1
    spi_mem_exec_op:mem

    Cadence_SPI_mem_support_op:1555
    Cadence_QSPI_APB_COMMAND_READ_setup:dtr:0x0
    Cadence_QSPI_SET_PROTOCOL
    Cadence_QSPI_enable_dtr
    CSQSPI_REG_CONFIG_DTR_PROTO、CSQSPI_REG_CONFIG_DUAL_OPCODE
    Cadence_QSPI_SETUP_OPCODE_ext
    Cadence_QSPI_APB_COMMAND_READ
    Cadence_QSPI_APB_exec_flash_cmd
    spi_mem_exec_op:347
    JEDEC_SPI_NOR 闪存@0:无法识别的 JEDEC ID 字节:00、00、00
    在 0:0 处初始化 SPI 闪存失败(错误 0)

     e2e.ti.com/.../a53_5F00_config.txte2e.ti.com/.../driver_5F00_spi.zipe2e.ti.com/.../mtd_5F00_spi.zip

    此致、

    Tejas Patel

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

    尊敬的 Tejas:

    我先等待 Linux 线程完成、确保没有硬件问题。 将在此后继续。

    此致、
    Vinu

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

    尊敬的 Tejas:

    您从 Micron 获得了任何信息吗?

    此致、
    Vinu