TMS320F280039系列文章目录

第一章 新建工程
第二章 最小系统组成及Boot启动模式
第三章 芯片资源(外设)、存储器映射及加密(代码安全模块CSM)



前言

本文章采用CCS12.1.0(CCS软件版本)及C2000Ware_4_01(SDK-设计资源)进行TMS320F280039(DSP芯片)系列学习

  • 萌新入坑,如有不对的地方请大佬多多指教,谢谢!->欢迎评论区留言
  • 对于萌新来说,学习无非就是多看博文,但是…0.0大佬们的思维大多都有些跳跃,真的很难理解(当然大佬们估计都是为了记录或者提醒自己的工作及学习例程),所以想通过慢慢学习,把每一步都解释出来(保姆版)

第三章 芯片资源(外设)、存储器映射及加密

1.外设资源(外设)

1.1 芯片资源(外设)功能方框图(采用哈佛架构:独立的程序和数据总线)

TMS320F28003x功能(外设)方框图

  • 芯片上各资源(外设)通过5大总线与各资源(外设)相连
  • CPU总线(中央处理器):程序运行过程中主要使用的程序和数据总线
  • CLU总线:主要连接可编程控制律加速器(CLA),实现将并发控制环执行引入C28x系列
  • DMA总线(直接内存访问):6通道直接存储器存取(DMA)控制器
  • HIC总线:主要连接主机接口控制器(HIC),支持从外部主机访问内部存储器
  • BGCRC总线:主要连接背景CRC(BGCRC),实现32 位数据的一个周期CRC运算

1.2 芯片资源(外设)简介(结合功能方框图及Datasheet首页内容)

  • TMS320C28x 32位DSP内核(在120MHz下)
  • FPU32(IEEE 754 浮点单元):支持快速整数除法(FINTDIV)
  • TMU(三角法数学单元):支持非线性比例积分微分(NLPID)控制
  • VCRC(CRC 引擎和指令)
  • SYSTEM CONTROL(系统控制模块)
  • CPU Timers
  • XTAL(晶体振荡器或外部时钟输入)
  • INTOSC1,INTOSC2(两个内部10MHz振荡器)
  • PLL
  • ePIE(增强型外设中断扩展)
  • Windowed WD(窗口化看门狗计时器模块)
  • NMI WD
  • SECURITY(安全模块)
  • DCSM(用户可配置的双区域安全模块)
  • JTAG Lock(锁定)
  • Secure Boot
  • DIAGNOSTICS(诊断模块)
  • DCC(双路时钟比较器)
  • MPOST(内存开机自检)
  • HWBIST(硬件内置自检)
  • 十个硬件断点(包括ERAD:嵌入式实时分析和诊断)
  • JTAG/cJTAG
  • OTHERS
  • EPG(嵌入式图形发生器)
  • CLA(可编程控制律加速器)
  • 120MHz + IEEE 754 单精度浮点指令 + 独立于主CPU执行代码(独立的、完全可编程的32位浮点数学处理器,能够将并发控制环执行引入C28x系列)
  • 通过使用CLA来处理时间关键的控制环,主CPU便可自由执行其他系统任务,如通信和诊断等(CLA的低中断延迟使其能够“及时”读取ADC样本,从而显著减少ADC样本到输出的延迟,以实现更快的系统响应和更高速率的MHz控制环)
  • DMA(6通道直接存储器存取控制器)
  • HIC(主机接口控制器)
  • 支持从外部主机访问内部存储器
  • BGCRC(背景CRC)
  • 实现32 位数据的一个周期CRC运算
  • 存储器(内存)
  • 在三个独立存储体上提供 384KB (192KW) 的闪存(ECC保护)
  • 69KB (34.5KW) RAM(ECC保护)
  • 其他外设(PFx:外设帧x)
  • PF1
    • 16x ePWM(8 Hi-Res Capable)(16个ePWM通道,包含具有高分辨率功能(150ps 分辨率)的8个通道)
      • 集成式死区支持
      • 集成式硬件跳匣区域(TZ)
    • 3x eCAP(1 HRCAP Capable)
      • 在3个eCAP模块中,有一个提供高分辨率捕捉(HRCAP)
    • 2x eQEP(CW/CCW Support)
      • 两个支持CW/CCW运行模式的增强型正交编码器脉冲模块
    • 8x SD Filters(8个Σ-Δ滤波器模块(SDFM)输入通道(每个通道两个并联滤波器))
      • 标准SDFM数据滤波
      • 用于高估或低估情况下快速操作的比较器滤波器
    • 4x CMPSS(4个带12位参考数模转换器(DAC)的窗口比较器)
      • 数字干扰滤波器
    • 2x Buffered DAC(两个12位缓冲DAC输出)
  • PF2
    • 1x PMBUS(一个电源管理总线接口)
    • 2x SPI(2个串行外设接口端口)
    • 1x FSI RX(带一个发送器和一个接收器的快速串行接口(最高200Mbps))
    • 1x FSI TX(同上)
  • PF3
    • 3x 12-Bit ADC(三个4MSPS 12 位模数转换器)
      • 最多23个外部通道(包括两个gpdac输出)
      • 每个ADC具有四个集成后处理块(PPB)
  • PF4
    • 55x GPIO(55个独立可编程多路复用通用输入/输出引脚)
    • Input XBAR
    • Output XBAR
    • ePWM XBAR
    • CLB XBAR
    • CLB Input XBAR
    • CLB Output XBAR
  • PF5
  • PF6
  • PF7
    • 1x DCAN/CAN(一个控制器局域网总线端口)
    • 1x MCAN/CAN FD(一个具有灵活数据速率的控制器局域网总线端口)
  • PF8
    • 2x LIN(两个UART兼容的本地互连网络接口)
      • LIN模块还可以用作SCI
  • PF9
    • 2x SCI(两个UART兼容的串行通信接口)
    • 2x I2C(两个内部集成电路端口)
  • PF10
    • 4x CLB(可配置逻辑块)
      • 4个逻辑块
      • 增强现有外设功能
      • 支持位置管理器解决方案
  • PF11
    • 1x AES(高级加密标准加速器)
  • PF12
    • LFU(实时固件更新)
      • 从旧固件到新固件的快速上下文切换
      • 缩短了闪存组擦除时间

