DSP_F28335入门(3)——存储器及地址分配

1.存储空间的配置

DSP_F28335入门(3)——存储器及地址分配_第1张图片

2.存储器特点

(1)片上SRAM(Static Random-Access Memory静态随机存取存储器),SRAM速度非常快,是目前读写最快的存储设备,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。
SRAM存储器上具有两套完全独立的数据线,地址线和读/写控制线,并润许两个独立的系统同时对该存储器进行随机性访问。即共享式多端口存储器。F28335片内共有34K*16位单周期单次访问随机存储器SRAM,被分成10个块,它们分别为M0,M1,L0~L7。

(2)BOOT ROM
BOOT ROM可以叫引导ROM,主要装载了TI的引导装载程序,实现DSP的Bootloader功能。MP/MC=0时,DSP被设置为微计算机模式,CPU在复位后,指令跳转到0x3FFC00~0x3FFFBF区间内,执行Bootloader程序,在后续F28335的引导程序章节中会进一步介绍系统是如何引导的。

(3)片上FLASH和OTP(one time programmable一次性可编程)
需要设置访问速度(睡眠到备用等待状态数,备用到激活等待状态数,页访问和随机访问的等待状态数),是否采用流水线模式。
F28335片上有256K16位嵌入式FLASH存储器和2K16位一次可编程OTP存储器,它们均受片上FLASH中的密码保护。FLASH存储器由8个32K*16位扇区组成。
FLASH和OTP存储器的功耗模式有以下3个状态:
1、重启或睡眠状态
芯片复位后,FLASH与OTP处于睡眠状态,CPU在FLASH和OTP存储器映射区域读数据或取代码使得状态改变,从睡眠状态变为备用状态,进一步会变为激活状态,在状态转换过程中,CPU自动延迟等待,一旦状态转换完成,CPU的访问恢复正常。
2.备用状态
该状态的功耗要比睡眠状态大,需要较短的时间就转变为激活状态或读状态。在状态转换过程中,CPU自动延迟等待,一旦状态转换完成,CPU的访问恢复正常。
3.激活状态
在激活状态下,CPU在FLASH与OTP的存储器映射空间内读取访问受到FBANKWAIT寄存器与FOTPWAIT寄存器控制。在状态转换时,从低功耗模式转换到了高功耗模式,延时是必要的,通过延时可以使FLASH能够处在稳定的激活状态。在延时期间,CPU都会自动等待直到延时完成为止。睡眠到备用受FSTDBWAIT控制,备用到激活受FACTIVEWAIT寄存器控制。
(配置程序在DSP2833x_SysCtrl.c中InitFlash函数,对应不同主频有不同的等待状态数)
对FLASH和OTP存储器来说,CPU读/写数据操作主要有以下3种形式:

  1. 32位取指令
  2. 16位或32位数据空间操作
  3. 16位程序空间读操作

一旦FLASH处于激活状态,那么对存储器映射区的访问可以被分为FLASH访问或OTP访问,OTP存储器小于4M,在22位取址范围内,FLASH则大于4M,所以FLASH访问的时候又分为了存储器的随机访问和存储器的页访问。FLASH存储器是以阵列形式组成,每行有2048位。首次访问的某一行称为随机访问,若随后又访问该行则被称为页访问,一个随机和页访问的等待状态数可以通过FBANKWAIT寄存器编程配置,随机访问的状态数由RANDWAIT位来控制,指定访问的等待状态数由PAGEWAIT位来控制。
OTP存储器的访问速度通常可以通过寄存器FOTPWAIT中的OTPWAIT位来控制。OTP存储器的访问时间比FLASH要长。
FLASH的流水线模式:FLASH存储器数据掉电不丢失,所以通常用来保存应用代码。在代码执行期间,除非有中断发生,指令可以从存储器地址中连续获取,连续地址中的部分代码组成了主要的代码,又称为线性代码。为了提高线性代码的执行性能,可以采用FLASH流水线模式。FLASH流水线模式在默认状态下无效,通过设置FOPT寄存器中ENPIPE位使能流水线模式,并且FLASH流水线模式独立于CPU的流水线模式。
每次从FLASH或OTP中读取64位后访问一个取指令,当FLASH流水线被激活,可以从存储在64位缓冲器中读取,然后指令缓冲器中的内容被送到CPU进行处理。
2个32位指令或者4个16位指令可以存放在一个单独的64位访问区域中,F28335的指令多数是16位,因此从FLASH存储器中每取64位指令就像是在预取缓冲器中有4个指令等待CPU处理,在等待处理指令的过程中,FLASH流水线会自动开始访问FLASH存储器并预取下一个64位指令。通过采用这种技术,FLASH或OTP存储区连续代码执行效率得到提高。

3.代码安全模块(CSM)

代码安全模块(CSM)是F28335上程序安全性的主要手段,它禁止未授权的用户访问片内存储器,禁止私有代码的复制或者逆向操作。
提供代码保护,防止非法的程序拷贝。当器件被保护的时候,只有从被保护的存储空间运行的代码可以访问(读或写)其他被保护存储空间中的数据。从非保护的存储空间运行的代码不可以访问被保护存储空间中的数据。
(1)功能说明
**安全模块限制CPU去访问片内存储器。**实际上,对各种寄存器的读/写访问都是通过JTAG端口或外设来进行的,而CSM模块所谓的代码安全性主要是针对片内存储器的访问来定义的,用来禁止未经授权去复制私人代码或数据。
当CPU访问片内存储器受到限制的时候,器件即处于保密、“安全”的状态。当处于保密状态时,根据程序计数器当前指针的位置,可能有两种保护类型。如果当前代码正运行在受保护的内部安全存储器模块上时,仅仅时JTAG(即仿真器)的访问被阻断,而受安全保护的代码时可以访问受安全保护的数据的,相反,如果代码运行在不受保护的非安全区时,所有对受保护的安全区的访问都被阻断。用户的代码可以动态地跳进或者跳出受保护地安全区,因此允许程序从不受保护地非安全区域调用函数,类似地,中断服务程序放在了安全受保护区域,而主程序运行在不受保护地非安全区域。因为程序中总是有部分受到保护地。通过一个128位的密码(相当于8个16位的字)来对安全区进行加密或者解密。这段密码存在FLASH的最后8个字中(0X33FFF8~0X33FFFF),也就是密码区中(PWL),通过密码匹配(PMF),可以解锁器件。
(2)CSM对片内资源的影响
(3)密码匹配流程(PWF)
从PWL中进行8次哑读并对KEY寄存器进行8次写的过程。

你可能感兴趣的:(DSP_F28335)