首页 > 应用与设计 > 工业应用 > C2837x入门指南 >

电机驱动

最新课程

热门课程

C2837x入门指南(十八)—系统设计之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来读取代码等等 这个试验大家可以参考我们的 试验的教材 好 谢谢大家

最后我们来看看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来读取代码等等

这个试验大家可以参考我们的

试验的教材

好 谢谢大家

视频报错
手机看
扫码用手机观看
收藏本课程

视频简介

C2837x入门指南(十八)—系统设计之DCSM双代码安全模块

所属课程:C2837x入门指南 发布时间:2016.07.12 视频集数:28 本节视频时长:00:10:25
C2837x概述;芯片架构; 开发环境;外设寄存器操作;复位和中断;系统初始化;模拟子系统 ADC DAC CMP SDFM;控制类外设PWM CAP QEP。
TI培训小程序