2.存储器映射

2.1 存储器的类型

  • DSP的CPU本身不含存储器,但它可以访问DSP片内其他地方的存储器或者片外的存储器
2.1.1 程序/数据存储器
  • 具有片内单口随机存储器SRAM、只读存储器ROM和Flash存储器
  • 1Kx16位的OPT存储器统一映射到程序和数据存储器空间,这样OPT存储器可以用来存放数据或代码,与Flash存储器不同的是它只能被用户写一次,不能再次被擦除
  • 它们被映像到程序空间或者数据空间,用以存放执行代码或存储数据变量
2.1.2 保留区
  • 数据区的某些地址被保留作为CPU的寄存器使用
2.1.3 CPU中断向量
  • 在程序地址中保留了64个地址作为CPU的32个中断向量
2.1.4 Boot ROM
  • Boot ROM是出厂时的引导程序
  • 在上电时,引导模式信号提供给bootloader软件,用以决定使用何种引导模式。用户可以选择通常的引导模式或者从外部连接下载新程序,亦或选择内部的Flash/ROM引导程序
  • Boot ROM还包含有标准的表,比如Sin/Cos波形表,具体的引导模式需要查询数据手册相关表格
2.1.5 代码安全模块CSM(Code Security Module)
  • 在开发完程序,将代码烧写进芯片的存储器后,常常会担心别人通过JTAG口从存储器中将代码读出来,为了保护代码安全,DSP设计有代码安全模块CSM
  • 受到CSM保护的模块有Flash、OTP、RAM。密码保护的概念应该很好理解,Flash、OTP、RAM这些模块就像是一个保险箱,把代码装载入存储单元之后,就给保险箱设一个密码,当需要再取这些存储单元中的内容时,需要凭密码来打开,只有当输入的密码和之前设置的密码相同时,才能打开保险箱;否则无法打开保险箱,即无法读取存储单元中的内容
2.1.6 外设帧PF
  • DSP片内具有3个外设帧PF0,PF1和PF2,专门用于外设寄存器的映像空间
  • 除CPU寄存器之外其他寄存器均放在了PF0、PF1、PF2和PF3内,其只限于数据存储,用户程序无法在程序空间访问这些存储空间

