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.

[参考译文] AM2432:如何构建新的QSPI闪存设备

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1091387/am2432-how-to-build-for-a-new-qspi-flash-device

部件号:AM2432
主题中讨论的其他部件:DP8.3869万TPIC2810TCA6424sysconfig

亲爱的Champs:

我的客户使用AM2432ALX (11x 11 mm)封装开发了他们的自定义主板,并尝试通过以下步骤为其闪存构建自定义闪存驱动程序。

其闪存为w25g32jv。

https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/latest/exports/docs/api_guide_am243x/CUSTOM_FLASH_SUPPORT_GUIDE.html

它们成功地达到以下日志。

[OSPI闪存诊断测试]正在启动...
[OSPI Flash Diagnostic Test] Flash Manufacturer ID:0xEF
[OSPI闪存诊断测试]闪存设备ID   :0x4016
[OSPI Flash Diagnostic Test] Executing Flash Erase on First block...(OSPI闪存诊断测试)
[OSPI闪存诊断测试]完成!!!
[OSPI Flash Diagnostic Test] Performing Write-Read Test...(OSPI闪存诊断测试)
[OSPI Flash Diagnostic Test] Write-Read Test Passed!(OSPI闪存诊断测试)
[OSPI闪存诊断测试] SFDP信息:
===========================================================================================
           SFDP            
===========================================================================================
SFDP主要修订版            :0x1
SFDP次要修订版            :0x5
此表中的参数标题数:1.

此闪存中附加参数表的类型
----------------

Flash_NorXspiDevDefines gFlashNorXspiDeviceDefines_<part-number>={

  .XSPI_NOR_CMD_RSTEN = 0x66,
  .XSPI_NOR_CMD_RSTMEM = 0x99,
  .XSPI_NOR_CMD_WREN = 0x06,
  .XSPI_NOR_CMD_WRREG = 0x00,
  .XSPI_NOR_CMD_BULAT_ERASE = 0xC7,
  .XSPI_NOR_CMD_Sector_erase_3B = 0x20,
  .XSPI_NOR_CMD_Sector_erase_4B = 0x20,
  .XSPI_NOR_CMD_BLOCK清除_3B = 0xD8,
  .XSPI_NOR_CMD_BLOCK ERASE_4B = 0xD8,
  .XSPI_NOR_CMD_PAGE_PROG_3B = 0x02,
  .XSPI_NOR_CMD_PAGE_PROG_4B = 0x00,
  .XSPI_NOR_CMD_RDSR = 0x05,
  .XSPI_NOR_CMD_RDREG = 0x00,
  .XSPI_NOR_CMD_RDID = 0x9F,
  .XSPI_NOR_CMD_READ = 0x03,
  .XSPI_NOR_CMD_888_SDR_READ = 0x00,
  .XSPI_NOR_CMD_888_DDR_Read = 0x00,
  .XSPI_NOR_CMD_444_SDR_READ = 0xEB,
  .XSPI_NOR_CMD_444_DDR_read = 0x00,
  .XSPI_NOR_CMD_114_READ = 0x6B,
  .XSPI_NOR_SR_WIP = 0,
  .XSPI_NOR_SR_WEL = 0,
  .XSPI_NOR_RDID_NUM_Bytes = 5,
  .XSPI_NOR_MANF_ID = 0xEF,
  .XSPI_NOR_DEVICE_ID = 0x4016,
  .XSPI_NOR_114_READ_MODE_CLKS =0,
  .XSPI_NOR_114_READ_DUMM_CYCLES = 8,
  .XSPI_NOR_444_READ_MODE_CLKS = 2,
  .XSPI_NOR_444_READ_DUMM_CYCLES = 0,
  .XSPI_NOR_444_READ_DUMM_CYCLES _LC = 0x00,
  .XSPI_NOR_Quad_CMD_READ_DUMM_CYCLES = 0x00,
  .XSPI_NOR_XICT_READ_DUMM_CYCLE = 0,
  .XSPI_NOR_XICT_READ_DUMM_CYCLE = 0x00,
  .XSPI_NOR_XICT_DDR_RDSR_DUMM_CYCLE = 0,
  .XSPI_NOR_XICT_DDR_RDREG_ADDR_Bytes = 0,
  .XSPI_NOR_XICT_DDR_WRREG_ADDR_Bytes = 0,
  .XSPI_NOR_XICT_DDR_RDVREG_DUMM_CYCLE = 0,
  .XSPI_NOR_XICT_DDR_RDNVREG_DUMM_CYCLE = 0,
  .XSPI_NOR_XICT_RDSFDP_DUMM_CYCLE = 0,
  .XSPI_NOR_XICT_RDSFDP_ADDR_TYPE = 0,
  .XSPI_NOR_WRR_WRRITE_TIMEOUT = 7040,
  .xspi_nor_bulate_erase_timeout = 1200万,
  .XSPI_NOR_PAGE_PROG_TIMEOUT = 704,
  .XSPI_NOR_VREG_OFFSET = 0x0,
  .XSPI_NOR_NVREG_OFFSET = 0x0,
  .XSPI_NOR_Quad_MODE_CFG_ADDR = 0x0,
  .XSPI_NOR_QUAD_MODE_CFG_Bit_location = 0x0,
  .XSPI_NOR_DDR_XICT_MODE_CFG_ADDR = 0x0,
  .XSPI_NOR_DDR_XICT_MODE_CFG_Bit_location = 0x0,
  .XSPI_NOR_DUMM_CYCLE CFG_ADDR = 0x0,
  .XSPI_NOR_FLASH_SIZE = 419.4304万,
  .XSPI_NO_PAGE_SIZE = 256,
  .XSPI_NOR_BLOCK = 6.5536万,
  .XSPI_NOR_Sector_size = 4096,
  addrByteSupport =0,
  .dtrSupport = 0,
  .qeType = 4,
  .seq444Enable ={ 1,0,0,0,1},
  .seq444Disable ={ 1, 0, 0, 1},
  .oeType = 0,
  .cmdExtType =0,
  .byteOrder = 0,
};

