2.3 存储器结构
2.3.1 存储器映射图
F28335的存储器空间分为片上存储器空间和片外扩展存储器空间,片外扩展存储器空间通过外部接口(XINTF)扩展,扩展外存储器和I/O外设寻址采用统一编址方式。片上存储器空间分为数据存储器空间和程序存储器空间。片上存储器包括SRAM存储器块、Flash存储器块、OTP存储器块。SRAM块可配置成数据存储器或程序存储器,给用户代码存放到被配置为程序存储器空间的片上SARAM块进行调试带来很大便利。F28335的存储器映射图如图2-6所示。
图2-6 F28335存储器映射图
从图2-6中可以看出,片上SRAM存储器块共有10个,即M0、M1、L0、L1、L2、L3、L4、L5、L6、L7,均可配置为数据储存器或程序存储器,但寻址空间是固定的,不可缩放。外设帧0、外设帧1、外设帧2和外设帧3只能映射为数据储存器。保护意味着“写操作后跟着读操作”的顺序被保护,而不是流水线顺序被保护。
特定内存区域受EALLOW写保护(一种写保护宏语句的软件可解锁和加锁)以防止配置之后的误写数据(即电磁干扰引起的误写操作)。0x380080~0x38008F地址范围中包含ADC校准例程,不可由用户编程。如果eCAN模块未在应用中使用,eCAN模块提供的RAM(LAM、MOTS、MOTO和邮箱RAM)可被用作通用RAM,但eCAN模块时钟应被启用。
片外扩展存储器空间是通过F28335的外部接口(XINTF)进行扩展。XINTF引脚包括:F28335的20根地址总线引脚(XA19~XA0)、32根数据总线引脚(XD31~XD0)、3根读写控制引脚(、、);寻址区0、寻址区6、寻址区7的片选信号、、;一根外设准备就绪引脚XREADY以及两根DMA控制引脚(输入引脚)和(输出引脚,带高阻态控制)。
2.3.2 片上通用存储器块
F28335片上存储块M0的地址范围是0x000040~0x0003FF(1K×16位),M1块的地址范围是0x000400~0x0007FF(1K×16位)。这两个存储块均为单周期(单存取)存取RAM(Single Access RAM,SARAM)。M0、M1作为通用RAM,上电复位后,M0自动被C编译器作为存放数据、变量的地址空间,而堆栈指针指向M1块的起始地址。因此,用C编译器编译时,链接器自动使用M0和M1块。
2.3.3 片上安全密码保护、双映射存储器块
L0~L3存储块均为4K×16位的片上SARAM块,且受安全密码保护(即不输入密码RAM内容不可读取)。为了兼容281x系列的DSP,F28335的L0~L3的地址具有低64K地址空间(0x008000~0x00BFFF)和高64K地址空间(0x3F8000~0x3FBFFF)的双重映射地址,即0X008000~0X3FBFFF空间的L0~L3块内容与0x3F8000~0x3FBFFF空间的L0~L3块内容是完全一样的。例如,F2812有L0~L3块,位于0x008000~0x009FFF的L0和L1块地址空间与28355的低64K的L0和L1块的地址空间完全重合。
L0、L1、L2、L3均可以配置为程序存储器空间。当调试程序代码长度不大于16K时,可以把cinit段定位在L0块,text段定位在L1~L3块中,这样用仿真器下载程序到L0~L3,调试方便快捷,调试完毕后,再把程序写到Flash中运行。存储器块与段之间的分配关系是在F28335的链接器命令文件中确定的,详情参阅第3章关于28355_RAM_Lnk.cmd链接器命令文件模板的介绍。
2.3.4 片上DMA存储器块
F28335的L4、L5、L6、L7存储器块均为4K×16位的SARAM块,可以作为DMA存取块,被DMA控制器进行DMA存取。若不作为DMA存储块时,也可以作为一般SARAM使用。
2.3.5 片上Flash存储器块
F28335片上有足够大的256K×16位的Flash(闪存)存储器可以满足不同大小应用程序代码烧写存放要求,不需要通过XINTF接口再扩展片外程序存储器。
为了实现Flash程序的远程下载烧写升级,F28335的256K Flash分成8个扇区,每个扇值大小为32K×16位,用户程序可以单独对任一扇区进行擦写、编程和验证,而不影响其他扇区。每个扇区均有安全代码保护,不被窃读。F28335闪存中扇区地址分配如表2-4所示。
表2-4 F28335闪存中扇区的地址分配
2.3.6 片上OTP
F28335片上包含1K×16位的一次编程OTP(One Time Programmable),地址范围为0x380400~0x3807FF。OTP可以映射为程序ROM或数据ROM。用户一般不用OTP存储器。
2.3.7 片上安全代码模块
安全代码模块(Code Security Module,CSM)位于DSP的片上Flash的最后8个单元地址0x33FFF8~0x3FFFF(8×16位)。用户输入128位密码之后,DSP片上的受安全代码保护的区域(简称安全存储器)就无法通过DSP的JTAG接口进行读取查看,也不能复制未授权的DSP片上Flash、L0~L3、OTP等受代码模块保护的代码或数据,使用户编写的DSP代码受到知识产权保护。除非用户输入与CSM中存放的128位密码一致,才能使DSP仿真器通过JTAG接口访问DSP芯片的片上安全代码保护区域。
安全代码保护分两级,即安全与不安全,取决于程序计数器(PC)当前位于何处。若PC指针从片上安全存储器(即Flash、L0~L3、OTP之一)中运行代码,允许安全代码访问安全存储器中的数据,而通过JTAG(即仿真器)的访问被阻止;反之,若PC从片上非安全存储器中运行代码,则所有访问安全代码的操作均被禁止。可以动态跳入和跳出安全存储器,从而允许安全函数调用来自非安全存储器的运行代码。同样,中断服务程序可以放置在安全存储器,即使主程序循环从非安全存储器运行。
通过执行密码匹配流程(Password Match Flow,PMF),可解除DSP器件的安全等级。F28335的安全等级如表2-5所示。
表2-5 F28335安全等级模式
当DSP的片上Flash被擦除时,安全代码模块的128位密码(password)都擦为1,则28335为不安全模式。如果128位密码全为0,则器件是安全的,忽略密钥寄存器(key registers)的内容。如果上电复位后,密码是全0,则用户无法执行PMF(密码匹配流程)解锁器件,也限制用户再次调试安全代码或重新烧写Flash。
因此,安全密码不能写全0或写未知值,否则该芯片永远被锁住不能读取,除非把嵌入在Flash或OTP中的Flash擦除程序复制到片上安全SARAM中执行才能解锁。
2.3.8 片上Boot ROM
Boot ROM由芯片厂家烧写的包含引导程序的ROM存储器块大小为8K×16位。上电复位后,F28335的4个GPIO引脚信号(GPIO84、GPIO85、GPIO86、GPIO87)电平被引导程序检测,决定执行哪一种引导方式。这4个GPIO引脚在上电复位时,若悬空不接,则内部上拉为高电平,默认为跳转到Flash模式。
对于F28335实验板,可将GPIO84~GPIO87引脚通过一个DIP8封装的4位拨码开关与信号地连接,如图2-7所示。4位拨码开关可设置16种电平组合,对应F28335的16种引导方式,16种电平组合与16种引导方式对应关系如表2-6所示。在设计F28335应用板时,大多数用户采用应用程序烧写到Flash运行方式,所以,GPIO84~GPIO87引脚就不需要外接4位拨码开关,直接悬空不用即可。
图2-7 F28335的4个GPIO引脚的4位拨码开关电路
表2-6 16种电平组合与16种引导方式对应关系表
注:(1)引导方式0、1、2仅用于TI公司的芯片测试ADC校准用,用户不可用。
(2)跳转到Flash引导方式是大多数用户调试好程序烧写到Flash后上电复位跳转的方式,直接跳转到片上256K Flash空间(0x300000~0x33FFF7)的最后两个单元的首地址0x33FFF6。这种引导方式不调用引导装载程序。用户要在0x33FFF6编写一个跳转指令,跳转到应用程序Flash存放入口。
(3)跳转到片上SARAM引导方式是仿真器选择的方式,在调试阶段,仿真器忽略GPIO84~GPIO87配置的引导方式电平,直接采用“跳转到SARAM引导方式”跳转到M0块的首地址0x000000。工程文件中的链接器命令文件规定调试代码定位在片上SARAM的绝对物理地址,用户可参考TI的链接命令器文件模板28355_RAM_lnk.cmd(具体清单参阅第3章)。
E、D、C、B、A、6、5这7种引导方式,需要调用Boot ROM中的引导装载程序(Boot Loader),从外设接口把代码数据流装载到F28335片上SARAM中并自动运行。