主题中讨论的其他器件:TMDX570LC43HDK、 HALCOGEN、 TMS570LS1224
大家好、
用于 Hercules 的 UART 引导加载程序是 TMS570LS12x MCU 支持 TMDX570LC43HDK 所需的
http://www.ti.com/lit/zip/spna192。
如何在 HALCoGen 中为 UART 引导加载程序配置 Hercules TMDX570LC43HDK、以及所有修改需要在代码中执行什么操作?
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.
大家好、
用于 Hercules 的 UART 引导加载程序是 TMS570LS12x MCU 支持 TMDX570LC43HDK 所需的
http://www.ti.com/lit/zip/spna192。
如何在 HALCoGen 中为 UART 引导加载程序配置 Hercules TMDX570LC43HDK、以及所有修改需要在代码中执行什么操作?
我已经查看了论坛并获得了论坛中提供的用于 LC43x 的 UART 引导加载程序代码
"
封闭的是 TMS570LC43x 器件上的 UART 引导加载程序示例。 引导加载程序在第1个闪存扇区中编程、应用程序在第1组扇区中编程。 这只是一个示例。
TMS570LC4357_UART_Boot.7z"
使用此代码时、我遇到错误
支持我调试此错误。
请确认链接器推荐文件和运行时支持库?
这是 LED 闪烁和 SCI 显示的示例项目。
e2e.ti.com/.../TMS570LC43x_5F00_rtIBlinky.zip
您好、QJ Wang、
我已经测试 了 TMS570LC43x_rtIBlinky.zip。 它在 HDK 板中工作正常。
我知道该代码将起作用、因为我已经测试了 UART 代码。
我不确定 UART 引导加载程序的构建配置是否可用于编辑 UART 构建中的 HALCoGen 设置。
那么、您能否为我提供构建、或者我如何在这个论坛中将构建附加到这里?
您好、QJ Wang、
我是否需要修改链接器的命令文件?
/**//
/*------------------ *
/*用户代码开始(0)*/
/*用户代码结束*/
/*------------------ *
/*链接器设置*/
--retain="*(.intvecs)"
/*用户代码开始(1)*/
/*用户代码结束*/
/*------------------ *
/*内存映射*/
存储器
{
/*用户代码开始(2)*/
/*用户代码结束*/
引导程序(X):origin=0x00000000 length=0x00000020
FLASH0 (RX):origin=0x00000020 length=0x001FFFE0
FLASH1 (RX):origin=0x00200000 length=0x00200000
堆栈(RW):origin=0x08000000 length=0x00001500
RAM (RW):origin=0x08001500 length=0x0007EB00
/*用户代码开始(3)*/
/*组0 ECC */
/*
ECC_VEC (R):origin=(0xf0400000 +(start (vectors)>> 3))
length=(size (vectors)>> 3)
ecc={algoL2R5F021、input_range=vectors}
ECC_FLA0 (R):origin=(0xf0400000 +(开始(FLASH0)>> 3))
length=(size (FLASH0)>> 3)
ecc={algoL2R5F021、input_range=FLASH0}
*
/*组1 ECC */
/* ECC_FLA1 (R):origin=(0xf0400000 +(开始(FLASH1)>> 3))
length=(size (FLASH1)>> 3)
ecc={algoL2R5F021、input_range=FLASH1}
*
/*用户代码结束*/
}
/*用户代码开始(4)*/
/ECC{
// algoL2R5F021:address_mask = 0xffffff8 //地址位31:3 */
//汉明_mask = R4 //使用掩码中的 R4/R5构建*/
//奇偶校验掩码= 0x0c //*设置哪些 ECC 位为偶校验和奇校验*/
//镜像= F021 //* RM57Lx 和 TMS570LCx 在 F021中编译*/
//}
/*用户代码结束*/
/*------------------ *
/*段配置*/
部分
{
/*用户代码开始(5)*/
/*用户代码结束*/
.intvecs:{}>向量
.text align (32):{}> FLASH0 | FLASH1
.const align (32):{}> FLASH0 | FLASH1
.cinit align (32):{}> FLASH0| FLASH1
.pinit align (32):{}> FLASH0 | FLASH1
.bss:{}> RAM
.data :{}> RAM
.sysmem:{}>RAM
/*用户代码开始(6)*/
/*用户代码结束*/
}
/*用户代码开始(7)*/
/*用户代码结束*/
/*------------------ *
/*其他*/
/*用户代码开始(8)*/
/*用户代码结束*/
/*------------------ *
请检查并确认我是否需要修改它?
尝试一下、刚刚测试过、没有任何问题。 HAL 配置文件位于 HALCOGen 文件夹中:
您好、QJ Wang、
我在调试模式下遇到以下问题。
新代码 TMS570LC4357_UART_BootLoader.zip 编译正常、但在调试模式下出现问题。
请确认调试器未连接的原因?
谢谢你
您好、QJ Wang、
在 UART 引导加载程序中加载了应用程序代码后、我在其中遇到了一些问题。
在 调试模式下、当应用代码(LED 闪烁)写入闪存后、跳转应用代码工作正常。 但在首次 nRST 或 PORRST 之后、引导加载程序会输入应用程序代码、但 LED 闪烁不起作用、因为复位源是 NO_RESET。
2._c_int00 ()函数在 UART 引导加载程序和我的应用程序代码中都是相同的。 我是否需要为 UART 引导加载程序配置 HALCoGen、应用程序应该相同或不同。
UART 引导加载程序和应用程序代码中的 hL_sys_link.cmd 文件
引导加载程序 sys_intvecs.asm:
resetEntry
b _c_int00
UndefEntry
b 未定义尝试
b 0x2000F8 ;0x200100-0x8 for Svc
应用 sys_intvecs.asm:
resetEntry
b _c_int00
UndefEntry
b 未定义尝试
b vPortSWI
4. UART 引导加载程序和应用程序代码中需要修改哪些文件?
请在本节中提供帮助。
您好、QJ Wang
我是否需要修改 hL_sys_intvecs.asm 文件以及如何修改、因为 UART 引导加载程序和应用程序代码都是相同的。
.sect ".intvecs"
ARM
;------------------------------------------------------------------
;中断例程的导入引用
.ref _c_int00
.ref phantomInterrupt
.def resetEntry
;------------------------------------------------------------------
;中断向量
resetEntry
b _c_int00
UndefEntry
b 未定义尝试
svcEntry
b svcEntry
PrefetchEntry
B prefetchEntry
DataEntry
b DataEntry
b 相位中断
LDR PC、[PC、#-0x1b0]
LDR PC、[PC、#-0x1b0]
hL_sys_link.cmd 文件我需要在引导加载程序和应用程序代码中更改的所有内容都在 FLASH0中使用
hL_sys_link.cmd 文件--应用程序
/*------------------ *
/*用户代码开始(0)*/
/*用户代码结束*/
/*------------------ *
/*链接器设置*/
--retain="*(.intvecs)"
/*用户代码开始(1)*/
/*用户代码结束*/
/*------------------ *
/*内存映射*/
存储器
{
/*用户代码开始(2)*/
/*用户代码结束*/
引导程序(X):origin=0x00000000 length=0x00000020
FLASH0 (RX):origin=0x00000020 length=0x001FFFE0
FLASH1 (RX):origin=0x00200000 length=0x00200000
堆栈(RW):origin=0x08000000 length=0x00001500
RAM (RW):origin=0x08001500 length=0x0007EB00
/*用户代码开始(3)*/
/*用户代码结束*/
}
/*用户代码开始(4)*/
/*用户代码结束*/
/*------------------ *
/*段配置*/
部分
{
/*用户代码开始(5)*/
/*用户代码结束*/
.intvecs:{}>向量
.text align (32):{}> FLASH0 | FLASH1
.const align (32):{}> FLASH0 | FLASH1
.cinit align (32):{}> FLASH0| FLASH1
.pinit align (32):{}> FLASH0 | FLASH1
.bss:{}> RAM
.data :{}> RAM
.sysmem:{}>RAM
/*用户代码开始(6)*/
/*用户代码结束*/
}
LC43xLEDBlk.map --应用程序代码
秘书长的报告
TI ARM 链接器 PC v20.2.2
秘书长的报告
>> 2021年6月15日12:27:39链接
输出文件名:
入口点符号:"_c_int00"地址:000045ac
存储器配置
名称源长度使用未使用的属性填充
------------ ---- ------ ---- ---- --------
向量00000000 00000020 00000020 00000000 X
FLASH0 00000020 001fffe0 00004e10 001fb1d0 R X
FLASH1 00200000 00200000 00000000 00200000 R X
堆栈08000000 00001500 00000000 00001500 RW
RAM 08001500 0007eb00 00000000 0007eb00 RW
段分配映射
运行 origin load origin length init length atts members
------ ------ ------ ------ ---- ----
00000000 00000000 00004870 00004870 r-x
00000000 00000000 00000020 00000020 r-x .intvecs
00000020 00000020 00004850 00004850 r-x .text
00004880 00004880 000005c0 000005c0 r--
00004880 00004880 000005c0 000005c0 r-.const
UART 引导加载程序也是如此
hL_sys_link.cmd 文件--引导加载程序
/**//
/*------------------ *
/*用户代码开始(0)*/
/*用户代码结束*/
/*------------------ *
/*链接器设置*/
--retain="*(.intvecs)"
/*用户代码开始(1)*/
/*用户代码结束*/
/*------------------ *
/*内存映射*/
存储器
{
/*用户代码开始(2)*/
#if 0
/*用户代码结束*/
引导程序(X):origin=0x00000000 length=0x00000020
FLASH0 (RX):origin=0x00000020 length=0x001FFFE0
FLASH1 (RX):origin=0x00200000 length=0x00200000
堆栈(RW):origin=0x08000000 length=0x00001500
RAM (RW):origin=0x08001500 length=0x0007eb00
/*用户代码开始(3)*/
#endif
#if 1.
引导程序(X):origin=0x00000000 length=0x00000020 fill =0xFFFF
FLASH0 (RX):origin=0x00000020 length=0x001FFFE0 vfill = 0xffffffff
FLASH1 (RX):origin=0x00200000 length=0x00200000 vfill = 0xffffffff
/*银行7 (128KB、FEE)*/
FLASH7 (R):origin=0xF0200000 length=0x00020000 vfill = 0xffffffff
堆栈(RW):origin=0x08000000 length=0x00001500
RAM (RW):origin=0x08001500 length=0x0002EB00
/*组0 ECC */
ECC_VEC (R):origin=(0xf0400000 +(start (vectors)>> 3))
length=(size (vectors)>> 3)
ecc={algoL2R5F021、input_range=vectors}
ECC_FLA0 (R):origin=(0xf0400000 +(开始(FLASH0)>> 3))
length=(size (FLASH0)>> 3)
ecc={algoL2R5F021、input_range=FLASH0}
/*组1 ECC */
ECC_FLA1 (R):origin=(0xf0400000 +(开始(FLASH1)>> 3))
length=(size (FLASH1)>> 3)
ecc={algoL2R5F021、input_range=FLASH1}
/*组7 ECC */
ECC_FLA7 (R):origin=0xF0100000
length=(size (FLASH7)>> 3)
ecc={algoL2R5F021、input_range=FLASH7}
#endif
/*用户代码结束*/
}
/*用户代码开始(4)*/
#if 1.
ECC{
algoL2R5F021:address_mask = 0xfffffff8 //地址位31:3 */
汉明_mask = R4 /*使用掩码中的 R4/R5构建*/
奇偶校验掩码= 0x0c //设置哪些 ECC 位是偶校验和奇校验*/
镜像= F021 //* RM57Lx 和 TMS570LCx 在 F021中编译
}
#endif
/*用户代码结束*/
/*------------------ *
/*段配置*/
部分
{
/*用户代码开始(5)*/
#if 0
/*用户代码结束*/
.intvecs:{}>向量
.text align (32):{}> FLASH0 | FLASH1
.const align (32):{}> FLASH0 | FLASH1
.cinit align (32):{}> FLASH0| FLASH1
.pinit align (32):{}> FLASH0 | FLASH1
.bss:{}> RAM
.data :{}> RAM
.sysmem:{}>RAM
/*用户代码开始(6)*/
#endif
#if 1.
.intvecs:{} palign =8>vectors
闪存 API:
{
..\Boot\Fapi_UserDefinedFunctions.obj (.text)
.\Boot\BL_FLASH.obj (.text)
--library = F021_API_CortexR4_BE_L2FMC.lib (.text)
}palign = 8 load = FLASH0 |FLASH1、run = RAM、load_start (apiLoadStart)、run_start (apiRunStart)、size (apiLoadSize)
.text:{} palign =8>FLASH0 |FLASH1 /*已初始化的可执行代码和常量*/
.const:{}palign =8 load=FLASH0 |FLASH1、run = RAM、load_start (constLoadStart)、run_start (constRunStart)、size (constLoadSize)/*初始化的常量数据(例如 const flash_sects[.] =)*/
.cinit:{} palign =8>FLASH0| FLASH1 /*表,用于显式初始化的全局和静态变量*/
.pinit:{} palign =8>FLASH0|FLASH1 /* C++全局构造函数地址*/
.bss:{}>RAM /*未初始化的全局和静态变量*/
.data :{}>RAM /*显式初始化的全局和静态非常量变量。 *
.sysmem:{}>RAM /*用于动态内存分配的内存池(heap)*/
#endif
/*用户代码结束*/
}
/*用户代码开始(7)*/
/*用户代码结束*/
TMS570LC4357_UART_bootloader.map --引导加载程序
秘书长的报告
TI ARM 链接器 PC v20.2.2
秘书长的报告
>> 2021年6月15日13:11:25链接星期二
输出文件名:
入口点符号:"_c_int00"地址:00008abc
存储器配置
名称源长度使用未使用的属性填充
------------ ---- ------ ---- ---- --------
向量00000000 00000020 00000020 00000000 X ffffff
FLASH0 00000020 001fffe0 00009378 001f6c68 R X (ffFFFF)
FLASH1 00200000 00200000 00000000 00200000 R X (FFFFFF)
堆栈08000000 00001500 00000000 00001500 RW
RAM 08001500 0002eb00 0000197b 0002d185 RW
ECC_FLA7 f0100000 00004000 00000000 00004000 R
FLASH7 f0200000 00020000 00000000 00020000 R (ffffff)
ECC_VEC f0400000 00000004 00000000 00000004 R
ECC_FLA0 f0400004 0003fffc 00000000 0003fffc R
ECC_FLA1 f0440000 00040000 00000000 00040000 R
段分配映射
运行 origin load origin length init length atts members
------ ------ ------ ------ ---- ----
00000000 00000000 00000020 00000020 r-x
00000000 00000000 00000020 00000020 r-x .intvecs
00001498 00001498 00007f00 00007f00 r-x
00001498 00001498 00007ec0 00007ec0 r-x .text
00009358 00009358 00000040 00000040 r-.cinit
08001500 00000020 00001478 00001478 r-x
08001500 00000020 00000ef0 00000ef0 r-x flashAPI
080023f0 00000f10 00000588 00000588 r-.const
08002978 08002978 00000506 00000000 Rw-
08002978 08002978 00000439 00000000 rw-.data
08002db4 08002db4 000000ca 00000000 rw-.bss
引导加载程序和应用程序不应使用相同的链接器 cmd 文件。 VECTROS 和闪存的存储器地址中的值不同。
引导加载程序:
存储器:
引导程序(X):origin=0x00000000 length=0x00000020
FLASH0 (RX):origin=0x00000020 length=0x001FFFE0
FLASH1 (RX):origin=0x00200000 length=0x00200000
应用:
存储器:
引导程序(X):origin=0x00200000 length=0x00000020
FLASH0 (RX):origin=0x00000000 length=0x00200000
FLASH1 (RX):origin=0x00200020 length=0x001FFFE0
地区:
.intvecs:{}>向量
.text align(32):{}>FLASH1
.const align (32):{}> FLASH1
.cinit align (32):{}> FLASH1
.pinit align (32):{}> FLASH1
如果使用相同的中断矢量表(.intvecs)、则在应用程序中不发生异常(数据中止、预取等)时、该表将正常工作。 由于引导加载程序仅用于更新应用程序、 因此它非常简洁。 我假设引导加载程序没有错误。 在我的引导加载程序示例中、所有异常(UNDEF、预取、有关数据、SVC)都将路由到应用程序。
引导加载程序 sys_intvecs.asm:
resetEntry
b _c_int00
b 0x2000FB ;UNDEF
b 0x2000F8 ;0x200100-0x8 for Svc
b 0x2000FB ;预取
b 0x2000FB ;数据中止
@QJwang -我可以让 UART 引导加载程序运行、我可以上载应用程序、但运行应用程序的选项会挂起。
我自己上传了 blinky 样本(FreeRTOS 或 RTI 版本)、两者都正常工作。 但是,通过引导加载程序上载并通过菜单(选项3)执行它--它会挂起。
我有一个较旧的(不正确?) 具有不同地址的引导加载程序版本。
APP_START_ADDRESS 0x00010020
APP_STATUS_ADDRESS 0x00010000
此论坛帖子的版本:
APP_START_ADDRESS 0x00200020
APP_STATUS_ADDRESS 0x00200000
Hercules HDK PDF (spnu597A 页7)的存储器映射中的任何一个都不显示相同的地址。
我添加了命令行 post-build 来构建.bin 文件,上载了它--仍然无法启动。
应用程序中的哪些更改(如果有)需要与引导加载程序兼容?
注意:我使用了您在此主题中发布的引导加载程序、进行了1次更改- UART 设置为 SCI3 -使用 SCI3是否存在任何问题? 菜单出现、我可以上传、除了运行应用程序之外、一切都正常。
附加引导加载程序和应用程序项目。 e2e.ti.com/.../BootloaderProjects.zip
我发布的应用示例应编程为0x20020。 这是链接器文件。 我将为您发布整个项目。
e2e.ti.com/.../TMS570LC43x_5F00_rtiBlinky_5F00_BL_5F00_APP20020.zip