我尝试在链接器命令文件中使用 crc_table 函数、但在应用程序中、我无法计算与链接器相同的值。
我的开发环境如下所示:
操作系统:Windows 7 64位
CCS: 版本:5.5.0.00077
编译器:TI v5.1.5
____________________________________________________________________________________________________________________________________________________________
引导加载程序驻留在地址0x00000000到0x0001FFFF 之间。
所需的验证区域位于地址0x00000020 至0x0000FFE0 。
____________________________________________________________________________________________________________________________________________________________
实现1 (失败不会生成预期的 CRC):
CCS Post 完成 .cmd 文件中提到的所需验证区域的 CRC 计算后, crc_table()应该生成 CRC 并将其放置在.bin (或.out 文件或.hex 文件)的闪存位置0x00040020 。
我在.cmd 文件中使用以下方法
.const:{}palign =8、crc_table (_my_crc_table、算法=TMS570_CRC64_ISO)> FLASH0
.TI.crctab:{}> APP_CRC PAGE = 0
____________________________________________________________________________________________________________________________________________________________
实施2 (此实施中的工作和无问题):
上电时,引导加载程序应使用 2种方法计算所需验证区域的 CRC。
方法1)作为 TMS570LS3137 CRC 外设(SL_CRC_Calculate)
方法2)第二个 CRC 多项式算法。
我能够成功匹配线程中提到的所有步骤后两种方法生成的 CRC。
https://e2e.ti.com/support/microcontrollers/hercules/f/312/p/755466/2824775
____________________________________________________________________________________________________________________________________________________________
失败:
最后,以下是.cmd 文件和 CCS crc_table() 生成的 CRC 与 方法 1计算的 CRC 不匹 配的行) TMS570LS3137密钥 CRC (和方法2)源代码多项式计算的 CRC)。
.const:{}palign = 8、crc_table (_my_crc_table、algoriter=TMS570_CRC64_ISO)> FLASH0_const
.TI.crctab:{}> APP_CRC PAGE = 0
____________________________________________________________________________________________________________________________________________________________
.cmd 文件如下所示
/*------------------ *
/*链接器设置*/
--retain="*(.intvecs)"
/*用户代码开始(1)*/
/*用户代码结束*/
/*------------------ *
/*内存映射*/
存储器
{
引导程序(X):origin=0x00000000 length=0x00000020 fill=0x00000000
FLASH0_text (RX):origin=0x00000020 length=0x0000FFE0 fill=0x00000000
FLASH0_CONST (RX):origin=0x00010020 length=0x0000FFE0 fill=0x00000000
FLASH0_CINIT (RX):origin=0x00020020 length=0x0000FFE0 fill=0x00000000
FLASH0_API (RX):origin=0x00030020 length=0x0000FFE0 fill=0x00000000
FLASH0_BLANK (RX):origin=0x00050020 length=0x0000FFE0 fill=0x00000000
BOOTCRC (RX):origin=0x00040020 length=0x0000FFE0 fill=0x00000000
堆栈(RW):origin=0x08000000 length=0x00001500 fill=0x00000000
SRAM (RW):origin=0x08001500 length=0x0003EB00 fill=0x00000000
/*用户代码开始(2)*/
/*用户代码结束*/
}
SECTIONS //默认
{
.intvecs:{}>向量
.text:{}palign =64、crc_table (_my_crc_table、算法=TMS570_CRC64_ISO)> FLASH0_text
.const:{}>FLASH0_const
闪存 API:
{
..\Debug\Source\fapi_UserDefinedFunctions.obj (.text)
..\Debug\Source\BL_flash.obj (.text)
--library= F021_API_CortexR4_be.lib < FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.SetActiveBank.obj
FlashStateMachine.InitializeFlashBanks.obj
FlashStateMachine.EnableMainSections.obj
FlashStateMachine.IssueFsmCommand.obj
FlashStateMachine.ScaleFclk.obj
init.obj
utilities.CalculateEcc.obj
utilities.WaitDelay.obj
utilities.CalculateFletcher.obj
read.MarginByByByByByByByByByByByByByByBy
Read.Common.obj
read.FlushPipeline.obj
read.wdService.obj
ASYNC.WithAddress.obj
program.obj >(.text)
}load = FLASH0_API、run = SRAM、load_start (api_load)、run_start (api_run)、size (api_size)
.cinit:{}> FLASH0_CINIT
.bss:{}> SRAM
.data :{}> SRAM
.sysmem:{}>SRAM
.TI.crctab:{}> BOOTCRC 页面= 0
}
