工具/软件:Code Composer Studio
我们正在使用 DSP TMS320F28335、并且我们计划使用 CSM 来保护代码的安全。
为此、我们在项目中添加了文件"DSP2833x_CSMPassword.asm"、为了对其进行测试、我们编写了如下文件:
// TI 文件$Revision:/main/3 $ ;//签入$Date:2007年6月26日16:41:07 $ ;//###################################################################################### // ;//文件:DSP2833x_CSMPassword.asm ;// ;//标题:DSP2833x 代码安全模块密码。 ;// ;//描述: ;// ;// 此文件用于指定 ;//的密码值 编程到闪存中的 CSM 密码位置 ;// 0x33FFF8 - 0x33FFFF 处。 ;// ;// 此外,保留的位置0x33FF80-0X33fff5为 ;// 全部编程为0x0000 ;// ;//###################################################################################################### ;// ;//原始来源基于 D.A. //;//;//$TI 发行版:DSP2833x/DSP2823x C/C++头文件 v1.31 $ ;//$发行 日期:2009年8月4日$ ;//################################################ ;“csmpasswords”部分包含将被 ;链接和编程到闪存中的 CSM 密码位置(PWL)的实际 CSM 密码。 ;要解锁 CSM 模块,必须知道这些密码。 ;所有0xFFFF (已擦除)都是密码地址(PWL)的默认值。 ;建议在代码 开发期间将所有密码保留为0xFFFF。 0xFFFF 的密码不会激活代码安全和虚拟 ;CSM PWL 寄存器的读取就是解锁 CSM 所需的全部。 ;当代码开发完成时,修改密码以激活 ;代码安全模块。 .sect "csmpasswds" .int0x1234;PWL0 (128位密码的 lsw) .int0x5678;PWL1 int0x9ABC;PWL2 .int0xDEF0;PWL3 .int0x1234;PWL4 .int0x5678;PWL5 .int0x9ABC;PWL6 .int0xDEF0;PWL7 (128位密码的 MSW) ;------------------------------ ;对于代码安全操作,0x33FF80和 0X33fff5之间的所有地址都不能用作程序代码或数据。 当代码安全密码位置(PWL)被编辑时,这些位置必须被设定为0x0000。 如果安全性不是一个问题,则这些地址 可以用于代码或数据。 ;“csm_rsvd”部分可被用于将这些位置设定为0x0000。 .sect "csm_rsvD" .loop (33FFF5h - 33FF80h + 1) int 0x0000 .endloop ;//============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================ ;//文件结束。 ====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
这是复制和粘贴的文件。
当我们编译此代码并将其加载到 DSP 中时、即使在我们停止调试后、它也能正常工作、没有任何问题。 当我们关闭和打开 DSP 或重置 DSP 时、问题就会出现、DSP 不执行代码、似乎它卡在复位状态。
DSP 可以解锁并重新编程、但是如果我们加载的任何密码与所有0xFFFF 不同、DSP 将不会从闪存执行代码。 当我们通过 SCI 加载代码时、也会发生同样的情况。
代码段通常分配良好(这是 TMS320F28335.cmd 的一部分):
CSM_RSVD :origin = 0x33FF80,length = 0x000076 //在 CSM 使用时使用所有0x0000进行程序。 *
begin :origin = 0x33FFF6,length = 0x000002/* 用于“引导至闪存”引导加载程序模式。 *
csm_PWL :origin = 0x33FFF8,length = 0x000008 //闪存中的 CSM 密码位置*/
codestart :> begin page = 0
csmpasswds :>csm_PWL page = 0
csm_rsvd :>csm_RSVD page = 0
作为一个用于指定情况的边注、这不是仅针对1个 DSP 进行了测试、而是针对我们测试的所有 DSP 进行测试(所有 DSP 都是 TMS320F28335)。
在项目中、我们还有文件"DSP2833x_Headers_BIOS.cmd"、因为我们使用的是 TI-RTOS、我不知道这是否会影响任何内容。
感谢你的帮助。