2.2 存储器(内存)映射

2.2.1 如何理解存储器(内存)映射?(与cmd文件息息相关)
  • 概念:存储器映像(Memory Mapping)可以从“统一地址访问”的核心思想入手 —— 它是一种将计算机中所有可被CPU访问的资源(如内存、外设寄存器、ROM、显存等)都映射到同一个连续地址空间的设计方式
  • 理解:给每个资源分配一个唯一的“地址编号”,让CPU可以像访问普通内存一样,通过这个编号直接操作所有资源,无需区分“这是内存”还是“这是外设”
  • 去快递站取快递(图书馆找书):通过一个取件码(书籍检索号)“即地址映射”,你就知道在哪一个快递(书)架的哪一排找你的快递(书)“即真实的内存地址”
2.2.2 存储器(内存)映射总图
在文档中没有找到类似STM32F407和TMS320F28335 Datasheet的框图,只有表格描述

TMS320F280039芯片内存映射

2.2.2.1 内存控制器模块
  • 类型
  • 专用RAM专用于CPU:M0、M1内存
  • 在CPU和CLA之间共享:LSxRAMS
  • 在CPU、DMA和HIC之间共享:GSx内存
  • 用于处理器之间的消息发送和接收:MSG内存块
  • 特性
  • 都具有高度的可配置性,可实现对写入访问和从不同主节点读取访问的控制
  • 都启用了ECC功能(包括数据和地址),其中一些存储器还属于安全存储器
  • 每个RAM都配备了一个控制器,该控制器负责处理与该RAM相关的访问保护/安全检查和ECC功能
// 配置后的防误写常用操作:
EALLOW; // Enable write protection
// DSP外设相关寄存器配置编码
EDIS; // Disable write protection    
2.2.2.2 RAM详解
  • 专用RAM(Mx RAM)
  • CPU子系统有两个支持ECC功能的专用RAM模块:M0和M1
  • 这些存储器是与CPU紧密耦合的小型存储器块(即只有CPU可以访问这些存储器,其他主设备(CLA、DMA或HIC)均无法访问这些存储器)
  • 所有专用RAM都具备ECC和访问保护(CPU写入保护/CPU取指保护)功能:通过配置分配给每个子系统的访问保护寄存器中的特定位,可以启用/禁用每个RAM块的各种访问保护功能(DxACCPROT)
  • 本地共享RAM(LSx RAM)
  • 从CPU、CLA和BGCRC可访问的RAM(LSx RAM),但默认情况下仅专用于CPU,可以通过在LSxMSEL寄存器中配置MSEL_LSx位域来启用CLA访问。此外,当这些存储器在CPU和CLA之间共享时,用户可以通过在LSxCLAPGM寄存器中配置CLAPGM_LSx位域,选择将这些存储器用作CLA程序存储,这样,CPU对被配置为CLA程序存储的所有内存块的访问将被阻止
  • 所有本地共享RAM(LSxRAM)都是安全的存储器,并具有ECC功能
  • 这些RAM都具有CPU访问保护(CPU写入/CPU获取)功能:通过配置本地共享RAM访问保护寄存器中的特定位,可以启用或禁用每个RAM块的每种访问保护类型
  • 本地共享RAM(LSx RAM)功能表
MSEL_LSx CLAPGM_LSx CPUx 允许访问 CPUx.CLA1 允许访问 备注
00 X All - LSx内存配置为CPU专用RAM
01 0 All 数据读取/写入 LSx内存在CPU和CLA1之间共享
01 1 仿真读取/写入 仅获取/仿真读取/写入 LSx内存是CLA1程序内存
  • 全局共享RAM(GSx RAM)
  • 从CPU、HIC、BGCRC和DMA可访问的RAM(GSx RAM)
  • 全局共享RAM(GSx RAM)功能表(CPU、HIC和DMA都具有对这些存储器的完全读写访问权限)
