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.

[参考译文] Linux/AM5718:U-boot 中的 QSPI 配置

Guru**** 2539500 points
Other Parts Discussed in Thread: AM5718

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/800183/linux-am5718-qspi-configuration-in-u-boot

器件型号:AM5718

工具/软件:Linux

你(们)好

我们有一个带 AM5718的定制板、并启动该板。

我们使用最新的 u-boot、专用.dts 和 dtsi 文件(基于 am571x-idk 和 am571x-EVM 文件)。

我们的原理图如下所示

我们的.dtsi 文件如下所示(.dts 文件中没有 QSPI 引用)、必须从 am57xx-idk-common.dtsi 中修改副本

&QSPI{
status ="确定";
SPI-max-frequency =<76800000>;
m25p80@0{
compatible ="s25fl512s"、"JEDEC、SPI-NOR ";
SPI-max-frequency =<76800000>;
reg =<0>;
SPI-TX-bus-width =<4>;
SPI-Rx-bus-width =<4>;
#address-cells =<1>;
#size-cells =<1>;
CDN、tshsl-ns =<392>;
CDN、tsd2d-ns =<392>;
cdns、tchsh-ns =<100>;
cdns、tslch-ns =<100>;
/* MTD 分区表。
* ROM 检查前四个物理块
*以查找要引导的有效文件,此处的闪存
为* 64KiB 块大小。













@partition@0{label ="QSPI.SPL";reg =<0x00000000 0x000040000>;};partition@1{label ="QSPI.u-boot";reg =<0x00040000 40000 0x00100000>;};partition@



@2{label ="QSPI.u-boot-os";reg = 0x0000.0004n 分区
= 0x0000.0004n;0x000004v 分区= 0x000004v = 0x000004v = 0x000004n 分区1u.pru.pru.pri 分区= 0x0000.0001u.pru.pri = 0x0001u.0001u.pru.pru.pru.0001u.pru.pru.pru.pru.0001u.pru.pru.

};
分区@5{
标签="QSPI.kernel";
reg =<0x001e0000 0x0800000>;
};
分区@6{
标签="QSPI.file-system";
reg =<0x009e0000 0x01620000>;
};
};
};};




我们已根据引脚多路复用工具的输出更新了我们自己的多路复用器文件

{GPMC_A13、(M1 | PIN_INPUT | MANUAL_MODE)}、// R3 GPMC_A13.spiqc1_rtclk */
{GPMC_A14、(M1 | PIN_INPUT | MANUAL_MODE)}、//* T2 GPMC_A14.spiq1_D3 *
/{GPMC_A15、(M1 | GPMC_INPUT| GPMC_A16、GPMC_INPUT

| GPMC_COMMANU2_INPUT | GPMC_INPUT | GPMC_COMMANUDIAL * 16 | GPMC_COMMANUDIOH | GPMC_COMMANUL.1*(GPMC_COMMANUDIAL)| GPMC_INPUT 1、GPMC_INPUT 1、GPMC_COMMANUDIOH | GPMC/* P3 GPMC_a17.qspi1_D1 */
{GPMC_A18、(M1 | PIN_OUTPUT | MANUAL_MODE)}、/* R2 GPMC_A18.qspi1_SCLK *
。
。
。
。
{GPMC_CS2、(M1 | PIN_OUTPUT | MANUAL_MODE)}、// P2 GPMC_CS2.qspi1_cs0 * 



"SF probe"上 u-boot 提示符的输出为  

=> SF 探测器
无法识别 JEDEC ID 字节:00、00、00
无法在0:0初始化 SPI 闪存(错误-2)

有人有什么想法为什么?

我们是否需要在 arch/arm/dts/dra72x-MMC-iodelay.dtsi 中添加内容?

 应该为 SPI-TX 总线宽度
 SPI-TX-bus-width =<1>;

 SPI-TX-bus-width =<4>;

应该是 s25fl256s1还是 s25fl256s1_512?

我们是否需要 CDN 参数?

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    D2和 D3上缺少上拉电阻器。 最好的解决方案是将它们添加到您的电路板上、但现在在 u-boot 中启用内部上拉电阻 mux_data.h 应该已经足够了。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们尝试添加上拉电阻、但没有区别、

    如果我们打开所有调试消息、我们将获得以下输出

    => SF 探头0
    uclass_find_device_By_seq:0
    - 0 -1 'QSPI@4b300000'
    -未找到
    SPI_find_bus_and_cs:无总线0 uclass_find_device_By_seq
    :0
    - 0 -1 'QSPI@
    
    
    @
    
    
    @4b300000'-未找到 uclass_find_device_seq -
    
    未找到'Q3000-1'Q1'0_q0_bspi_q0_ude_seq0_uSPI -未找到'0_ude_sq0_uspi0_ude_sq0_uSPI -未找到'0_bspi0_ude_sq0_ude_sq0_uspi0_uspi_ 0x7 (7)
    of:**器件 QSPI@4b300000的转换**
    of:总线在 OCP 上为默认值(na=1、ns=1)
    of:父总线为默认值(na=2、ns=2) on
    :步行范围...
    共
    
    
    
    @:默认映射、cp=0、s=c0000000、da=4b300000共:偏移量:1261436928共:达到的根节点 fdtd_dec_get_addr_size_auto_noparent:fdtd_dec_addr_size_auto_parent: na=1、ns=1、fdtdec get_addr_ads=dr_noparent:fdtdr = 400ns=2、
    
    
    默认值:1、nes=dr=dr=dr、nes=dr=dr、ines=dr、ines=dr、ines=dr、ines=dr、ines= 400nes= 1、ines=dr、ines=dr、ines
    共
    
    
    
    
    
    
    
    
    
    @模:默认映射、cp=0、s=c0000000、da=5c000000共模偏移量:1543503872共模:达到的根节点 fdtd_dec_get_int:spi-max-frequency:0x493e000 (76800000) fdtdec get_get_int:0x43503872;ti_qspi_gp_f_ma_f_1000:0x490-1000:f_cp_cp_cp_1000:nateg_f_cp_cp_cp_cp_cp_cp_cp_1000:0x490-f_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cpu1000
    
    :nf_cp_cp_cp_cpu1000:nf_cp_cp_cp_cp_cp_cp_cp_cp_cp_cp_cpu1000:nf_cp_cp_cp_cp_cp_cp_cp_cpu1000:n_cpu1000:
    76800000、时钟分频器0
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    Rx cmd 00390fff dc 00000000
    Rx 完成、状态00020002、读取01
    Rx cmd 00390fff dc 00000000
    Rx 完成、状态00030002、读取02
    Rx cmd 00390fff dc 00000000
    完成、状态00040002、Rx 读取20
    rx cmd 00390fff dc 00000000
    rx done、状态00050002、读取4D
    rx cmd 00390fff dc 00000000
    rx done、状态00060002、读取00
    rx cmd 00390fff dc 00000000
    rx done、状态00070002、 读取80
    9f |[6B in] 01 02 20 4D 00 80 [ret 0]
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    Rx cmd 00390fff dc 00000000
    Rx 完成、状态00020002、读取31
    35 |[1B in] 31 [ret 0]
    TX cmd 003a0fff dc TX
    完成、 状态00010002
    Rx cmd 00390fff dc 00000000
    Rx DONE、状态00020002、Read ff
    05 |[1B in] ff [ret 0]
    TX cmd 003a0fff dc 00000000
    TX DONE、状态00010002
    06 |[0B -][ret 0]
    TX cmd 003a0fff dc 00000000
    TX DONE、 状态00010002
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00020002
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00030002
    01 |[2B out] ff 33 [ret 0]
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    Rx cmd 00390fff dc 00000000
    完成、状态20000002 Rx 读取 ff
    05 |[1B in] ff [ret 0]
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    30 |[0b -][ret 0]
    SPI_GET_BUS_and_cs:错误路径、creed=0、器件'm 25p80@0'
    无法在0:0 (错误-5)处初始化 SPI 闪存
    命令失败、结果=1
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我看不到有关无法识别的 JEDEC 字节的错误。 我认为上拉电阻器解决了这个问题。

    TX 宽度应为1。 您使用的是哪个 SDK 版本?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的-dtsi 文件受另一个使用 s25fl512s 的文件的启发、现在看起来是这样的

    使用的编译是  

    导出 cross_compile=arm-linux-gnueabihf-
    导出 arch=arm
    导出路径=$HOME/gcc-linaro-4.9-2015.05-x86_64 arm-linux-gnueabihf/bin:$path

    QSPI{
    status ="确定";
    
    m25p80@0{
    compatible ="Spansion、s25fl512s"、"JEDEC、SPI-NOR ";
    SPI-max-frequency =<30000000>;
    reg =<0>;
    SPI-TX-bus-width =<1>;
    SPI-Rx-bus-width =<4>;
    #address-cells =<1>;
    #size-cells =<1>;
    SPI-cpha;
    spi-cpol;
    m25p、快速读取; 

    输出现在看起来是这样的

    => SF 探头1
    uclass_find_device_By_seq:0
    - 0 -1 'QSPI@4b300000'
    -未找到
    SPI_find_bus_and_cs:无总线0 uclass_find_device_By_seq
    :0
    - 0 -1 'QSPI@
    
    
    @
    
    
    @4b300000'-未找到 uclass_find_device_seq -
    
    未找到'Q3000-1'Q1uSPI -未找到'Q1uSPI '0_q0_bsp0_class_ude_seq0'0_ude_seq0'0_ude_sq0_ude_s'-未找到'0_uspi_q0_uSPI -未找到'0_ude_spi_bspi_ 0x7 (7)
    of:**器件 QSPI@4b300000的转换**
    of:总线在 OCP 上为默认值(na=1、ns=1)
    of:父总线为默认值(na=2、ns=2) on
    :步行范围...
    共
    
    
    
    @:默认映射、cp=0、s=c0000000、da=4b300000共:偏移量:1261436928共:达到的根节点 fdtd_dec_get_addr_size_auto_noparent:fdtd_dec_addr_size_auto_parent: na=1、ns=1、fdtdec get_addr_ads=dr_noparent:fdtdr = 400ns=2、
    
    
    默认值:1、nes=dr=dr=dr、nes=dr=dr、ines=dr、ines=dr、ines=dr、ines=dr、ines= 400nes= 1、ines=dr、ines=dr、ines
    按:默认映射、cp=0、s=c0000000、da=5c000000
    、共:偏移量:1543503872
    、共:到达根节点
    fdtd_dec_get_int:spi-max-频率:(未找到)
    fdtd_dec_get_int:nc-cs:0x4 (4) qspi_oftat_to_plat_det_datase_board=spi_max_frequency:(未
    
    找到) fdcp_cp_cp_cp_cp_cp_cp_cp_cp_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu= 0x4f_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu_cpu
    
    @
    
    0
    --1 'm 25p80@0'
    --1 'SPI_FLASH@0:1'
    -未找到
    SPI_FLASH_std_probe:slave=fcf3bfb0、cs=1
    ti_spi_set_speed:Hz:1000000、时钟分频器76
    TX cmd 103a0fff dc 00050000
    TX done、status 00002
    
    
    rx 390f done
    、rx 00002、rx 000f rx 000f done、读出器390f rx 00002 状态00030002、读取02
    Rx cmd 10390fff dc 00050000
    Rx DONE、状态00040002、读取20
    Rx cmd 10390fff dc 00050000
    Rx DONE、状态00050002、读取4D
    Rx cmd 10390fff dc 00050000
    Rx DONE、状态0000002、读取00
    cmd 10390fff dc 00050000
    Rx DONE、状态00070002、状态 读取80
    9f |[6B IN] 01 02 20 4D 00 80 [ret 0]
    SF:检测到 s25fl512s_256k、页面大小为256字节、擦除大小为256 KiB、总共64 MIB
    ti_spi_set_speed:Hz:1000000、时钟分频器76
    SPI_get_bus_and_cs:bus=fcf35040、slave=f3bfcf0
    

    它似乎起作用(SF:检测到 s25fl512s_256k、页大小为256字节、擦除大小为256 KiB、总共64 MiB)

    在结束本主题之前、让我进一步调查一下、非常感谢您为我们提供了正确的方向帮助。

    关键修改似乎是  

    &QSPI{
    status ="确定";
    
    m25p80@0{
    compatible ="Spansion、s25fl512s"、"JEDEC、SPI-NOR ";
    SPI-max-frequency =<50000000>;
    reg =<0>;
    SPI-TX-bus-width =<1>;
    SPI-Rx-bus-width =<4>;
    #address-cells =<1>;
    #size-cells =<1>;
    SPI-cpha;
    spi-cpol;
    m25p、快速读取; 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已进一步处理并添加了更多调试打印
    它在 SPI_NOR_CORE.c 中的函数 WRITE_SR_CR 结束时失败

    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    06 |[0B -][转塔0]
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00020002
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00030002
    01 |[2B OUT] ff 33 [转台0]
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    RX cmd 00390fff dc 00000000
    RX 完成、状态00020002、读取关
    05 |[1B in] ff [ret 0]
    TX cmd 003a0fff dc 00000000
    TX 完成、状态00010002
    30 |[0B -][转塔0]
    写入配置寄存器时出现 WRITE_SR_CR 超时
    Spanion_Read_CR_quad_enable 4.
    不支持 SPI_NOR_INIT 4四路模式



    有什么可能出错的提示吗?




    我们的闪存是
    www.cypress.com/.../download

    &QSPI{
    状态="正常";

    flash0:m25p80@0{
    兼容="Spansion、s25fl512s"、"JEDEC、SPI-NOR ";
    reg =<0>;
    SPI-TX-bus-width =<1>;
    SPI-Rx-bus-width =<4>;
    SPI-max-frequency =<96000000>;
    #address-cells =<1>;
    大小单元格=<1>;
    cdns、tshsl-ns =<392>;
    cdns、tsd2d-ns =<392>;
    cdns、tchsh-ns =<100>;
    cdns、tslch-ns =<100>;
    块大小=<18>;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Stefan Thorlacius"]&QSPI{status ="oke";m25p80@0{compatible ="Spansion、s25fl512s"、"JEDEC、SPI-NOR ";SPI-max-frequency =<50000000>;reg =<0>; SPI-TX-bus-width =<1>;SPI-Rx-bus-width =<4>;#address-cells =<1>;#size-cells =<1>;SPI-cpha; spi-cpol;m25p、快速读取;[/quot]

    我想确保您知道上面我突出显示的项目 与引脚复用之间的关系非常密切。  例如、下面是数据手册的一个片段:

    您可以看到、最大速度会因您使用模式0还是模式3而异。  这也与引脚多路复用相关、因为根据您使用的是模式0还是模式3、有不同的 I/O 模式:

    这就是 PinMux 工具需要您指定是计划使用模式0还是模式3的原因:

    如果使用模式3、则只应添加 SPI-cpa 和 SPI-cpol。  但是、如果是这种情况、您必须将最大频率设置为48MHz、并确保引脚多路复用配置正确(即、您可能需要重新生成引脚多路复用并重新运行 perl 脚本)。

    此致、
    Brad

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

    [引用用户="Stefan Thorlacius ]CDN、tshsl-ns =<392>;
    cdns、tsd2d-ns =<392>;
    cdns、tchsh-ns =<100>;
    CDN、tslch-ns =<100>;

    这些选项对于 AM57xx 无效。  AM57xx QSPI 的器件树绑定到 "ti、dra7xxx-QSPI"、这与 drivers/spi/ti_qspi.c 中的驱动程序相关  还有其他 TI 器件、如 K2G 和 AM65xx、它们利用 Cadence IP 和底层驱动程序。  您应该删除基于 AM57xx 的设计的 CDN 参考。

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

    感谢 Brad 为您提供的所有帮助

    在应用您的建议并在另一个定制板上进行试用后、我们就能使其正常工作。

    它在我使用的最初电路板上仍然不起作用、我们认为我的电路板损坏了、需要进一步调查以检查硬件。

    可以关闭此线程

    此致