所有测试均已通过!!

 但是,在stet 4中,由于以下错误,它们无法生成。

~~~~~~~~~

构建文件:"SYSCFG/ti_board_open_close.c"
正在调用:ARM编译器
d:/ti/ccs1100/cs/tools/compiler/ti-CGT-armlvm_armlvm_bin/tiarmclang.exe" 1.3 -c -mcpu=cortex-r5-mflo-abi=hard -mfp=vfpvpv3-d16 -mbit-endian -I:1.3 /ti/ti/ccs=cscsf_lip_mscf_mscp_sp-f_wf_ex-f_ad_mscf_wip-f_f_mscp_wf_dsp-f_sp-f_dip-f_dip-f_dip-f_dip-dip-f_dsp_dsp_dsprobf_dip-f_dip-f_dip-f_mscf_lip-f_dip-f_mscf_ex-dip-dip-f_dip-f_dip-f_ex-f_dip-dip-dip-f_dip-f_dip-dip-  
subdir_rules.mk:30:目标'syscfg/ti_board_open_close.o'的配方失败
SYSCFG/ti_board_open_close.c:68:19:错误:使用未声明的标识符'gFlashNorQspiAttrs_W25Q32JV';您的意思是'gFlashNorQspiAttrs_S25HL512T'吗?
    .attr =&gFlashNorQspiAttrs_W25Q32JV,
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~
         gFlashNorQspiAttrs_S25HL512T

~~~~~~~~~~~~

因此,他们尝试通过以下步骤为其自定义闪存构建闪存驱动程序。

https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_02_00_31/exports/docs/api_guide_am243x/MAKEFILE_BUILD_PAGE.html#autotoc_md179

但是,他们无法在make文件中找到与QSPI闪存相关的文件,如下所示。

~~~~~~~~~~

位于\MCU_PLUS_SDK_am243x_08_01_00_36\SOURCE \makefile.am243x.r5f.ti-arm-clang

 files_common:=\
  eeprom.c \
  eeprom_at24c.c \
  ethphy.c \
  ethphy_dp8.3869万.c \
  flash.c \
  flash_nor_ospi.c \
  FLASH_NOR_ospi_DEVICE_MX25LM2.5645万G.c \
  flash_no_xspi.c \
  flash_nor_xspi_device_S28HS512T.c \
  flash_nor_ospi_quad.c \
  FLASH_NOR_ospi_quad_device_S25HL512T.c \
  LED.c \
  LED_GPIO。c \
  LED_tpic2810.c \
  LED_ioexp.c \
  ioexp_tca6424.c \

~~~~~~~~

他们在'\MCU_PLUS_SDK_am243x_08_01_00_36\SOURC\board\FLASH\'文件夹中找到FLASH_NOR_QSPI_DEVICE_MX25V1635F.c文件,并将这些文件添加到makefile中。

当他们使用此新makefile再次构建它时,他们遇到了以下错误。

~~~~~

