- 本课程为精品课,您可以登录eeworld继续观看:
- (18) -系统设计之DCSM 双代码安全模块
- 登录
- 课程目录
- 相关资源
- 课程笔记
最后我们来看看2837X 它独有的双代码安全模块
DCSM 它的保护性能更好
它能够有效阻止 其他的一些黑客手段
来获取我芯片内部保护区域的数据和代码
也就是说 flash和RAM这些受保护区域的
数据不能通过[听不清]或者黑客程序
来访问到 那么针对F2837X有两个
安全区域
区域1和2
针对2837XD的话 每个CPU有一个区域
针对2837XS的话 有两个区域
每个区域有自己的专属的OTP
OTP里面保存我的安全设置
编译地址啊 我的密码啊等等
这两个区域都能给线上的flash
RAM CLA等等提供保护
也就是我的Flash或者RAM区块
可以自由分配到区域1和2保护
只有在同一个区域里面的代码或者数据可以互相访问
针对受保护存储器里面的代码 只能从保护区域中读取数据
也就是说 如果我的Flash A分配到RAM1里面
我的LS0分配到RAM2里面
从FLASH1访问LS0 这个RAM空间的数据是不可以的
只有LS0也位于区块里面 那就可以访问该数据
我们看看两个区块如何选择
针对刚才说的flash RAM 等等都可以自由分配到
区域1和2里面
我们可以通过这些区域的控制寄存器
来设置放在哪个区域
还是强调一点就是说 只有本区块的中的代码
或者数据才能互相访问
外部未加密的区域 或者区域2是不能访问区域1里面的东西的
我们看看密码保护
传统的C2000芯片都有128字节的加密
针对2837X 我们有两个password
就是两个16位的
每个区域都有自己128位的保护制
而且这个保护制是放在专用的OTK里面的
密码保护有三种权限
一种是数据和程序的读取
假如有这密码保护的话
只能是同一个区块
能够进行数据或程序的读取
第二个是CSM的权限
如果有了这个密码保护的话
CSM是不能访问这些加密区域的
还有我们的程序取址
是不受密码影响的
它是从芯片内部取址
因此不受密码保护的影响
在设置128字节的密码制的时候
需要注意一点 不能设置为全零
如果四个字都是全0的话
这个芯片会永久消失
比如四个字都是1的话
那就是芯片没有加密
一个芯片最开始 拿到手的话
是[听不清]的话 可以随意使用烧结程序
在程序里面 我们可以设置这个加密制
比如第一次烧完程序后 有这个加密密码的话
再次烧结程序的时候 第一步要把密码匹配上
进行解密 然后才能进行拆除烧结等工作
因此 建议在程序开发过程中
这个密码制是不需要设置的
程序开发完成 转到生产的时候
必须设置这个密码制
我们再来看看每个区块自己对应的OTP
在这个OTP里面
主要是存放我们的安全设置
以及我们的128字节的字
前面的这些安全设置 就是我们的分配
flash RAM这些东西分配到本区块还是另外一个区块
的设置
那么这个表格我们怎么看
首先我们看左边这些 最左侧的zx-link链接
链接的指针
由于我们所有的东西都是放在OTP里面的
OTP只能一次编程
所以我们要做到多次修改的话
必须要放多个保存地址
这个zxlink的话
是指向我每次保存的地址
比如说 我所有的字 第一个是放在第一个链接地址
也就是ox020的地址
这里设置完之后 我们要重新设置一次的话
我们不能放在同一个区域里面
我只能放在下一个区
0x030
我把link地址的最后一位改成0
因为在OTP里面
所有的最开始的全是1的话
编写一次 把1改成0
所以我们是通过最后面的这个0
来表示我的link地址不一样的
那么我们这个怎么看呢
前面是我的链接地址 中间是我的偏移量
最后是针对这个地址的偏移 举个例子
我这个password 第一次烧结
这个固定的话 就是0x020
是RAM的配置值
0x0202的话 是我的flash选择的配置值
0x0204是我的另外一个RAM的配置值
等等 这个是一个偏移量
这个地址 是另外一个总体的偏移量
我们在下个表格中看到
我们看这个表
前面这个表是通过Link
指针来表示它指向的地址
比如第一个
我三个连接地址是一样的话
比如这个地方是0x78010
然后加上偏移量
0200 0202 0204等等
如果把这个零往前移动一位
我就是0x78030 然后加上偏移量
比如0300 0302
也就是这两个表格要统一起来
这个地方 我们必须保证地址有效的话
123这三个链接地址必须是一样的
这个地方的020 还是030
一直到UF0
具体的指向由这三个来确定
我们来看看芯片的加密和解密
如果我的128字节
密码已经上锁的话
芯片复位后 我们立即进入加密状态
也就是保护状态 这个时刻
我们使用M1M0
访问权限
那需要重新对FLASH操作 读取数据的时候
必须要先解密
解密的过程 我首先要
虚拟去读我的password 就是我的密码区
四个字节
然后将正确密码写入CSMKEY 这个寄存器
写入正确的字节后 我们把这个密码打开
就能进行正常的操作
在加密时 我们要注意几点
不要把所有密码写成0
这样会永久锁死
第二 不要将所有密码设成1
这样就相当于没有加密
空的芯片的状态
还要记住一点
不受保护的RAM代码是无法访问受保护区域的数据的
还有最后给大家一个建议
不要将密码放到代码中
在我们的CCS里面可以进行加密和解密操作
是在我们的烧结插件上
进行操作
最后 我们看看解密的过程
解密匹配的过程是非常简单
在开始的时候 我们在复位后对CSM的密码区域
进行虚拟读入 如果读取这个字都是零的话
就永久锁死
如果不为零的话 芯片是加密的
把正确的字节写入CSMKEY寄存器里面
假如正确的话 就解开密码
假如password全部是1的话 芯片没有加密
就进行正常的操作
这个是CSM密码区解密的过程
那么综上所述 我们的双代码安全模块
其实是两个区域模块
两个128字节的保护
然后每个区块用OTP来配置
设置它的密码区 以及它的密码等等
记住一点在程序开发过程中
可以不加密
在程序开发完到生产时 必须加上密码保护
有效保护芯片内部的程序代码以及数据
最后一个LAB10主要是将数据放到我的FLASH 中
可以调到我的RAM中运行
然后用CLA来读取代码等等
这个试验大家可以参考我们的
试验的教材
好 谢谢大家
课程介绍
共计28课时,4小时27分22秒
C2837x入门指南
TI C2000 MCU PWM F2837xD ADC DAC DMA CLA C2837x CMP SDFM CAP QEP c28x
F2837x系列的最新 C2000™ Delfino™ 32 位 F2837xD 微控制器 (MCU),为工业实时控制实现最新创新,并设定了全新性能标准。这些最新 MCU 支持双核 C28x 处理功能与双实时控制加速器(也称为控制律加速器或 CLA),可提供 800 MIPS 浮点性能,从而可帮助设计人员为计算要求严格的控制应用开发低时延系统。此外,设计人员还可通过将多个嵌入式处理器整合在单个 MCU 中以降低复杂性,充分满足高级伺服驱动器、太阳能中央逆变器以及工业不间断电源 (UPS) 等需要实时信号分析的应用需求。
猜你喜欢
换一换
推荐帖子