主题中讨论的其他器件: UNIFLASH
您好!
我们正在使用 AM2434芯片设计定制电路板。 当我尝试 通过 UART 刷写 SOC 初始化二进制文件时、收到以下错误消息:
我已完成刷写操作所需的所有步骤。 我在 UART0终端上得到了"C"(在尝试刷写之前、该终端再次关闭)。 OSPI 闪存芯片为 MT35XU512ABA1G12。
通过 JTAG 接口进行刷写正在工作、之后电路板将以 OSPI 模式引导。
有什么想法可能导致问题?
谢谢。
弗洛里
安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 初始化二进制文件时、收到以下错误消息:
我已完成刷写操作所需的所有步骤。 我在 UART0终端上得到了"C"(在尝试刷写之前、该终端再次关闭)。 OSPI 闪存芯片为 MT35XU512ABA1G12。
通过 JTAG 接口进行刷写正在工作、之后电路板将以 OSPI 模式引导。
有什么想法可能导致问题?
谢谢。
弗洛里
安您好!
我根据我们的硬件更改了 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";
尊敬的 Aakash:
记录设置在 SDK9.00.00.35的 sbl_uart_uniflash 示例中进行了预设。 我没有更改任何有关日志记录的内容。 但是、正如您建议的那样、我禁用了"信息日志区域"。 很遗憾、这不会更改错误消息。
感谢您的提示! 很高兴知道、通过 XMODEM 启动 UART 闪存传输后、只有3分钟的时间范围。 但我向您保证,我基本上没有等待超过3分钟来开始转移。 如果出现故障、我也会对电路板进行下电上电、并会尽快重试。
尊敬的 Florian Otte:
您是否已验证 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 模式下引导、刷写的程序正在成功运行。
尊敬的 Florian Otte:
我建议您 在 SDR 模式下使用 clock <= 50MHz。 或者您需要手动配置 PHY -
目前、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 应正在运行并加载实际的引导加载程序。
您好, Florian Otte ,
然而我想知道为什么上面的错误应该与 SBL_UART_uniflash.Release.hs_fs.tiimage 中的闪存设置有关、该错误没有主动执行但只是传输。 因此,无论配置是否正确,至少应在第一步中传输时间?
讲义。 现在、我对您用于 UART 连接的板上的哪些焊盘有点好奇吗?
这将告诉您 ROM 是否在 UART 端口上提供任何输出以及数据是否以115200波特率正确?
此致、
Aakash
您好、Florian:
AM243x 有勘误表。 请参阅勘误表文档 https://www.ti.com/lit/pdf/sprz457中的通报 i2371 。
此问题可能与此通报有关。
谢谢!
安妮塔