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/TMS320F28335:CSM 阻止代码执行

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/874921/ccs-tms320f28335-csm-blocks-code-execution

器件型号:TMS320F28335

工具/软件: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 被禁用)。

     

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

    因不活动而关闭。