分页烧写Flash的多页程序并行自举方法
发布时间:2008/5/27 0:00:00 访问次数:600
    
    
    来源:单片机及嵌入式系统应用 作者:兵器工业第58研究所 左颢睿 李焱 马艳
    
    摘 要:以tms320vc5410-p.htm" target="_blank" title="tms320vc5410货源和pdf资料">tms320vc5410为例,介绍对am29lv200b flash存储器进行程序分页烧写以及上电后多页用户程序并行自举的方法。对多页flash存储器的烧写,须在烧写过程中对已烧写的数据长度进行动态判断,当达到预定烧写长度后对flash进行换页,然后继续烧写,重复上述换页过程,直到程序烧写完为止。对多页程序的并行自举,在系统上电后,利用ti提供的自举程序,将一个用户自己编写的前导程序载入dsp,利用该前导程序将多页程序载入dsp来实现程序的自举。此方法适用于多种fiash芯片和c5000系列dsp。
    
    关键词:tms320vc5410-p.htm" target="_blank" title="tms320vc5410货源和pdf资料">tms320vc5410 am29lv200b dsp 多页并行自举
    
    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]、[2]。
    
    
    从表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
    
    
    来源:单片机及嵌入式系统应用 作者:兵器工业第58研究所 左颢睿 李焱 马艳
    
    摘 要:以tms320vc5410-p.htm" target="_blank" title="tms320vc5410货源和pdf资料">tms320vc5410为例,介绍对am29lv200b flash存储器进行程序分页烧写以及上电后多页用户程序并行自举的方法。对多页flash存储器的烧写,须在烧写过程中对已烧写的数据长度进行动态判断,当达到预定烧写长度后对flash进行换页,然后继续烧写,重复上述换页过程,直到程序烧写完为止。对多页程序的并行自举,在系统上电后,利用ti提供的自举程序,将一个用户自己编写的前导程序载入dsp,利用该前导程序将多页程序载入dsp来实现程序的自举。此方法适用于多种fiash芯片和c5000系列dsp。
    
    关键词:tms320vc5410-p.htm" target="_blank" title="tms320vc5410货源和pdf资料">tms320vc5410 am29lv200b dsp 多页并行自举
    
    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]、[2]。
    
    
    从表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