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.
大家好、我是 TI 专家。
我成功刷写到sbl_null.release.hs_fs.tiimage
LP-AM243开发板上。 但是、当我切换到产品板时、刷写过程一直失败。 我已将引导模式设置为 UART 引导模式、我可以看到从 UART0发送的字符"C"。 然后、我使用了 Python 脚本{SDK_folder}/tools/boot/uart_uniflash.py
和以下命令:
python3 uart_uniflash.py -p COM4 --cfg=sbl_prebuilt/am243x-lp/default_sbl_null.cfg
结果一致表明、在执行第二个命令期间进度会在0%停止、直到发生超时。
在检查 Python 脚本时、似乎在发送第二个文件时、MCU 没有任何响应。 您能帮助我确定潜在的问题吗? 可能存在与硬件相关的方面导致了这种情况? 谢谢你。
今天我使用逻辑分析仪对 UART 进行了一个实验。 在执行第一条命令期间、我观察到 MCU 按照 Xmodem 的行为、对 Python 脚本做出响应。 但是、在执行第二条命令时、没有传输。
根据我的理解、第一条命令'--flash-writer=sbl_prebuild/am243x-lP/sbl_uart_uniflash.release.hs_fs.tiimage、'发送'sbl_uart_uniflash.release.hs_fs.tiimage'以让 ROM 引导加载程序接收到 RAM 中。 传输完成后、ROM 引导应跳转至 RAM、从而允许'BL_UART_uniflash.release.hs_fs.tiimage' SBL 启动并接收随后的 SBL 将其存储到外部闪存中。
但是、在这个过程中出现了问题。 在 ROM 引导程序接收到数据并跳转到 RAM 以从 SBL 启动后、SBL 似乎不在 RAM 中或可能卡在开始位置、从而导致失败。 这只是一个假设,这是问题吗?
我有几个问题:
1.当 ROM 引导收到第一个 SBL 时、此 SBL 是否存储在 RAM 中?
2、SDK 文档、特别是"引导流迁移指南"提到"BL_*.release.tiimage"包含 SYSFW、表示我可能不需要将 SYSFW 更新到 MCU 中。 但是、在我对{SDK_FOLD}/examples/drivers/boot/sbl_uart_uniflash 项目的研究中、我在主函数中找到了"bootloader_socWaitForFWBoot ()"函数、该函数似乎等待来自 SYSFW 的事件。 我担心我可能忘记将 SYSFW 刷写到 MCU 中。
3.我试图用 CCS 编译{SDK_FOLDER}/examples/drivers/boot/sbl_uart_uniflash 工程、但编译失败。 您能否提供有关解决此问题的指导?
感谢您的帮助!
Larry、您好!
在您的生产电路板中、您使用哪个闪存? 是否与 LP-AM243x 具有相同的闪存?
如果不是这样的话、您需要重新检查 SBL_UART_uniflash 的闪存配置。 在跳转到 uniflash 之前、我的建议是通过此流程验证相同的内容- https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/latest/exports/docs/api_guide_am243x/CUSTOM_FLASH_SUPPORT_GUIDE.html
此致、
Aakash
尊敬的 Aakash:
感谢您的答复。 我们将使用的生产闪存是 W25Q16JV、它不同于 LP-AM243x。
我的同事和我都尝试从 LP-AM243x 中拆焊闪存、并用 W25Q16JV 替换它。 在使用 CCS 脚本运行"OC 初始化"后、我加载了"OSPI 闪存诊断"示例、该示例成功运行。 我收到了以下日志:
{ "flashSize": 2097152, "flashPageSize": 256, "flashManfId": "0xEF", "flashDeviceId": "0x4015", "flashBlockSize": 65536, "flashSectorSize": 4096, "cmdBlockErase3B": "0xD8", "cmdBlockErase4B": "0xD8", "cmdSectorErase3B": "0x20", "cmdSectorErase4B": "0x20", "protos": { "p111": { "isDtr": false, "cmdRd": "0x03", "cmdWr": "0x02", "modeClksCmd": 0, "modeClksRd": 0, "dummyClksCmd": 0, "dummyClksRd": 0, "enableType": "0", "enableSeq": "0x00", "dummyCfg": null, "protoCfg": null, "strDtrCfg": null }, "p112": { "isDtr": false, "cmdRd": "0x3B", "cmdWr": "0x02", "modeClksCmd": 0, "modeClksRd": 0, "dummyClksCmd": 0, "dummyClksRd": 8, "enableType": "0", "enableSeq": "0x00", "dummyCfg": null, "protoCfg": null, "strDtrCfg": null }, "p114": { "isDtr": false, "cmdRd": "0x6B", "cmdWr": "0x02", "modeClksCmd": 0, "modeClksRd": 0, "dummyClksCmd": 0, "dummyClksRd": 8, "enableType": "4", "enableSeq": "0x00", "dummyCfg": null, "protoCfg": null, "strDtrCfg": null }, "p118": null, "p444s": { "isDtr": false, "cmdRd": "0xEB", "cmdWr": "0x02", "modeClksCmd": 0, "modeClksRd": 2, "dummyClksCmd": 0, "dummyClksRd": 0, "enableType": "4", "enableSeq": "0x11", "dummyCfg": { "isAddrReg": false, "cmdRegRd":"0x00", "cmdRegWr":"0x00", "cfgReg":"0x00000000", "shift":0, "mask":"0x00", "bitP":0 }, "protoCfg": { "isAddrReg": false, "cmdRegRd": "0x00", "cmdRegWr": "0x00", "cfgReg": "0x00000000", "shift": 0, "mask": "0x00", "bitP": 0 }, "strDtrCfg": { "isAddrReg": false, "cmdRegRd": "0x00", "cmdRegWr": "0x00", "cfgReg": "0x00000000", "shift": 0, "mask": "0x00", "bitP": 0 } }, "p444d": { "isDtr": false, "cmdRd": "0xEB", "cmdWr": "0x02", "modeClksCmd": 0, "modeClksRd": 2, "dummyClksCmd": 0, "dummyClksRd": 0, "enableType": "4", "enableSeq": "0x11", "dummyCfg": { "isAddrReg": false, "cmdRegRd":"0x00", "cmdRegWr":"0x00", "cfgReg":"0x00000000", "shift":0, "mask":"0x00", "bitP":0 }, "protoCfg": { "isAddrReg": false, "cmdRegRd": "0x00", "cmdRegWr": "0x00", "cfgReg": "0x00000000", "shift": 0, "mask": "0x00", "bitP": 0 }, "strDtrCfg": { "isAddrReg": false, "cmdRegRd": "0x00", "cmdRegWr": "0x00", "cfgReg": "0x00000000", "shift": 0, "mask": "0x00", "bitP": 0 } }, "p888s": null, "p888d": null, "pCustom": { "fxn": null } }, "addrByteSupport": "0", "fourByteAddrEnSeq": "0x80", "cmdExtType": "NONE", "resetType": "0x30", "deviceBusyType": "1", "cmdWren": "0x06", "cmdRdsr": "0x05", "srWip": 0, "srWel": 1, "cmdChipErase": "0xC7", "rdIdSettings": { "cmd": "0x9F", "numBytes": 5, "dummy4": 0, "dummy8": 0 }, "xspiWipRdCmd": "0x00", "xspiWipReg": "0x00000000", "xspiWipBit": 0, "flashDeviceBusyTimeout": 5120000, "flashPageProgTimeout": 704 }
接下来、我将该 JSON 数据加载到 sbl_uart_uniflash syscfg 中、然后执行 uart_uniflash.py。 虽然两个命令执行无错误、但状态结果仍显示失败、如下所示:
Parsing config file ... Parsing config file ... SUCCESS. Found 2 command(s) !!! Executing command 1 of 2 ... Found flash writer ... sending sbl_prebuilt/am243x-lp/sbl_uart_uniflash_test.Release.hs_fs.tiimage Sent flashwriter sbl_prebuilt/am243x-lp/sbl_uart_uniflash_test.Release.hs_fs.tiimage of size 296762 bytes in 28.55s. Executing command 2 of 2 ... Command arguments : --file=sbl_prebuilt/am243x-lp/sbl_null_one_core.Release.hs_fs.tiimage --operation=flash --flash-offset=0x0 Sent sbl_prebuilt/am243x-lp/sbl_null_one_core.Release.hs_fs.tiimage of size 260737 bytes in 50.51s. [STATUS] ERROR: Flash verify failed !!! All commands from config file are executed !!!
您能帮助我确定这种情况下可能有什么问题吗?
Larry、您好!
在直接尝试 sbl_uart_uniflash 之前、请尝试 ospi_flash_io 等更简单的示例、以确保新的闪存配置正常工作。 FLASH_verify 失败意味着它无法从闪存读回。 配置中可能缺少某些内容。 您能否尝试 ospi_flash_io 示例并让我知道结果?
此致、
阿南德·马哈德万·SS
Anand、您好!
感谢您的答复。 我已经确定了根本原因、似乎 syscfg 设置不正确、导致闪存验证失败。 解决此问题后、我的产品板现在可以正常工作。 感谢您的帮助!
此致、
拉里