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.

[参考译文] CCS/TMS570LS3137:我需要计算所需验证区域的 CRC 并交叉验证闪存是否被篡改

Guru**** 2614265 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/770603/ccs-tms570ls3137-i-need-to-calculate-crc-of-needed-verification-area-and-cross-verify-that-the-flash-was-not-tampered

器件型号:TMS570LS3137

我尝试在链接器命令文件中使用 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

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

    请使用此应用手册作为参考。 本说明介绍了如何使用链接器命令文件生成 CRC、还包括使用不同模式计算 CRC 的示例。

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

    我使用了应用手册作为参考,结果图解释了我的实验,它仅占我所需 的50%。

    1)硬件计算了 Watch Windows ResultCrcHW_u64中内存范围(.const)计算结果的 CRC 是该变量。

    2)软件计算 了"Watch"窗口中存储器范围(.const)计算结果的 CRC ResultCrcSoftWare_u64是其变量。

    3) 3)上述2种方法(S/W 和 H/W) CRC 匹配、因此我的 CRC64多项式方法是正确的、但是。

    4)链接器命令   crc_table (_my_crc_table、算法=TMS570_CRC64_ISO)   生成不同的32位 CRC 这与上述2种方法不匹配。

     这显示在 MAP 文件和反汇编存储器地址0x0006 0200中。


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

    我执行了一个测试、以使用链接器 cmd、SW 和 HW 进行计算。 结果是相同的。 我发布在另一个主题中。 e2e.ti.com/.../2878315