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.

[参考译文] AM2434:通过 UART 刷写 SOC 初始化二进制文件在第一步中失败

Guru**** 2425930 points
Other Parts Discussed in Thread: AM2434, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1323443/am2434-flashing-soc-initialization-binary-via-uart-fails-at-first-step

器件型号:AM2434
主题中讨论的其他器件: UNIFLASH

您好!

我们正在使用 AM2434芯片设计定制电路板。 当我尝试 通过 UART 刷写 SOC 初始化二进制文件时、收到以下错误消息:

我已完成刷写操作所需的所有步骤。 我在 UART0终端上得到了"C"(在尝试刷写之前、该终端再次关闭)。 OSPI 闪存芯片为 MT35XU512ABA1G12。

通过 JTAG 接口进行刷写正在工作、之后电路板将以 OSPI 模式引导。

有什么想法可能导致问题?

谢谢。

弗洛里

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

    尊敬的  Florian Otte:

    您是否更改了 syscfg 设置中的任何设置? 您是否可以共享更新的 syscfg 设置?

    此致、
    Aakash

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

    您好!

    我根据我们的硬件更改了 OSPI 闪存和 DDR 设置。

    /**
     * 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 bootloader  = scripting.addModule("/drivers/bootloader/bootloader", {}, false);
    const bootloader1 = bootloader.addInstance();
    const ddr         = scripting.addModule("/drivers/ddr/ddr", {}, false);
    const ddr1        = ddr.addInstance();
    const mmcsd       = scripting.addModule("/drivers/mmcsd/mmcsd", {}, false);
    const mmcsd1      = mmcsd.addInstance();
    const uart        = scripting.addModule("/drivers/uart/uart", {}, false);
    const uart1       = uart.addInstance();
    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.protocol                      = "1s_1s_1s";
    flash1.device                        = "CUSTOM_FLASH";
    flash1.fname                         = "MT35XU512ABA1G12";
    flash1.flashManfId                   = "0x2C";
    flash1.flashBlockSize                = 131072;
    flash1.cmdBlockErase3B               = "0xD8";
    flash1.cmdSectorErase3B              = "0x20";
    flash1.cmdRd                         = "0x03";
    flash1.cmdWr                         = "0x02";
    flash1.dummyClksCmd                  = 0;
    flash1.dummyClksRd                   = 0;
    flash1.proto_isAddrReg               = false;
    flash1.dummy_isAddrReg               = false;
    flash1.strDtr_isAddrReg              = false;
    flash1.resetType                     = "0x30";
    flash1.deviceBusyType                = "0";
    flash1.cmdExtType                    = "NONE";
    flash1.srWel                         = 0;
    flash1.xspiWipRdCmd                  = "0x00";
    flash1.xspiWipReg                    = "0x00000000";
    flash1.idNumBytes                    = 5;
    flash1.fourByteEnableSeq             = "0x36";
    flash1.peripheralDriver.$name        = "CONFIG_OSPI0";
    flash1.peripheralDriver.dmaEnable    = true;
    flash1.peripheralDriver.inputClkFreq = 200000000;
    
    bootloader1.bootMedia = "MEM";
    bootloader1.$name     = "CONFIG_BOOTLOADER_MEM";
    
    ddr1.$name                    = "CONFIG_DDR0";
    ddr1.ddrConfigIncludeFileName = "C:\\Users\\11000839\\workspace_v12.4\\sbl_uart_uniflash_am243x-evm_r5fss0-0_nortos_ti-arm-clang\\board_ddrReginit.h";
    
    mmcsd1.$name        = "CONFIG_MMCSD0";
    mmcsd1.moduleSelect = "MMC0";
    mmcsd1.MMC0.$assign = "MMC0";
    
    uart1.$name        = "CONFIG_UART0";
    uart1.intrEnable   = "DISABLE";
    uart1.UART.$assign = "USART0";
    
    const udma                         = scripting.addModule("/drivers/udma/udma", {}, false);
    const udma1                        = udma.addInstance({}, false);
    udma1.$name                        = "CONFIG_UDMA0";
    flash1.peripheralDriver.udmaDriver = udma1;
    
    debug_log.enableCssLog      = false;
    debug_log.enableLogZoneInfo = true;
    
    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.accessPermissions = "Supervisor RD+WR, User RD";
    mpu_armv74.baseAddr          = 0x70000000;
    mpu_armv74.size              = 21;
    
    mpu_armv75.$name    = "CONFIG_MPU_REGION4";
    mpu_armv75.size     = 31;
    mpu_armv75.baseAddr = 0x80000000;
    
    /**
     * 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";
    uart1.UART.RXD.$suggestSolution                    = "UART0_RXD";
    uart1.UART.TXD.$suggestSolution                    = "UART0_TXD";
    

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

    您好、Florian:

    我认为您不需要设置-

    debug_log.enableLogZoneInfo 为 true。 您是否可以尝试清除并测试它?

    此外,Pro-tip:您只有180s 的时间用于设备自身重置,并为 XMODEM 启动新的数据包/通信通道。 我建议您在复位后立即通过 XMODEM 启动通信/传输。

    此致、
    Aakash

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

    尊敬的 Aakash:

    记录设置在 SDK9.00.00.35的 sbl_uart_uniflash 示例中进行了预设。 我没有更改任何有关日志记录的内容。 但是、正如您建议的那样、我禁用了"信息日志区域"。 很遗憾、这不会更改错误消息。

    感谢您的提示! 很高兴知道、通过 XMODEM 启动 UART 闪存传输后、只有3分钟的时间范围。 但我向您保证,我基本上没有等待超过3分钟来开始转移。 如果出现故障、我也会对电路板进行下电上电、并会尽快重试。

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

    尊敬的 

    您是否已验证 FLASH_OPEN 是否成功 MT35XU512ABA1G12?  在对 SBL UART Uniflash 重新使用相同的设置之前,您是否在此示例- software-dl.ti.com/.../EXAMPLES_DRIVERS_OSPI_FLASH_IO.html 上运行过它 

    我仍然认为、这可能是闪存配置的故障。

    我希望这对您有所帮助。

    此致、
    Aakash

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

    尊敬的 Aakash:

    是的、我尝试了 OSPI_FLASH_IO 示例。 首先、我运行 OSPI_FLASH_DIAG 示例以获取串行闪存可发现参数(SFDP)。 我将提供的.json 文件加载到 OSPI_FLASH_IO 的 syscfg 设置中、并且所有测试都通过了。 根据 MT35XU512ABA1G12的数据表、我只需手动更改了输入时钟频率(更改为200MHz)和二手协议(1S-1S-1S)。

    闪存器件似乎正常工作、因为通过 JTAG 进行刷写是可行的。 之后还可以在 OSPI 模式下引导、刷写的程序正在成功运行。

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

    尊敬的 

    我建议您 在 SDR 模式下使用 clock <= 50MHz。 或者您需要手动配置 PHY -

    开发定制闪存驱动程序常见问题解答- https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1230063/faq-mcu-plus-sdk-am243x-faq-how-to-debug-develop-migrate-the-flash-driver-for-custom-flash-on-non-ti-evm-ospi-xspi

    定制算法上的 PHY 调优- https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1241653/faq-mcu-plus-sdk-am243x-how-to-use-tune-phy-with-mcu_plus_sdk-for-ospi-controller

    目前、PHY 仅针对8d-8d-8d (以及4D-4D-4D)进行了调优。 我非常惊讶它能够在1s-1s 模式下工作。

    另一个选项是、您可以使用该常见问题解答针对 SBL 中的任何故障调试 SBL_UART_UNIFLASH - https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1119575/faq-mcu-plus-sdk-am243x-how-to-debug-sbl_qspi-for-am263-and-am273-or-sbl_ospi-for-am243-or-an-application-which-is-booted-via-ospi-qspi-boot

    我希望这对您有所帮助。

    此致、
    Aakash

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

    尊敬的 Aakash:

    感谢您的答复。 基于本文档选择了闪存器件: https://www.ti.com/lit/po/sprt764a/sprt764a.pdf?ts = 1707904551984

    -"在 OSPI 引导模式下,闪存必须支持八路输出快速读取(操作码0x8B)和1S-1S-8S 传输
    协议"

    -"默认情况下闪存不能在八进制模式下引导"

    我们从使用 MT35XU512ABA_ 2_ G12、但根据这一观点:

    该芯片将无法正常工作。 首次测试失败。 因此、我们切换到了 MT35XU512ABA_ 1_ G12和它的工作。 我根据 TI AM243x 闪存选择指南更改了相应的设置(协议和频率(200MHz /输入时钟分频器4 = 50MHz)。

    然而、我想知道为什么上面的错误应该与 SBL_UART_uniflash.Release.hs_fs.tiimage 中的闪存设置相关、该文件未主动执行而只是传输。 因此、时间、无论配置是否正确、至少应该在第一步中传输?

    根据我仅在第2步中理解、SBL_UART_uniflash.Release.hs_fs.tiimage 应正在运行并加载实际的引导加载程序。

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

    您好, 

    然而我想知道为什么上面的错误应该与 SBL_UART_uniflash.Release.hs_fs.tiimage 中的闪存设置有关、该错误没有主动执行但只是传输。 因此,无论配置是否正确,至少应在第一步中传输时间?

    讲义。 现在、我对您用于 UART 连接的板上的哪些焊盘有点好奇吗?

    您能查看本常见问题解答吗- https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1170785/faq-mcu-plus-sdk-am243x-how-to-identify-if-the-device-is-gp-device-or-hs-device

    这将告诉您 ROM 是否在 UART 端口上提供任何输出以及数据是否以115200波特率正确?

    此致、
    Aakash

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

    尊敬的 Aakash:

    我按要求执行了链接的脚本。 输出:

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

    尊敬的 Aakash:

    显示的输出在某种程度上对您分析问题有帮助吗?

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

    您好、Florian:

    AM243x 有勘误表。 请参阅勘误表文档 https://www.ti.com/lit/pdf/sprz457中的通报 i2371 。

    此问题可能与此通报有关。  

    谢谢!

    安妮塔