2812的存储器配置本堂课我们来介绍存储器映像及CMD文件的编写,这部分内容较多,也是DSP区别于单片机的主要表现之一。尤其是CMD文件的编写,工作中很多DSP的工作都是要围绕这个部分的内容进行,编写好的CMD文件也是衡量一个工程师水平高低的最好的体现。那么我们现在就开始今天的课程。第一节Memory简介在我们买计算机的时候,硬盘空间的大小是衡量计算机性能指标之一,在嵌入式DSP的工作时,存储器同样也是衡量的标准之一。1.1What’sthememory?存储器是存放DSP运行过程中指令、代码、数据的地方,存储器的大小也直接影响到我们所编写的程序。如果我们的程序量较大但选择了存储空间小的DSP时候,(工作中也经常遇到这样的问题,解决的方式之一就是充分的分析代码,看看能否压缩;第二就是将C语言改写成汇编语言)。1.22812的memory的结构下面我们来看一下2812存储器的结构,是由那几部分组成的。2812的CPU是不含有存储器的,但他可以访问片内也可访问片外的存储器。2812的存储器分为这几个方面:1.程序或数据存储器1)单口随机存储器SRAM2)只读存储器ROM3)FLASH(3D8000~3F7FFF)共划分为ABCDEFGHIJ.A端地址(3F6000~3F7FFF)【注:FlashA】为Flash的高地址段最高的部分用于其他的功能3F7F80~3F7FF53F7FF6~3F7FF7BOOTTOFLASHentrypoint(begin)3F7FF6~3F7FFFSecurityPassword128bit【注:ThedifferencebetweenRAM&FLASH】平时先调试程序的时候,先将程序存放在RAM空间,限电丢失,一方面执行速度较快,另一方面下载速度较快;等到程序调试完毕后,程序下载到FLASH空间中。他们可以被映射到程序空间或数据空间。有同学会问“映像”是什么意思,英文“map”,意思是可以被分配用于程序空间(指令代码)或数据空间(数据资源)。【注:thememorymapin2812】FLASH128*16H08*16L04*16L14*16M01*16M11*16BOOTROM4*16OTP(oneTIMEProgrammableROM)1*16【注:Symbol】我们存储器的容量大小通常使用多少K*16位来表示。存储单位:bit,byte,word,分别是1bit、8bit、16bit。通常一个存储单元为16位,也就是说是由128*1024个16bit的数据段构成;除此之外还有H0、L0、L1、M0、M1。Bootrom和otp空间。2.保留区:DSP保留的,不给用户开放的空间。通常用于下一代DSP升级使用。3.CPU的中断向量1)在程序地址中保留了64个地址作为CPU的32个中断向量。2)通过ST1位的VMAP可以将CPU的中断向量映像到程序空间的顶部或者底部。3)每两个地址对应一个中断向量。【注ST1的意义】ST1是CPU的状态寄存器。他有两个状态寄存器,ST0、ST1。VMAP是位于ST1的第3位。SETCVMAP指令可将中断向量映射到高位(3FFFC0),CLRCVMAP指令将中断向量表映射到顶部M0空间(000000)第二节MemoryMap2.1What’sthemap这个概念比较新,同学们可能比较难以理解。英文叫MemoryMap。Map:是地图的意思,通过比图上的坐标我们可以准切的定位地图上的准确的位置。同样的存储器映像是通过对存储器划分地址,根据这些地址找到相应的存储器。2.22812的MemoryMap2812的128k*16的存储单元为例。我们对每个存储单元划分地址,比如第一个是0x000000,0x000001,每个地址线性增加,这样的关系叫做存储器映像。下面的图就是存储器映像的详细的说明:第三节2812Memory详解3.1首先我们从大的方面看:1.左边是的片内存储器,右边是片外存储器(扩展存储器);2.写上reserved的是保留的存储器,用户是没有办法访问的;3.2812的地址是统一编址的,意思是用了一片连续的地址范围(0x000000~0x3FFFFF)。每个存储单元的地址都是唯一的。3.2MemorySection1.M0:地址范围是0x000000到0x0003FF。地址的大小是0x000400长度的16bit,为4*16*16=1k.我们前边提到当VMAP=0的时候,中断向量映射到M0的底部(0x000000到0x00003F)2.M1:地址范围(0x000400~0x0007FFF),长度也是1k;3.PF0:外设帧0(下面的外设帧1和外设帧2只能映射到数据空间):其作用是存放2812的外设寄存器。4.PIE寄存器:存放PIE中断向量表的入口地址,256*16位5.PF1和PF2(外设帧1和外设帧2):同PF0的性质相同,不同的是在PF1和PF2的后面有protect的关键字。意思是这部分的寄存器不能被随意修改,要修改的话,加上EALLOW和EDIS的命令。这样的话,外设帧一和二的内容才会被改变:6.L0和L1空间:起始地址分别是(0x008000,0x009000)。7.保留段reserved(0x002000到0x005FFF)上面的保留地址段(0x002000到0x005FFF)在片内是保留的,用于片外的第0区和第1区的范围(0x002000~0x003FFF;0x004000~0x005FFF)这两个区通过同一个片选信号进行访问(XZCS0AND1),但ZONE1也有protected,需要EALLOW和EDIS来访问。8.外扩存储器Zone2和Zone6外扩存储器Zone2和Zone6(分别是0x080000~0x0FFFFF,0x100000~0x17FFFF)分别表示512k即0.5M9.OTP(0x3D7800~0x3D7BFF)属于高地址段了。10.Reserved:OTP下面的1K空间被保留了11.FLASH空间FLASH(0x3D8000~0x3F7FFF),12.CSM区域FLASH段中的虚线后的范围(0x3F7FF8~0x3F7FFF)一共128位,用来进行2812的密码储存。保护(FLASH、L0、L1、OTP)有secureblock的存储单元。13.bootroom和外扩的第七区空间:从3FF000开始,片内核片外存储器有相同的地址空间了,这个不符合我们要求的一一对应的关系。这两个区域相同时间只能使用一个,这个取决于MP\MC引脚的电平,当为低电平时(为计算机),使用片内的bootrom区域,也就是说程序通过片内加载(启动);高电平时3.3v(微处理器),程序通过外部存储器加载Zone7。通常应用的时候从内部rootrom加载。第四节2812存储器模块的特点前面我们介绍了2812由哪些存储器组成的,这些存储器模块在地址空间中是怎么分配的。接下来我们看一下每个存储器的特点:4.1RAM:18K*16位。H08*16L04*16L14*16M01*16M11*161.既可以作为程序空间,也可以作为数据空间2.L0、L1是经密码保护的4.2OTP模块:一次性可编程ROM.共2k*16bit1.1k*16bit是TI保留的2.剩余的1K可以用于程序空间或数据空间。3.也受到csm保护4.3bootrom:也称为引导rom。实现DSP的bootloader功能他存放了1.TI发布的版本号、矫正数据、校验求和信息、复位矢量和DSP复位矢量和相应的数学表达式2.在0x3FFC00~0x3FFFBF:存放了TI的装载程序。当mp\mc=0;程序调用这个内容实现程序的执行。4.4片内的FLASH:1.分配了10个段,是按照段的方式进行操作的2.128bit的密码段,产品发布的时候都会设置密码,除此之外将芯片物理表示擦除贴上产品标签。加密后,基本上无法破解DSP中的代码3.当然受到CSM保护的不仅仅是FLASH.4.5csm如何使用1.打开ccs,debug—connect,程序指针指向3FFC00(bootload特征段,初始化boot用);2.Ccs3.3以下版本需要使用烧写插件,以上版本不需要。3.填写时钟频率4.填写DSP型号和API文件5.出现烧录界面。设置密码之后,flash中的内容是0000;写入密码。按下ProgramPassword后点击Lock,加密