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.
工具/软件: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、我不知道这是否会影响任何内容。
感谢你的帮助。
好的、只要密码都是0xFFFF、从闪存执行代码就没有问题(无论您是通过 CCS 还是 SCI 对闪存进行编程)。 这告诉我、引导模式选择引脚已正确配置为引导至闪存。
您能否尝试使用密码对简单的测试用例进行编程(例如切换 GPIO 引脚)? 使用 DSP2833x_Headers_nonBIOS.cmd。
[引用]当我们关闭并打开 DSP 或重置 DSP 时、问题就会出现、DSP 不执行代码、似乎它在重置时卡住。[/引用]
了解如果您循环通电、代码不会执行。 如果断开调试探针并在不循环通电的情况下复位器件、会发生什么情况?
是否启用了看门狗? 如果是、它是否能够在独立模式下使器件脱离这种情况?
看门狗已启用、但似乎并未使 DSP 脱离这种状态。
我尝试使用密码锁对简单的情况进行编程、意外地阻止了整个系统、我认为这是因为我不小心忘记了禁用看门狗、使系统处于复位状态、因为它不允许我对 DSP 进行重新编程。
如果我断开调试探针并在不关闭 DSP 电源的情况下复位器件、DSP 的行为与我循环通电的行为完全相同。
如果我通过调试探针强制进行复位、也会发生同样的情况。
我假设您现在无法使用 JTAG 调试探针连接到器件(因为 WD 会不断复位器件)。 请将引导模式更改为 SCI (或除闪存以外的任何模式)、连接到器件并重新编程您的新代码(WD 被禁用)。