Bootloader下实现Flash的读写_第1页
Bootloader下实现Flash的读写_第2页
Bootloader下实现Flash的读写_第3页
Bootloader下实现Flash的读写_第4页
Bootloader下实现Flash的读写_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、百度文库-让每个人平等地提升自我1 .本课题的目的12 .运行环境1正文11 .课题分析12 .系统设计23读取数据模块的流程图3 .技术实现问题44 .编译及调试12设计性实验报告成绩:5 .总结与体会15指导教师签名:.15课题要求1 .本课题的目的在bootloader启动后,提供一个可以读写Flash的程序,可以提供用户 保存一些数据,如系统的IP地址。2 .运行环境硬件:ARM嵌入式开发平台、用于ARM7TDM的JTAG仿真器、PC机Pentium100 以上。软件:PC 机操作系统 win98、Win2000 或 WinXP、ARM5DT2.51 或 ADS1.2 集成开发环境、仿

2、真器驱动程序、超级终端通讯程序。正文一.课题分析本次课题是基于嵌入式系统 BootLoader的Flash的读写,因此必须首先 了解嵌入式系统BootLoader的框架和编写过程。BootLoader和BIOS在功能上是没有差别的。其功能包括上电后对系统 进行自检,主要包括 SDRAMCACHE FLASH等硬件;提供 Shell Menu 检测 设置菜单和相应的检测程序;引导操作系统及应用程序。BootLoader所谓的引导功能指的是:BootLoader程序首先获得系统的控 制权之后,对关键硬件自检,在没有发现故障并且控制台没有发出启用ShellMenu检测菜单的情况下,依据文件系统的管理

3、和支持,从电子硬盘即16MNAND FLASH中读取操作系统或应用程序的代码到SDRAM勺指定位置,然后把程序指针转移到该位置,从而使操作系统获得控制权,完成引导过程。在Shell Menu 检测菜单中也可以设置实现引导功能的命令。执行BootLoader时,首先作了必要的硬件初始化,仅给出了 NANELASH自检例程(没有给出芯片操作细节),然后输出提示信息。接下来会等待查询是否有键按下,如果没有则直接引导系统;否则显示Shell Menu。综上,要实现嵌入式系统BootLoader下Flash的读写,需要在基本BootLoader程序的基础上,在Shell Menu±添加擦除扇区

4、、把数据写入Flash、 从Flash中读取数据三个菜单,并编写相关功能菜单的代码。二.系统设计本次设计性试验的在基本的bootloader的基础上添加了三个模块:扇区 擦除模块、把数据写入Flash模块、从Flash中读取数据模块。整个实验的 的主体部分包含bootloader引导过程流程图、进入 Shell Menu后的流程图 以及新添加的三个模块的流程图。进入Slidl Menu后的范.程图图2百度文库-让每个人平等地提升自我写入数据模块的流程图开始图4读取数据模块的流程图图54百度文库-让每个人平等地提升自我三.技术实现问题1、在Shell Menu上添加菜单首先在Shell Menu

5、上添加擦除扇区、把数据写入 Flash、从Flash中读 取数据三个菜单。每个菜单项都对应一个类型为Bios_function的结构体变量,其中包括该菜单项的功能函数指针,快捷键,菜单中的提示信息等内容。所有这些结 构体变量都在一个数组中,以方便检索。在显示菜单后程序等待按键并根据 键值查找对应的功能函数。ios_function的结构体变量的定义如下:typedef struct Bios_func_t func;char *pShellMenu; /shell模式下显示的菜单字符串char MenuAcc; /shell模式下菜单快捷键char *pCommand; 命令行模式下的命令ch

6、ar *pHelp; /命令行模式下的帮助Bios_function;(1)在Shell Menu上添加擦除扇区菜单:Bios_function SectorErase_func=SectorErase,"erase the flash",/shell模式下显示的菜单字符串's', /shell模式下菜单快捷键"eraseflsh", /命令行模式下的命令NULL /命令行模式下的帮助;(2)在Shell Menu上添加把数据写入Flash菜单Bios_function Flashwrite_func=Flashwrite,Write t

7、he flash",/shell模式下显示的菜单字符串16'w',/shell"writeflash", /NULL /模式下菜单快捷键命令行模式下的命令命令行模式下的帮助;(3)在Shell Menu上添加从Flash中读取数据菜单Bios_function Flashread_func=Flashread,"read the flash",/shell模式下显示的菜单字符串'r', /shell模式下菜单快捷键"readflsh",/命令行模式下的命令NULL/命令行模式下的帮助;2、编写

