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.

[参考译文] OSPI-AM243X:带 AM2434_ALV 的定制 MCU-PLUS-SDK 闪存

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1315230/mcu-plus-sdk-am243x-custom-ospi-flash-with-am2434_alv

器件型号:MCU-PLUS-SDK
主题中讨论的其他器件:AM2434SysConfig

您好!

我们选择了 AM2434_ALV 芯片、现在拥有一个定制的评估板、该评估板使用 Micron 的 OSPI-Flash。 使用的闪存是 MT35XU512ABA2G12-0AAT。

我是一个可能需要在闪存驱动程序中进行更改的软件。 这就是我尝试执行 OSPI 闪存诊断工具/项目 software-dl.ti.com/.../EXAMPLES_DRIVERS_OSPI_FLASH_DIAG.html 的原因。

但是、我无法与闪存建立通信、程序无法正确读取制造商 ID 或器件 ID、读取和写入测试也失败:

[OSPI 闪存诊断测试]正在启动...
[OSPI 闪存诊断测试]闪存制造商 ID:0xFF
[OSPI 闪存诊断测试]闪存设备 ID      :0xFFFF
[OSPI 闪存诊断测试]在第一个块上执行闪存擦除...
[OSPI 闪存诊断测试]擦除失败!!
[OSPI 闪存诊断测试]正在执行写入-读取测试...
[OSPI 闪存诊断测试] Wite 失败!!
错误:ospi_flash_diag_test_compare_Buffers:182:OSPI 读取数据不匹配!!
某些测试失败!!

从第一个器件看到的情况来看、选择了 I/O 引脚配置选项2。
SDR x1中的1 =引导
采用 DDR x8封装的2 =引导
是否是闪存在 DDR x8中启动的问题? 对这个主题有什么提示吗?

非常感谢!!

测试对象
CCS 12.4
MCU+ SDK 09.00.00.35

