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.

[参考译文] AM2431:通过 UART 刷写 SBL

Guru**** 2524460 points
Other Parts Discussed in Thread: LP-AM243, UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1300862/am2431-flashing-sbl-by-uart

器件型号:AM2431
主题中讨论的其他器件:LP-AM243UNIFLASH

大家好、我是 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 设置不正确、导致闪存验证失败。 解决此问题后、我的产品板现在可以正常工作。 感谢您的帮助!

    此致、

    拉里