CPU(Fetch) CPU(读) CPU(写) CPU.DMA(读) CPU.DMA(写) HIC(读) HIC(写)
Yes Yes Yes Yes Yes Yes Yes
  • 所有全局共享RAM(GSx RAM)块都具有ECC功能
  • 全局共享RAM(GSx RAM)具有不同的访问保护级别(CPU写入/CPU获取/DMA写入/HIC写入):通过配置GSACCPROT寄存器中的特定位来启用或禁用这些保护级别
  • GSx RAM块的访问保护配置可以被用户锁定,以防止对该位字段进行进一步更新,用户还可以通过设置GSxCOMMIT寄存器中的特定位字段来永久锁定配置到各个位字段(一旦为特定的GSxRAM块执行了配置,在发出CPU.SYSRS指令之前,该配置将不能再被更改)
  • 消息RAM
  • 此器件上有两种类型的消息RAM可用于在CPU、CLA和DMA之间共享
  • CLA-CPU消息:RAM在CLA和CPU之间共享数据
    • 这些RAM块可用于在CPU和CLA之间共享数据(CLA具有对“CLA至CPU MSGRAM”的读写访问权限,且CPU具有对“CPU至CLA MSGRAM”的读写访问权限,CPU和CLA均可对两个MSGRAM进行读取访问)
  • CLA-DMA消息:RAM在CLA和DMA之间共享数据
    • 这些RAM块可用于在CLA和DMA之间共享数据(CLA具有对“CLA至DMA MSGRAM”的读写访问权限,且DMA具有对“DMA至CLA MSGRAM”的读写访问权限,CLA和DMA均可对两个MSGRAM进行读取访问)
2.2.2.3 cmd文件与存储器(内存)映射的关系

TMS320F280039芯片cmd文件与存储器(内存)映射的关系

3.存储器加密(代码安全模块-CSM-Code Security Module)

3.1 简介

  • 双代码安全模块(DCSM)防止对片上安全内存进行访问
  • 术语“安全”意味着阻止对安全存储器和资源的访问
  • 术语“不安全”是指允许访问。比如通过 Code Composer Studio"(CCS)等调试工具
  • 代码安全机制为两个区域:区域1(Z1)和区域2(Z2)
  • 这两个区域的安全实现是相同的
  • 每个区域都有自身的专用安全资源(OTP存储器和安全ROM)和分配的安全资源(LSxRAM和闪存扇区)
  • 每个区域的安全性都由自身的128位密码(CSM密码)确保
  • 每个区域的密码根据区域专用链接指针存储在OTP存储器位置中
  • 可以更改链接指针值,以在OTP中编程一组不同的安全设置(包括密码)
  • Datasheet截图(TI也不能保证安全性,没事别用)
    TMS320F28003x芯片双代码安全模块(CSM)存储器加密

3.2 应用(看看就行!不要用!会不幸!)

3.2.1 未加密状态(程序可读,即通过某些方法可以破译)

TMS320F28003x芯片CSM未加密状态

3.2.2 如何加密
  • 如3.1简介中所说,它有两个安全区域,两个都可操作,咱们以Z1为例
3.2.2.1 进入仿真状态,如图所示找到CSMDSWD

TMS320F28003x芯片CSM如何加密1进入仿真,按图索骥

3.2.2.2 修改密钥(原有的不要动!按需修改其他,但不要全设置成0x0000,否则芯片会直接锁死)

TMS320F28003x芯片CSM如何加密2复位软件修改密钥开始编译

3.2.3 加密状态(程序不可读且无法重新烧录)
  • 程序不可读
    TMS320F28003x芯片CSM加密状态1
  • 无法重新烧录
    TMS320F28003x芯片CSM加密状态2
3.2.4 如何解密
3.2.4.1 连接仿真
  • 打开连接仿真按钮
    TMS320F28003x芯片CSM如何解密1连接仿真
  • 右键选取连接仿真器
    TMS320F28003x芯片CSM如何解密2右键选取
3.2.4.2 连接开发板

TMS320F28003x芯片CSM如何解密3连接开发板

3.2.4.3 解锁密钥

TMS320F28003x芯片CSM如何解密4解锁密钥

3.2.5 解密验证(重新烧写软件查看Memory Browser,可读证明解锁成功)
  • hi,真不巧,验证过程走丢了…

总结

本章为TMS320F280039学习系列文章 第三章:芯片资源(外设)、存储器映射及加密(代码安全模块CSM)

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