files_common:=\
 .....
  FLASH_NO_QSPI.c \
#  flash_nor_QSPI_device_W25Q32JV。c \
  FLASH_NO_QSPI_DEVICE_MX25V1635F.c \

~~~~~~

D:\ti\MCU_plus_SDK_am243x_08_01_00_36>gmake -s libs profile=release
 编译:Board.am243x.r5f.ti-arm-clang.release.lib: eeprom/eeprom.c.
 编译:Board.am243x.r5f.ti-arm-clang.release.lib: eeprom/eeprom_at24c.c.
 编译:Board.am243x.r5f.ti-arm-clang.release.lib:ethphy/ethphy.c.
 编译:Board.am243x.r5f.ti-arm-clang.release.lib:ethphy/ethphy_dp8.3869万.c
 编译:Board.am243x.r5f.ti-arm-clang.release.lib: flash/flash.c.
 编译:Board.am243x.r5f.ti-arm-clang.release.lib:flash/flash_nor_ospi.c.
 编译:Board.am243x.r5f.ti-arm-clang.release.lib:flash/flash_nor_ospi_device_MX25LM2.5645万G.c.
 编译:Board.am243x.r5f.ti-arm-clang.release.lib:flash/flash_nor_qspi.c.
flash/flash_nor_qspI.c:58:30:错误:未知类型名称'QSPI_handle ';您的意思是'OSPI_handle '吗?
Int32_t QSPI_norFlashCmdRead (QSPI_handle handle,uint8_t cmd,uINT32_t cmdAddr,uint8_t *rxBuf,UINT32_t rxLen)
               ^~~~~~~~~~~
               OSI_handle
D:/ti/mcu_plus_sdk_am243x_08_01_00_36/sources\drivers/ospi/V0/ospi.h:73:15:注:'OSPI_handle '声明在此处
typedef void *OSPI_handle;

~~~~~~~~~~

但是,他们无法找到定义'QSPI_Handle '的位置。

请帮助他们为其自定义闪存构建闪存驱动程序吗?

他们只发现在 "ti\MCU_plus_SDK_am243x_08_01_00_36\SOURCE \board\FLASE"文件夹中定义的4种闪存类型,如下所示。

 下面是什么XSPI和ospi_quad?

-ospi:八进制SPI

- ospi_quad:?

-QSPI:四路SPI

- xspi:?

谢谢,此致,