8、 SectorErase_func 函数(1)编写菜单SectorErase_func的源码实现把数据写入 Flash的功能static void SWPIDExit(void)CMD_ADDR0 = OxfOfO;state &= 0xfc;static void CFIQueryExit(void)CMD_ADDR0 = Oxaaaa;CMD_ADDR1 = 0x5555;CMD_ADDR0 = OxfOfO;state &= 0xfc;void SectorErase(void) /擦除扇区函数U32 sector;if(state&1)if(state&

9、2)SWPIDExit();elseCFIQueryExit();sector = 0x10000; 要擦除扇区的起始地址CMD_ADDR0 = 0xaaaa; 向地址 0x5555 写入 0xaaaaCMD_ADDR1 = 0x5555; /向地址 0x2aaa 写入 0x55555CMD_ADDR0 = 0x8080; /向地址 0x5555 写入 0x8080CMD_ADDR0 = 0xaaaa; 向地址 0x5555 写入 0xaaaaCMD_ADDR1 = 0x5555; /向指定地址写入 0x3030/volatile U16 *)sector = 0x3030;/要擦除扇区的结束

10、地址while(1)/ 一直循环,直到擦除完成才退出U16 i;i = /(volatile U16 *)sector)&0x40;if(i!=*(volatile U16 *)sector)&0x40)D6 = D6continue;if(*(volatile U16 *)sector)&0x80)break;D7 = 1printf("Erase sector 0x%x ok'n", sector-ROM_BASE);(2)编写 Flashwrite_func 函数编写菜单Flashwrite_func 的源码,实现读取Flash数据的功

11、能void FlashProg(U32 ProgStart, U16 *DataPtr, U32 WordCnt) U16 i, j;ProgStart += ROM_BASE; / 写 flash 的起始地址为 0x10000for( ; WordCnt; ProgStart+=2, DataPtr+, WordCnt-)/一直循环,直到写Flash完成才退出j = *DataPtr;CMD_ADDR0 = 0xaaaa;/向0x5555地址处写0xaaaaCMD_ADDR1 = 0x5555;/向地址0x2aaa处写0x5555CMD_ADDR0 = 0xa0a0;/向地址0x5555处写

12、0xa0a0/向指定地址写入数据D6 = D6/volatile U16 *)ProgStart = j;while(1)i = /volatile U16 *)ProgStart&0x40;if(i!=*(volatile U16 *)ProgStart&0x40)continue;if(*(volatile U16 *)ProgStart&0x80)=(j&0x80) break;D7 = D7 void Flashwrite(void)int dataaddress=123;/ 定义 IP 的最后一位U32 begin=0x10000; 把数据写入的起始地

13、址U32 size=2;/定义规定存放数据的大小为2个字节,即以2/个字节为单位进行存放U8 tmprINTCON;U32 tmprINTMSK;tmprINTCON = rINTCON;tmprINTMSK = rINTMSK; /与前一句一起实现将原有中断保存rINTCON = 0x7;rINTMSK = 0x07ffffff; /与前面一句合起来的作用是关闭中断/调用写函数:FlashProg(begin, (unsigned short *)&dataaddress, size);rINTCON = tmprINTCON;rINTMSK = tmprINTMSK;printf(

14、"Program ok n");在对flash进行写操作时,应注意要先对 flash进行擦除操作,以免受 flash的原有的内容的干扰。(3)编写实现菜单Flashread_func功能的源码void readFlash(unsigned int *dataaddr1)datadata=*dataaddr1;/读出 0x10000 地址的数据给 datadatavoid Flashread(void)char str60;int i,num;char *str0,*str1;unsigned short data;readFlash(unsigned int *)dataa

