C2837x入门指南(十八)—系统设计之DCSM双代码安全模块
Loading the player...
将在30s后自动为您播放下一课程
最后我们来看看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来读取代码等等 这个试验大家可以参考我们的 试验的教材 好 谢谢大家
最后我们来看看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来读取代码等等 这个试验大家可以参考我们的 试验的教材 好 谢谢大家
最后我们来看看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。
//=$v1;?>
//=$v['id']?>//=$v['down_category']?>//=$v['link']?>//=$v['is_dl']?>//=$v['link']?>//=$v['name']?>//=$v['name']?>
//=$v['id']?>//=$v['down_category']?>//=$v['path']?>//=$v['is_dl']?>//=$v['path']?>//=$v['name']?>//=$v['name']?>
////=count($lesson['bbsinfo'])?>
//=$elink?>//=$elink?>//=$tags[0]?>//=$tags[0]?>//=$elink?>//= $elink?>//=$tags[1]?>//=$tags[1]?>
//=$lesson['bbs'];?>
//=count($lesson['bbsinfo'])?>