SI。

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

    SI,您好!

    我无法访问您共享的说明链接。 它们是否与此处的说明相同? https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_02_00_31/exports/docs/api_guide_am243x/CUSTOM_FLASH_SUPPORT_GUIDE.html

    pingshan zhao 说:
    但是,在stet 4中,由于以下错误,它们无法构建。

    他们是在步骤4还是步骤2中失败? 这是步骤2: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_02_00_31/exports/docs/api_guide_am243x/CUSTOM_FLASH_SUPPORT_GUIDE.html#autotoc_md259

    "确认文件构建和新闪存设备在sysconfig中是可选的。 我们现在可以根据新的闪存设备更新文件"

    他们是如何为新的Winbond设备实现文件的? 他们是否从复制<SDK>\MCU_plus_SDK_am243x_08_02_00_31\SOURCE \board\flash中的现有文件集开始? 如果是,他们复制了哪组文件?

    此致,
    弗兰克

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

    您好,Frank,

    I无法404.2021万无法访问您共享的说明链接。 它们是否与此处的说明相同? https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/08_02_00_31/exports/docs/api_guide_am243x/CUSTOM_FLASH_SUPPORT_GUIDE.html

    是的。您的链接是正确的。

    它们在步骤4中失败。

    他们404.2021万他们是如何为新Winbond设备实施文件的? 他们是否从复制<SDK>\MCU_plus_SDK_am243x_08_02_00_31\SOURCE \board\flash中的现有文件集开始? 如果是,他们复制了哪组文件?[/QUOT]

    这是我要问的。他们应该为AM2432ALX软件包的QSPI修改哪些文件?

    他们复制了'FLASH_NOR_QSPI.c'和'FLASH_NOR_QSPI_DEVICE_MX25V1635F.c'并对其进行修改。

    但他们遇到了'未知类型名称'QSPI_handle '的错误。

    谢谢,此致,

    SI。

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

    SI,您好!

    我可以在这里澄清混淆。 我们在这里使用的术语源于我们必须使用AM243x中的OSPI驱动程序支持四闪和八闪。

    flash_nor_ospi -定制的闪存驱动程序仅适用于MXxx闪存设备,以支持macronix闪存开箱即用
    flash_nor_ospi_quad -闪存驱动程序基于OSPI驱动程序,但设计为支持Quad闪存(根据您的使用案例,我认为您必须在此处进行更改)
    flash_nor_xspi -闪存驱动程序设计用于支持符合JEDEC xSPI协议的八进制闪存

    我建议您创建一个类似于 FLASH_NOR_ospi_quad_device_W25Q32JV.c 的文件,类似于FLASH_NOR_ospi_quad_device_S25HL512T.c文件,并根据SFDP输出更改参数。 您可以在flash_nor_ospi_quad.c文件中进行的任何功能更改。 不要使用AM243x makefile中的flash_nor_qspi.c文件。 它们基于不同的QSPI驱动程序(不是AM243x的一部分),这就是为什么它被排除在makefile之外的原因。  

    请告诉我需要更多帮助。

    此致,
    Anand Mahadevan SS

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

    您好,Anand:

    感谢您的澄清。

    它们的串行QSPI闪存是 W25Q32JV,无法使用OSP_QUAN文件构建它,因为它们找不到下面的NOR_CMD_WRREG和NOR_CMD_RDREG等字段。

    当他们将这些值添加到'00'时,他们未能运行Flash_Open(),并且在该函数中挂起。

    ~~~~

      NOR_CMD_SRSTE            = 0x66U,//启用重置
      NOR_CMD_SFRST            = 0x99U,//重置设备
      NOR_CMD_WREN             = 0x06U,//写入启用
      NOR_CMD_WRREG            = 0x00U,// 0x71 -> 00,不存在

    ...

      NOR_CMD_RDREG            = 0x00U,// 0x65 -> 00,?

    ~~~~

    请您帮助您从 下面的Winbond串行闪存数据表中提取这些值-NOR_CMD_WRREG,NOR_CMD_RDREG吗?

    https://www.winbond.com/resource-files/W25Q32JV%20RevI%2005042021 %20Plus.pdf

    谢谢,此致,

    SI。

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

    SI,您好!

    我不熟悉SFDP规格或S25HL512T/W25Q32JV闪存。

    在W25Q32JV数据表中,我注意到有三个状态/配置寄存器,请参见6.1 状态寄存器。

    每个status/config寄存器都有一个单独的读/写命令,请参见:

    • 7.2 4读取状态寄存器-1 (05h),状态寄存器-2 (35h)和状态寄存器-3 (15h)
    • 7.2 5写入状态寄存器-1 (01h),状态寄存器-2 (31h)和状态寄存器-3 (11h)

    Diagostics程序输出的NOR_CMD_RDSR命令(0x05)似乎映射到W25Q32JV上的Read Status Register-1(05h)命令。

    通过source/board/flash/flash_nor_ospi_quad.c查看,我只看到使用了一个读取寄存器命令:

    <SDK>/source/board/flash/flash_nor_ospi_quad.c:141:   cmd   =设备定义->nor_CMD_RDREG;

    同样,只使用一个写寄存器命令:

    <SDK>/source/board/flash/flash_nor_ospi_quad.c:165:       cmd   =设备定义->nor_CMD_WRREG;
    <SDK>/source/board/flash/flash_nor_ospi_quad.c:218:       cmd   =设备定义->nor_CMD_WRREG;
    <SDK>/source/board/flash/flash_nor_ospi_quad.c:287:           cmd   =设备定义->nor_CMD_WRREG;

    因此,我不知道驱动程序如何读取/写入所有状态/配置寄存器。

    我假定挂起发生在驱动程序代码中的某个位置。 挂起发生在哪里? 它是在读取寄存器还是写入寄存器命令上? 驱动程序正在尝试读取或写入哪个寄存器?

    Anand,请您评论一下吗?

    此致,
    弗兰克

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

    您好,SI,Frank,

    混淆可能是由于cypress和Winbond闪存之间的配置寄存器结构存在根本差异。 Cypress闪存具有多个配置寄存器,可使用特定的寄存器读写命令(0x71,0x65等)读取,并可相应地进行更改。 Winbond闪存不是这种情况。 它使用多个状态寄存器来实现类似的功能。 因此,在这种情况下,需要从闪存驱动程序代码中省略一些帮助程序函数。 如果您告诉我您计划运行哪种QSPI模式,我可以提供一个逐步解决方案来启用Winbond闪存:
    1-1-4或4-4-4

    此外,就像Frank所问的,它到底挂起了什么功能?

    此致,
    Anand Mahadevan SS