15、ddr);Uart_Printf("Read data address :%u.%u.%u.%un”,(datadata>>24)&0xff, (datadata>>16)&0xff, (datadata>>8)&0xff, datadata&0xff);/把数据输出到超级终端上(4)镜像文件的烧写UP-NETARM3000台 UCLINUX(统烧写方法:A将并口简易Jtag连接到实验箱145tJTAG接口,然后开机。B、在PC端运行UarmJtag2.0软件,点击“初始化配置”,导入文件 C:/ProgramFil

16、es/UArmJtag/44b0x-init ;C点击“打开”,找到要烧写的二进制文件“ system.bin ”;口点击“FLASHY程",弹出FLAS佛程对话框,“烧录起始地址”为“0X0”, “ARM#部总线”为16位,选上“使用RAM,点击“选择FLASH,型号选 “Am29LV160B(16 位,2048KB);E、配置好后,点击“扇区擦除”,大约经过4秒左右,擦除扇区完毕;也可以点击“整片擦除”,大约20秒左右,整片FLAS也擦除;F、整片FLASH皮擦除后,等5秒钟后,点击“编程”,大概3秒编程完 毕。复位3000平台,从超级终端即可看到启动信息,按任意键可进入 She

17、ll Menu菜单。需要说明,平台的BIOS烧写到一片2MBOOFLASH芯片中,相当于BOOT ROM该芯片挂在系统总线上,占用0Bank地址空间;当系统上电或硬件复位 后首先从0Bank的0x00000000地址执行指令,也就是从BIOS开始执行程序。 BIOS首先获得系统的控制权。而操作系统以及应用程序等则是拷贝到另外一片16MNANDFLASH芯片中的,而且是用文件系统进行管理的,这相当于一个海量存储器或电子硬盘, 同时当平台激活USB时,该芯片构成U盘使用。(5)超级终端的使用打开超级终端,输入超级终端的名称,选择 ARM开发平台实际连接的PC 机串口(如COMD1,按确定后出现如图

18、4-1所示的属性对话框,设置通信的 格式和协议。这里波特率为115200,数据位8,无奇偶校验,停止位1,无数 据流控制。按确定完成设置。图6四.编译及调试1、实验步骤:(1)在编译环境下新建工程,设置 Release版本的环境,选择保存路径。需要注意的是,由于BootLoader映象文件最终运行的地址空间是0Bank, 所以该工程的连接地址不同于其他运行于SDRAM勺工程。Release版本的ROBase是0x0, RW Base是0xc600000;另外, 也可以把工程最后产生的二进 制文件名改为bootloader.bin 。ADS环境下,该工程无需其他工程才具有的 init 目录,而

19、ARMLinker配置中的 Output选项中LinkerType 也要选择 Simple ,然后输入上述地址即可。(2)把本实验目录下的源文件加入工程。在这里没有给出文件系统的源码, 所以把文件系统的库文件也加入到工程中。SRO录下包括系统启动的必须初 始化配置文件和部分用到的硬件驱动,以实现检测功能。(3)对工程进行编译,如有错误,则改正错误,直至没有错误。(4)将Jtag的仿真器一端与PC机相连,另一端连到Jtag接口上。串口线接到串口 0上。打开电源。具体链接如图7图7(5)镜像文件的烧写:使用合适的烧写工具,比如博创科技的硬件仿真器,把Release 版本的 bootloader.b

20、in 烧写到 BOOT FLASHk注意:在本实验中请用户确保有可靠的烧写工具后再尝试把本实验的结果烧写到BOOT FLASHY。否则可能无法正确恢复原有 BIOS将会导致系统不能 正常使用!(6)打开超级终端,设置相关参数,进入通信界面(7)进入Shell MenUMI:将试验箱复位,同时在试验箱上键盘上按下任意键。(8)擦除扇区:在PCI键盘上按下s键,等一小段时间后将试验箱复位。(9)把数据写入Flash :在PCM键盘上按下通,等一小段时间后将试验箱复 位。(10)把数据从Flash读出,并在超级终端上显示:在 PCI键盘上按下r键。 实验结果:2、超级终端显示结果重启实验箱,在启动过

21、程中按住实验箱上的小键盘,即在超级终端界面上出现Auto Boot之前长按小键盘。出现如下菜单项。如图 8She 1 Memj>>Test I CD g >> f e£t LLDk >9Enter Test Kev Mode a »Ehter Test ADC Hode b >>Boot dofoult svctsn w >>»rile the Plash r >>refid Ihe flash 5 >>erase the flush按RESET重启实验箱后,按PC机上的S键,即可擦除flash指定地址 的内容重新启动实验箱,按PC机上的W犍,即可实现flash的写操作重启实验箱,按PC机上的R键,可实现flash的读操作。读到的flash 内容将在超级终端上显示。如图 9Shell Menu1 »Test LCD e »Test LEDk »Fnti?r lest Key Mode a >>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论