《基于DSP芯片的Flash程序自举引导的方法实现.docx》由会员分享,可在线阅读,更多相关《基于DSP芯片的Flash程序自举引导的方法实现.docx(6页珍藏版)》请在第一文库网上搜索。
1、基于DSP芯片的F1ash程序自举引导的方法实现作者:陈若珠,胡金平,李战明随着数字信号处理技术的快速发展,DSP被广泛应用于各种数字信号处理系统中。终开发的系统若要脱离仿真器运行,必须将程序代码存储在非易失性存储器中。F1ash是一种可在线进行电擦写而掉电后信息又不丢失的存储器,它具有功耗低、容量大、擦写速度快等特点。如何将程序烧写进F1aSh,并在上电时加载到DSP内部的幽中,是F1aSh在DSP系统应用中的两个基本问题。本文基于旦公司的TMS320VC5509A和迪公司的AM291V800开发系统,详细阐述了在线烧写FIaSh并实现自举启动的方法。1硬件电路设计图1为TMS320VC55
2、09A与AM291V800的连接示意图,F1ash扩展在CE1空间,起始地址为200000。由于TMS320VC5509A只有14根地址线A(TAI3,又因为FIaSh作为数据存储空间使用时的地址编码采用字寻址方式,则DSP的AO信号无效,所以M291V800范丘的低13位地址线0A12连接TMS320VC5509的地址线A1A13,高6位地址线A13A18由缓冲串口来扩展。图1TMS320VC5509A与AM291V800的连接示意图AM291V800是低功耗FIaSh,工作在2.7V3.6V电压下,一般存储数据可以保存100年以上,可以重复编程次数高达10万次。A18A0为外部地址管脚,D
3、Q0DQ15为16条数据线,为片选控制管脚,为输出控制管脚,为写入控制管脚。2自启动过程分析及启动表结构DSP系统的boot1oMer是指在系统上电时将一段存储在外部非易失性存储器中的程序搬移到DSP片内或片外扩展的高速RAM中并执行的代码。Boot1oader程序性地存储在DSP以FF8000H开始的咽中,DSP系统在复位后PC=FF8000H,即从BOotIoader程序首地址开始执行。TMS320VC5509DSP的BoOt1Oader有多种加载方式3,如表1所示,设置DSP的GP100-GP103,DSP在复位时读取这4个引脚上的状态以确定所使用的启动模式。本文使用16-bitEMIF
4、加载方式,虽然连线复杂,需要考虑并行非易失存储器F1aSh与EMIF接口的匹配关系,但是它的优点很多:不需要外部时钟驱动,非易失存储器种类多样,容量较大,除了存储表之外,还可存储系统需要保存的关键数据,以便在掉电时保存信息。表1TMS320VC5509A的加载方式在这些加载模式下,程序之前先要生成一张载入表,即引导表。引导表的结构如图2所示,引导表携带的信息有代码段和数据段信息,向DSP程序的入口点地址、寄今密配置信息和可编程延时信息。字节地址字节地址字节地址字节地址+0+1+2+3入口点地址(32bit)需配置寄存器数(32bit)寄存器地址寄存器值延迟指针延迟计数段字节数(32bit)段起
5、始地址(32bit)数据数据数据数据数据数据数据数据321i0(引导表结束)图2引导表结构读引导表可知以下信息:程序入口地址是引导表加载结束后用户程序开始执行的地址,也就是用户程序生成的map文件中显示的入口地址;需配置寄存器数表明后面有多少个需要配置的寄存器;当延时标志为OXFFFF时,执行延时,延时长度决定了在寄存器配置后延时多少个里周期才进行下一个动作;段字节数、段起始地址和数据表示用户程序中定义的各个段的内容;引导表以32个0为结束标志。生成引导表的方法:通过在DOS环境下使用hex55.exe转换工具。在转换操作之前,先把用户程序生成的。OUt文件、包含转换选项的CMD文件hex55
6、09.cmd和转换工具hex55.exe放在同一个文件夹里,在DoS方式下先将路径修改为文件所在的位置,然后在此路径下运行命令hex55hex5509.cmd,即可生成想要的。hex文件。在转换时,提供引导表的相关配置信息的CMD文件这里被命名为hex5509.cmd,文中用到的hex5509.cmd的内容为:boot-v5510:21ED.Oii1-0F1ASH.h*x-pam11(116-*nvi(1d16-ronwidth16-eOXOOoOO4d4-map1ED.map-1yOxffff*创建一个引导表*/*选择合适的DSP引导表格式*/*输入文件*/*输出文件*/*输出格式为stra
7、ightASCII*/*16位并行异步加载模式*/*程序的入口地址刃/*输出map文件*/,延时N3F1ash烧写F1ash的读操作与传统EPROM读操作相同。由于芯片使用软件保护模式进行操作,用户编程时,只要向指定的地址写入指定的序列,就可以启动F1ash芯片内部的写状态机,完成指定的操作。表2为FIaSh的操作命令说明(对芯片的擦除和编程都是按照字进行的),表中所有的数据都是十六进制数。F1ash的正确操作顺序:先复位,再擦除,编程。按照表2提供的操作命令时序来实现对AM291V800的擦除和编程,PA为编程地址,PD为编程数据。F1ash扩展在CEI空间,起始地址是200000,所以操作
8、时所有地址必须加上200000o例如烧写工程中擦除部分命令为:(kminaddr=(ini*)CESECT1:a1d1)ias=0x0555;* (1eni(1ias)=0x(X)aa:addbias=0x02aa;* (1(Mii!ia(1(1r+a111)ias)=0x(K)55;aias=0x0555;* (d(mina(1(1r+a(1(1bias)=OxO()8O:aias=0x0555;* (1ias)=Ox(K)aa:addbias=0x02aa;* (dfminad1r+addbias)=OxOO55:addbias=0x0555:* (1emina(1(1ra(1(11)ia
9、s)=0x0010;de1ay(IOO)刈问一库表2AM291V800B的操作命令说明命令序列复位擦除编程步骤地址XXX555555第1步数据FOAAAA地址2AA2AA第2步.一口数据5555地址555555第3步数据80AO地址555PA第4步.数据AAPD地址2AA第5步数据55地址555弟b3*.数据IO芯片擦除需要占用6个总线周期,而芯片编程需要4个总线周期,依照表3的数据,在每个总线周期对相应地址写入命令字就可以了。用户一般都是对芯片进行写操作,写操作只能使1变0,而擦除只能使0变为1。图3为擦除和编程命令波形图,清楚地显示了擦除和编程操作过程。Vcc图3擦除和编程命令波形图判断编
10、程或擦除的结束是当把编程或擦除的命令字按照其时序写入FIaSh时,在写编程命令时序或擦除命令时序的一个WE上升沿到来之后,AM291V800会自动运行一个嵌入在F1ash内部的篁去来判断编程或擦除操作是否结束。采用触发位校验的方法,检遮数据切换位DQ6(Togg1eBit)的状态,连续读数据会使DQ6的值在i0,和4,之间来回切换,当编程或擦除结束时,DQ6就停止值的切换。因此,可以通过连续两次读DQ6的值来判断编程或擦除是否结束,当两次读得的值相同时,说明编程或擦除结束,否则没有。触发位检测算法流程图如图4所示。图4触发位检测算法流程图4程序的烧写实现本系统在CCS仿真环境下对FIaSh进行
11、在线编程。先建立一个F1aSh的烧写工程,并在工程中将要烧写进F1aSh的引导表文件通过CCS的1OADDATA功能直接加载进DSP的内存,根据加载的首地址和数据长度,在仿真环境下烧写进F1aSh中。值得注意的是,程序加载的内存空间不能与F1aSh的烧写程序重叠,否则烧写失败。烧写完成以后,关掉电源,拔掉仿真器电缆,让仿真器和计算机脱开:重新打开电源,实验板上指示灯闪烁,表明烧写进F1aSh程序正在运行,自启动成功。需要补充的是,经过hex55.exe文件转化后的hex文件的引导表文件不能直接导入CCS中,CCS只支持将特别规定的DAT格式文件通过1OADDT导入内存,所以在导入之前必须先将引导表转化成DAT格式文件,这个工作可以由VC编写一个简单的C语言转化程序实现。本文阐述了一种针对TMS320VC5509ADSP简单有效的FIaSh烧写方法,并提出了程序自举引导的实现方法。可以有效地解决程序代码存储问题和DSP脱机自举问题,不仅提高了调试效率,也增加了系统的灵活性。本文讨论的引导方法包括硬件设计及相关程序,己经在笔者的实际开发语音项目中使用并成功运行。责任编辑:gt