我只能在这里获得一个简短的数据表: www.mouser.com/.../mict_s_a0004925991_1-2291093.pdf。 不过、我有一个类似的芯片、希望闪存命令也相似: datasheet.octopart.com/MT35XU02GCBA1G12-0AAT-Micron-datasheet-138896808.pdf

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

    尊敬的 Dominik:

    您看到此错误的原因可能是、诊断示例实际上期望闪存处于1s1s1s 模式、以与其建立初始通信、然后打印闪存器件的 SFDP。 如果闪存已配置为八进制 DDR 模式、则 SoC 将由于通信协议中的不匹配而发生故障。  

    如果最初无法从闪存中获取 SFDP 表、那么我想提供几个选项:

    1) 1)我们在 SDK 文档中有一组有关闪存支持的指令: AM243x MCU+ SDK:添加对定制闪存器件的支持(TI.com)。 尝试查看这些步骤,但将此情形视为" 案例2:闪存不支持 SFDP。"  这种情况基本上说明了您需要在 SysConfig 中手动填写闪存信息。 获得此信息后、您可以尝试运行不同的闪存示例、例如 SDK 中的 IO 示例。

    2)这更多是一个问题、但您是否通读了 AM243的闪存选择指南以了解此闪存是否与 SoC 兼容? 我也会在这里进行检查、以确认即使在解决给定的问题后也不会发生任何其他潜在冲突。 链接: AM243x OSPI、QSPI 闪存选择指南

    如果有任何这些帮助或您需要更多帮助、请告诉我

    此致!

    丹尼尔   

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

    Daniel、您好!

    感谢您的提示。 我们从此处开始执行了" 案例2:闪存不支持 SFDP "并尝试手动填写 SysConfig。 然而,我们仍然被卡住,请参见 Board_driversOpen ()中的以下调用栈。

    /**
    * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
    * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
    * @cliArgs --device "AM243x_ALV_beta" --package "ALV" --part "ALV" --context "r5fss0-0" --product "MCU_PLUS_SDK_AM243x@09.00.00"
    * @versions {"tool":"1.17.0+3128"}
    */
     
    /**
    * Import the modules used in this configuration.
    */
    const flash      = scripting.addModule("/board/flash/flash", {}, false);
    const flash1     = flash.addInstance();
    const clock      = scripting.addModule("/kernel/dpl/clock");
    const debug_log  = scripting.addModule("/kernel/dpl/debug_log");
    const mpu_armv7  = scripting.addModule("/kernel/dpl/mpu_armv7", {}, false);
    const mpu_armv71 = mpu_armv7.addInstance();
    const mpu_armv72 = mpu_armv7.addInstance();
    const mpu_armv73 = mpu_armv7.addInstance();
    const mpu_armv74 = mpu_armv7.addInstance();
    const mpu_armv75 = mpu_armv7.addInstance();
     
    /**
    * Write custom configuration values to the imported modules.
    */
    flash1.$name                      = "CONFIG_FLASH0";
    flash1.device                     = "CUSTOM_FLASH";
    flash1.fname                      = "MT35X";
    flash1.flashManfId                = "0x2C";
    flash1.cmdSectorErase3B           = "0xD8";
    flash1.cmdSectorErase4B           = "0xDC";
    flash1.cmdWr                      = "0x02";
    flash1.flashOeType                = "1";
    flash1.proto_cmdRegRd             = "0xB5";
    flash1.proto_cmdRegWr             = "0xB1";
    flash1.cmdRd                      = "0x13";
    flash1.strDtr_isAddrReg           = false;
    flash1.dummyClksCmd               = 0;
    flash1.dummyClksRd                = 0;
    flash1.proto_isAddrReg            = false;
    flash1.dummy_isAddrReg            = false;
    flash1.dummy_cmdRegRd             = "0xB5";
    flash1.strDtr_cmdRegRd            = "0xB5";
    flash1.dummy_cmdRegWr             = "0xB1";
    flash1.strDtr_cmdRegWr            = "0xB1";
    flash1.cmdChipErase               = "0xC4";
    flash1.fourByteEnableSeq          = "0xB7";
    flash1.peripheralDriver.$name     = "CONFIG_OSPI0";
    flash1.peripheralDriver.dmaEnable = true;
    flash1.peripheralDriver.phyEnable = true;
     
    const udma                         = scripting.addModule("/drivers/udma/udma", {}, false);
    const udma1                        = udma.addInstance({}, false);
    udma1.$name                        = "CONFIG_UDMA0";
    flash1.peripheralDriver.udmaDriver = udma1;
     
    debug_log.enableUartLog        = true;
    debug_log.uartLog.$name        = "CONFIG_UART_LOG";
    debug_log.uartLog.UART.$assign = "USART0";
     
    mpu_armv71.$name             = "CONFIG_MPU_REGION0";
    mpu_armv71.size              = 31;
    mpu_armv71.attributes        = "Device";
    mpu_armv71.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv71.allowExecute      = false;
     
    mpu_armv72.$name             = "CONFIG_MPU_REGION1";
    mpu_armv72.size              = 15;
    mpu_armv72.accessPermissions = "Supervisor RD+WR, User RD";
     
    mpu_armv73.$name             = "CONFIG_MPU_REGION2";
    mpu_armv73.baseAddr          = 0x41010000;
    mpu_armv73.size              = 15;
    mpu_armv73.accessPermissions = "Supervisor RD+WR, User RD";
     
    mpu_armv74.$name             = "CONFIG_MPU_REGION3";
    mpu_armv74.baseAddr          = 0x70000000;
    mpu_armv74.size              = 21;
    mpu_armv74.accessPermissions = "Supervisor RD+WR, User RD";
     
    mpu_armv75.$name    = "CONFIG_MPU_REGION5";
    mpu_armv75.baseAddr = 0x80000000;
    mpu_armv75.size     = 31;
     
    /**
    * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
    * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
    * re-solve from scratch.
    */
    flash1.peripheralDriver.OSPI.$suggestSolution      = "OSPI0";
    flash1.peripheralDriver.OSPI.CLK.$suggestSolution  = "OSPI0_CLK";
    flash1.peripheralDriver.OSPI.CSn0.$suggestSolution = "OSPI0_CSn0";
    flash1.peripheralDriver.OSPI.DQS.$suggestSolution  = "OSPI0_DQS";
    flash1.peripheralDriver.OSPI.D7.$suggestSolution   = "OSPI0_D7";
    flash1.peripheralDriver.OSPI.D6.$suggestSolution   = "OSPI0_D6";
    flash1.peripheralDriver.OSPI.D5.$suggestSolution   = "OSPI0_D5";
    flash1.peripheralDriver.OSPI.D4.$suggestSolution   = "OSPI0_D4";
    flash1.peripheralDriver.OSPI.D3.$suggestSolution   = "OSPI0_D3";
    flash1.peripheralDriver.OSPI.D2.$suggestSolution   = "OSPI0_D2";
    flash1.peripheralDriver.OSPI.D1.$suggestSolution   = "OSPI0_D1";
    flash1.peripheralDriver.OSPI.D0.$suggestSolution   = "OSPI0_D0";
    debug_log.uartLog.UART.RXD.$suggestSolution        = "UART0_RXD";
    debug_log.uartLog.UART.TXD.$suggestSolution        = "UART0_TXD";

    是的、我们之前了解过 AM243x OSPI、QSPI 闪存选择指南、实际上我们使用了这里提到的闪存"MT35XU512ABA"

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

    尊敬的 Dominik:

    当运行除诊断之外的其他 OSPI 示例时、您是否会遇到相同的问题? 诊断示例不应用于1s1s1s 以外的任何其他模式、因此我认为对于此闪存器件、诊断示例会持续失败

    您是否也可以尝试 使用 SBL NULL 来运行 ospi_flash_io 示例? 是否可以在您的定制电路板中更改引导模式?

    此致!

    丹尼尔

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

    Daniel、您好!

    是的、这已经是调整后的 SysConfig 的 ospi_flash_io 示例。 我们没有使用改变的设置执行 ospi_diag 示例(ospi_diag、不会使用 Flash_...()功能的驱动程序我猜来)。 我们可以切换引导模式、我们具有与 EVM 板上类似的 DIP 开关。 目前我们处于开发引导模式/无引导模式、并通过 CCS 脚本手动进行初始化。

    我认为在刷写和使用 SBL 零引导加载程序时、我们需要可以正常运行的 OSPI 闪存、这就是我们目前通过 CCS 脚本执行 SOC 初始化的原因

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

    尊敬的 Dominik:

    我已和 ROM 专家讨论过这个问题、我们的 SoC 似乎不支持这种器件。 更具体地说、我们的 SoC 无法识别默认以8D 模式引导的闪存。  

    此系列器件确实在闪存选择指南中提到、但我们不知道是否存在以8d 模式开箱即用引导的型号。 您是否可以切换到以1S 模式启动的器件、然后切换到8D?

    此致!

    丹尼尔  

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

    Daniel、您好!

    感谢您提供信息、这是很好的了解。 我们将探索各种可能性。

    此致

    多米尼克

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

    尊敬的 Dominik:

    谢谢、我将根据这些信息提交一个请求单来修改闪存选择指南。 我将关闭此主题帖。 如果您有任何其他问题、请打开新主题。

    此致!

    丹尼尔  

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

    综上所述:我们现在转换为 MT35XU512ABA 1 G12-0AAT 该芯片似乎可以正常工作、我们可以成功执行 ospi_diag flash 示例并获取 parameters/json 打印

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

    尊敬的 Dominik:

    很高兴听到切换器件对您有用、如果您有任何进一步的问题、请告诉我们

    此致!

    丹尼尔