前言
开发嵌入式DSP程序的时候,最终生成的可执行程序格式为.out , .out是TI CCS中一种二进制可执行程序的格式。在调试阶段,只需要DSP开发板通过JTAG仿真器连接到PC上, 在PC端通过CCS直接将.out下载到DSP芯片的RAM中,点击Run即可执行。
但是,一旦DSP要脱离PC,仿真器, 就不能采用上面下载.out的方式,因为RAM的性质的掉电丢失的。 这时候,就需要将生成的程序保存在FLASH芯片中,Flash芯片的掉电不丢失的。下面将完整介绍DSP程序固化的流程。
RAM与ROM,FLASH区别
RAM与ROM区别
ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。
RAM的类型
RAM 有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。
ROM的类型
ROM也有很多种,PROM是可编程的ROM,PROM和EPROM (可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦除,价格很高,写入时间很长,写入很慢。
举个例子,手机软件一般放在EEPROM中,我们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是马上写入通过记录(通话记录保存在EEPROM中),因为当时有很重要工作(通话)要做,如果写入,漫长的等待是让用户忍无可忍的。
FLASH芯片
FLASH 存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM 的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。
FLASH的分类
目前Flash主要有两种NOR Flash和NADN Flash
NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。
NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。(本次固化就是在Nand Flash芯片中)
开发环境/工具
- EVM 6657评估板
- TI XDS200 USB 仿真器
- Flash烧写工具
- CCS v8
- windows 10
DSP程序启动
DSP启动流程
上电之后,程序指针会自动指向ROM中一个称为Bootloader的小程序, 这段程序使得DSP在上电之后进行一些初始化操作,然后根据期间配置的不同选择从外部存储器或者主器件中搬移代码。C66x系统DSP片内Bootloader的起始地址固定为0x20B00000
DSP启动方式
为了适应不同系统的需求,TI公司的C66x系列支持的自启动模式包括:
- SPI
- I2C
- EMAC
- SRIO
- PCIE
- EMIF16
- Nor Flash
- Nand Flash
具体采用哪种启动方式由BOOTMODE[12:0] 引脚决定,DSP在上电脱离复位以后会读取这些引脚的状态,Bootloader根据引脚的值来选择相应的启动方式。
基于Nand Flash的程序启动
实验
step1. 准备好烧写软件
- CCS v8
- 待烧写的.out
- 烧写工具
首先,在TI官网论坛下载一个Boot example,包含Nand boot。 EVM板子拨码开关拨到No boot模式。
step2: 转换生成的.out
在转换之前,需要进行一些配置。
- 设置mcsdk多核开发套件的路径
- rmd文件配置
length需要根据.out的大小调整 ,其他不用变
配置好之后,运行.bat文件,自动生成一些文件。nand Flash烧写需要用到 .dat文件。
step3:将转换之后的.out(.dat)烧写到Flash芯片中
-
首先,打开一个工程,进入到Debug模式
-
然后加载烧写工具 nandwriter.out
-
将.dat加载到SL2内存中,load memory,加载到指定的地址。
这里内存内容将写入的Flash芯片中。
-
点击run, 将遍历加载到Expressions窗口
将dataSizeUint32设置为.dat 的大小 (10进制), 然后程序继续自动运行。 程序自动将 0x0c000000起始的内容,某个size的大小搬移到Flash芯片。
这样Flash芯片就烧写成功。
step4:重新上电
- 板子拨码开关拨到Nand Boot模式
- 上电之后,复位
这样,程序就自动启动成功。