分页烧写Flash的多页步伐并行自举要领
发布日期:2011-04-22
TI公司的DSP芯片TMS320Vc5410(简称5410)是性能杰出的低功耗定点DSP,在嵌入式体系中有着遍及的应用。5410没有自带的片上非易失性存储器,因此必要外部的非易失性存储介质,如EPROM或FLASH,来存储步伐和数据。5410片内有64 K字RAM,由于在片内RAM运行步伐比片外运行有高速率低功耗等明显好处,通常上电后都必要从片外EPROM或Flash上加载步伐到片内RAM,但是芯片自带的自举步伐(简称BootLoader)只支持32 K字以内的外部步伐加载,因此步伐计划每每范围于32 K字空间内,限定了编程的机动性,不克不及充分发挥5410的性能。当步伐空问大于32 K字时,就必要本身编写步伐来实现自举。下面起首先容利用5410对Am29LV200BFlash存储器举行步伐分页烧写的要领,然后重点先容利用Bootloader来编程实现多页并行自举引导的要领。
1 Am29LV200B Flash 存储器的分页烧写
1.1 FIash 存储器简介
Am29LV200B(简称Flash)是AMD公司生产的Flash存储器,重要特点有:3 V单电源供电,可内部孕育产生高电压举行编程和擦除操纵;支持JEDEC单电源Flash标准;只需向其下令寄存器写人标准的微处理惩罚器指令,详细编程、擦除操纵由内部嵌入的算法实现,并且可以通过查问特定的引脚或数据线监控操纵是否完成;可以对任一扇区举行读、写或擦除操纵,而不影响其他部分的数据。文中128K×16位Am29LV200B Flash映射为5410的片外数据存储空间,地点为:0x8000~0xFFFF,数据总线16位,用于16位方法的并行引导装载。128K的Flash被分为7页举行访问。本文通过DSP的I/O端口向FPGA写控制字,由FPGA控制Flash的换页引脚对各个分页举行访问;以烧写2个页面为例,利用Flash的第1、2页,初始化时选中第l页。
1.2 Flash 存储器的分页烧写
Flash的页面分派和相应的引脚控制如表1所列。关于Am29LV200B的擦除、写、校验等细致操纵。
从表1可以看到,通过对A16、A15等地点引脚的控制,可以实现Flash的页面切换。在烧写进程中,只要在指定页面烧写完预定空间后就对Flash举行换页,然后将烧写指针指向新的一页的首地点,就可以连续举行烧写,当步伐烧写完成后必要将页面换回到第1页,在第1页的FFFFH地点写入8000H,如许Bootloader可以从这一页开始自举。整个烧写步伐流程如图1所示。
这里会出现一个题目:步伐烧写好后,固然Bootloader可以主动加载步伐,但是Bootloader怎样在加载进程中主动换页?下面细致先容利用片上Bootloader编程实现多页步伐并行加载的要领。
2 多页并行加载的实现
实现多页加载,关键题目是要让Bootloader知道什么时间可以换页;但是Bootloader是固化在5410片上ROM内的,无法对其举行编程。办理的要领是通过本身编写一段“前导”加载步伐(简称Loader)来实现加载中的换页:起首将Loader和用户步伐都烧写到Flash中,当体系上电后,Bootloader将Loader加载到片上并运行,然后Loader将Flash中的用户步伐加载到目标RAM空间。这个加载进程是用户编程可控的,因此在必要换页时,可以控制Flash举行换页,加载完成后,Loader跳转到用户步伐的人口地点处运行用户步伐。
2.1 Bootloader的并行自举表结会商编程后的自举表布局
5410的并行加载进程以及天生并行自举表的细致要领请见参考文献[1]、[3]。BootLoader利用图2所示的并行自举表来加载步伐。Bootloader从表头开始依次读取自举表,然后将相应的步伐段加载到目标RAM,末了以步伐段大小为0来结束自举表的读取,跳转到用户步伐入口地点实行用户步伐。从图2可以看到,Bootloader因此自举表中的步伐长度为0来结束自举的,于是就可以利用这个特性,给Bootloader制造一个“假象”,让Bootloader在加载完Loader步伐后,以为步伐已经加载完毕,然后开始运行Loader步伐,连续加载用户步伐。根据这个思路,可以创建图3所示的自举表。
图3中的黑体字部分,是嵌入了Loader步伐的自举表,有了图3如许情势的并行自举表,体系就可以实现多页步伐的并行自举。创建如许的自举表很大略,只必要将hex500格局转换东西天生的Loader的并行自举表和用户步伐的并行自举表按图3给定的格局,通过大略的文件操纵归并在一起就可以了。细致:Loader步伐要占用一部分RAM空间,用户步伐空间不克不及和Loader的RAM空间重叠在一起。
2.2 Loader步伐的详细实现 下面以散布在2个FLASH页面的步伐为例,给出5410并行自举的示例步伐。步伐中,当I/O端口5写人数据O时,选中Flash第1页;写1时选中第2页。步伐里用黑体字标出的解释部分,是Loader步伐计划的重点或难点。
示例步伐中,
DSP上电后,Bootloader将Loader步伐加载到RAM中,然后实行Loader步伐:Loadelr步伐从Flash第1页的8080H开始读取用户步伐自举表,当Flash读取计数值高出31 K时,将Flash切换到页面2,连续加载,自举完成后,跳转到用户步伐入口地点实行用户步伐。在编写自举步伐进程中,有如许几个题目必要细致:
①在换页时,一样平常环境下步伐段都市超过两个页面,因此在确定必要换页时要谋略出第1页和第2页分别要加载的段长度。
②整个用户步伐段开始时有2个字的入口信息,每一个步伐段都有3个字的段信息,因此必要在Flash读取计数时赐与修正,才华精确加载数据。
③在确定必要换页时要将换页标记置为1,换页后要将换页标记置为0,并且换页后要将数据读取指针指向第2页的开头地点。
要是要利用本文的示例步伐,肯定要将Loader步伐烧写到Flash第1页8000H的位置,用户步伐段烧写到8080H以后的位置。再次提示,Loader步伐加载到RAM中的地点,不克不及和用户步伐段加载到RAM中的地点重叠。比方Loader利用了RAM中的7F80H~8000H这段空间,则用户步伐不克不及利用这段空间,不然会出现错误。Loader的自举流程如图4所示。
3 总 结
要实现5410的多页步伐并行自举,有如下几个步调:
①根据用户步伐的需求以及实际利用Flash的分页设置,参考第2部分提供的思路和例子编写Loader步伐;
②利用hex500代码转化东西分别天生Loader步伐和用户步伐的自举表;
③将两个自举表按图2的格局天生一个新的自举表,再利用第1部分先容的要领将新的自举表分页烧写到Flash上。
利用本文先容的要领,通过多次试验,体系上电后,可以或许很好地实现2个页面步伐的并行自举。固然因此2个页面为例先容FLASH烧写和并行自举的要领,但是对付2页以上的步伐烧写和并行自举同样实用,只必要举行一些渺小的窜改即可。本文提供的要领以不到128字的RAM空间价格,在5410上实现了将大于32 K字的步伐并行自举到片上RAM,大大进步了编程的自由度和步伐的运行速率,低落了体系功耗。这个要领有很强的通用性,可以在很多存在雷同题目的
DSP芯片(5409、5416等)上举行应用,具有较高的实用代价。