




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
物理与电子工程学院设计实验报告 嵌入式系统与应用设计性实验报告 题 目 Bootloader下实现Flash的读写 系 别 年 级 专 业 班 级 学 号 学生姓名 指导教师 实验时间 2010.6 目 录课题要求21.本课题的目的22.运行环境2正文3一.课题分析31.1ADS1.2 开发环境31.2超级终端41.3Bootloader的烧写过程5二系统设计62.1程序流程图62.2代码分析72.3硬件连接图102.4实验结果11三.技术实现问题12四. 总结与体会12参考文献13设计性实验报告成绩: 指导教师签名:14课题要求1.本课题的目的嵌入式系统是当前研究的热门课题。而Bootloader是嵌入式系统软件开发的第一个环节,主要用于完成由硬件启动到操作系统启动的过渡,从而为操作系统提供基本的运行环境。Bootloader从字面上讲就是启动装载程序,这一程序在系统的启动过程中扮演了非常重要的角色。由于Bootloader作为内核的引导者,并不承担业务软件的功能,所以它并没有引起足够的重视。但它是系统启动时运行的第一段代码,用于引导操作系统内核。如果由于误操作或者程序异常导致Bootloader被改写,那么第一个运行的程序就遭破坏,后续程序就不可能也没有办法运行了,这时就必须使用加载工具重新烧写Bootloader,而这在产品应用现场是不可能完成的。因此,Bootloader在嵌入式系统设计中举足轻重。Bootloader通常被存放在Flash存储器中。Flash存储器是一种可在线多次擦除的非易失性存储器,即掉电后数据不会丢失。它主要分为两种:一种为NOR型Flash,另一种为NAND型Flash。NAND型Flash以块为单位存取数据,使用控制信号选择极高的单元密度,并且写人和擦除的速度也很快,是高数据存储密度的最佳选择。而NOR型Flash的特点是支持程序在芯片内部运行,这样应用程序可以直接在Flash上运行,不必再把代码读到系统RAM中。基于上述特点Bootloader通常是存储在NOR Flash中,我们本次实验就是研究Bootloader下实现NOR Flash的读写。2.运行环境硬件:ARM嵌入式开发平台、ARM7TDMI 的JTAG 仿真器、PC机Pentium100 以上。软件:PC 机操作系统win98、Win2000 或WinXP 、ARM SDT 2.51 或ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序 正文一.课题分析本次实验的设计要求是在Bootloader启动后,提供一个可以读写Flash的程序,可以提供用户保存一些数据,如系统的IP地址等。在进行编写Flash的操作前,我们还必须知道:如何使用ADS 编译、下载、调试;超级终端的使用;怎么通过ARM7TDMI 的JTAG 仿真器将Bootloader程序烧写到实验箱中; Bootloader的作用等等。这些都必须事先做好准备,这样才有可能将本次实验做好。而具体要对NOR Flash进行的操作包括“读”、“写”和“擦除”。对于“读”操作,可以直接从相应地址读出数据,但对于“写”和“擦除”操作,应遵循NOR Flash的操作步骤,通常应根据地址定义的类型,向特定的地址处写入特定的命令字,然后再读出数据,以验证操作是否成功。下面我将具体介绍ADS1.2 开发环境、超级终端和Bootloader的烧写过程。1.1 ADS1.2 开发环境我们要学会使用ADS1.2来进行编译、下载、调试,在此我简要介绍下。首先得建立一个新的工程,选择File New菜单,将它放到所要保存的路径下。然后选择Release版本,它是用于下载的,而Debug是用来调试的,可以不用设置。使用Edit | Debug Settings 菜单对Release 版本进行参数设置。在Debug Settings 对话框中做如下设置:选择Target Settings 项,在Post-linker 一栏中选择ARM fromELF;选择ARM Linker 项的Output 选项卡,由于BootLoader 映象文件最终运行的地址空间是0Bank,所以该工程的连接地址不同于其他运行于SDRAM 的工程,具体设置如下图1所示;选择ARM C Compiler 项,在ATPCS 选项卡中选择ARM/Thump interwork;选择ARM Linker 项,在Layout 选项卡的Place at beginning of image 框中设置程序的入口模块,具体操作如下图2所示;在Output file name 框中设置输出文件名为system.bin, 这就是要下载到开发板的嵌入式应用程序文件。如果需要调试的话, Debug版本参数设置和Release版本的一样。图 1 设置连接地址范围图 2 设置入口模块1.2 超级终端运行Windows 系统下的超级终端(HyperTerminal )应用程序,新建一个通信终端,取名为arm 。选择终端的连接的串口,设置通信的格式和协议,波特率为115200 ,无数据流控制。完成超级终端设置以后,可以保存为一个特定终端到桌面上,以备后用,然后在终端上就可以看到程序输出的信息了,如图3所示为本次实验的提示信息。图 3 提示信息1.3 Bootloader的烧写过程嵌入式系统的BootLoader,类似于PC上的BIOS,往往固化在系统0x0地址处的Flash之中,在系统加电复位后,操作系统内核执行之前,处理器将首先执行BootLoader中的启动代码。通过这段程序,初始化软硬件运行环境,如CPU异常向量表、各模式下的堆栈、内存控制器、看门狗等硬件设备;同时初始化应用程序,如C语言变量初始化,从而将系统软硬件设置到合适状态,最后引导操作系统内核并跳转到操作系统内核的起始代码部分执行。Bootloader功能包括上电后对系统进行自检,主要包括SDRAM,CACHE,FLASH 等硬件;提供Shell Menu 检测设置菜单和相应的检测程序;引导操作系统及应用程序。下面简要介绍下Bootloader的烧写过程,首先先打开UarmJtag,如图4所示,完成初始化配置,打开要烧写的目标代码,点击“Flash编程”,在弹出的对话框中如图5,写上地址,选择Flash的型号。然后把实验箱电源打开,点击“整片擦除”,完成后,重新复位,再点击“编程”,这样就完成了整个Bootloader程序的下载烧写。图 4 Jtag菜单栏图 5 初始化配置二系统设计2.1 程序流程图 图6 “写”操作流程 图7 “块擦除”操作流程2.2 代码分析首先我将介绍的是如何在Bootloader中增加菜单项。u 在Bootloader中增加三个菜单项。每个菜单项都对应一个类型为Bios_function 的结构体变量,其中包括该菜单项的功能函数指针,快捷键,菜单中的提示信息等内容。所有这些结构体变量都在一个数组中,以方便检索。在显示菜单后程序等待按键并根据键值查找对应的功能函数。 增加菜单项的基本格式为:typedef struct Bios_func_t func; char *pShellMenu; /shell 模式下显示的菜单字符串char MenuAcc; /shell 模式下菜单快捷键char *pCommand; /命令行模式下的命令char *pHelp; /命令行模式下的帮助Bios_function;我自己按照格式编写的代码如下:Bios_function Flashwrite_func= /写FlashFlashwrite, write the flash, /显示的菜单为“write the flash”w, /菜单快捷键为“w”writeflash, /命令行模式下的命令为“writeflash”NULL /没有帮助;Bios_function Flashread_func= /读FlashFlashread, read the flash, /显示的菜单为“read the flash”r, /菜单快捷键为“r”readflash, /命令行模式下的命令为“readflash”NULL /没有帮助;Bios_function SectorErase_func= /Flash块擦除SectorErase,erase the flash, /显示的菜单为“erase the flash”s, /菜单快捷键为“s”eraseflash, /命令行模式下的命令为“eraseflash”NULL /没有帮助;具体在超级终端上显示出来的效果为图8所示,可以清楚的看到Bootloader的菜单项增加了三个菜单项:图 8 菜单项下面我对Flash的操作进行具体说明,在进行Flash的各种操作前,应首先确定Flash地址类型为“字(16位)”还是“字节(8位)”,而本次实验是FLASH Am29LV160D的“字”地址类型。u FLASH“读”操作对于“读”操作,我们可以直接从相应地址读出数据,具体代码如下:void readFlash(unsigned int *dataaddr1) datadata=*dataaddr1; /直接从dataaddr1地址中读u FLASH“写”操作对于“写”和“擦除”操作,应遵循NOR Flash的操作步骤,通常应根据地址定义的类型,向特定的地址处写入特定的命令字,如果需要,再读出数据,验证操作是否成功。Flash“写”操作共需要4个周期的总线写操作,具体实现代码如下: void FlashProg(U32 ProgStart, U16 *DataPtr, U32 WordCnt)U16 i, j;ProgStart += ROM_BASE; /定义起始地址for( ; WordCnt; ProgStart+=2, DataPtr+, WordCnt-)j = *DataPtr;CMD_ADDR0 = 0xaaaa; /将0xaaaa写到FLASH地址0x5555CMD_ADDR1 = 0x5555; /将0x5555写到FLASH地址0x2aaaCMD_ADDR0 = 0xa0a0; /将0xa0a0写到FLASH地址0x5555*(volatile U16 *)ProgStart = j; /将数据写到对应的编程地址上去while(1) /判断是否写成功i = *(volatile U16 *)ProgStart&0x40;if(i!=*(volatile U16 *)ProgStart&0x40)/D6 = D6continue; /继续if(*(volatile U16 *)ProgStart&0x80)=(j&0x80)break; /D7 = D7,退出u FLASH“擦除”操作在对Flash读写操作之前,要先对Flash进行擦除操作。Flash有3种擦除方式:段擦除、块擦除和芯片擦除。不同的擦除方式有不同的擦除命令,本次实验所使用的是块擦除,它的操作需要6个周期的总线写操作,将6条命令写入对应地址,就可实现块擦除。具体的代码如下:void SectorErase(void) U32 sector;if(state&1)if(state&2)SWPIDExit();elseCFIQueryExit();sector = 0x10000; /块擦除地址为0x10000CMD_ADDR0 = 0xaaaa; /将0xaaaa写到FLASH地址0x5555CMD_ADDR1 = 0x5555; /将0x5555写到FLASH地址0x2aaaCMD_ADDR0 = 0x8080; /将0x8080写到FLASH地址0x5555CMD_ADDR0 = 0xaaaa; /将0xaaaa写到FLASH地址0x5555CMD_ADDR1 = 0x5555; /将0x5555写到FLASH地址0x2aaa*(volatile U16 *)sector = 0x3030;/将0x3030写到要擦除的SECTOR对应的地址while(1)U16 i; /判断是否擦除成功i = *(volatile U16 *)sector)&0x40;if(i!=*(volatile U16 *)sector)&0x40) /D6 = D6continue; /继续if(*(volatile U16 *)sector)&0x80)break; /D7 = 1,退出printf(Erase sector 0x%xokn, sector-ROM_BASE);以上就是对本次实验主要代码的分析。2.3 硬件连接图本次实验所用的Flash为Am29LV160D,它是由AMD公司推出的1M16bit的CMOS多用途Flash。图 9 Am29LV160D的电路连接图ARM处理器外部扩展的是16-BIT的NOR FLASH,数据线必须要错位连接。图10给了一个ARM处理器和16-BIT NOR FLASH的连接示意图。ARM处理器的数据信号D0-D15和FLASH的数据信号D0-D15是一一对应的。而ARM处理器的地址信号和NOR FLASH的地址信号是错位连接的,ARM的A0悬空。需要错位连接的原因是:ARM处理器的每个地址对应的是一个BYTE的数据单元,而16-BIT的FLASH的每个地址对应的是一个HALF-WORD(16-BIT)的数据单元。为了保持匹配,所以必须错位连接。这样,从ARM处理器发送出来的地址信号的最低位A0对16-BIT FLASH来说就被屏蔽掉了。图 10 ARM处理器和16-BIT FLASH的连接示意图注:有些ARM处理器内部可以设置地址的错位。对于支持软件选择地址错位的处理器,在连接16-BIT FLASH的时候,硬件上可以不需要把地址线错位。如果处理器支持内部设置地址错位,在实际访问的时候,送出的地址实际上是在MCU内部做了错位处理,其作用是等效于硬件连接上的错位的。2.4 实验结果打开ADS,设置参数,设置好之后,把代码放进去编译,有错误修改,没有错误的话,生成system.bin文件,注意是把Release版本的的system.bin通过JTAG烧写到实验箱中,然后打开超级终端看结果。(具体操作过程在课程分析中讲过了,在这里不重复了。)在键盘上依次按键 s、w、r(先擦除,然后写,最后读),当然每次按键过后都要按复位键重新复位,最终超级终端上显示的结果如下:图 11 实验结果三.技术实现问题在本次实验完成过程中,我们碰到了下面几个主要问题。一开始我们不知道从哪下手,经过老师的多次讲解和分析,我们决定按老师说的分为三部分:“读”、“写”、“擦除”,分别来写。我们就想建立一个Flash.c文件,在这里面写相关代码,可写完了编译时发现出错,出错提示是我建立的Flash.c文件与主文件Main.c同名,可检查发现没重名啊,后来我们问老师,老师建议我们重新建个文件,可建了之后,编译时发现又是这个错误,最后实在不知道哪错了,我们只好将Flash.c里的文件都放到Main.c里面,这才没错误。我们将system.bin烧写到实验箱中发现结果没有出来,经过同学的提示才知道我们应该将起始地址定义在0x10000,否则将和Bootloader程序冲突,修改过后实验结果终于出来了。当然在这过程中,还会碰到许多其它的问题,但那些都是小问题,看到提示后就知道错在哪了,比如,变量没定义,符号错误啊等等,都是由于写的时候没注意引起的。四. 总结与体会本次实验重点在于Bootloader和Flash的研究,我们毕竟是刚接触这方面的知识,所以不会是很正常的,首先我通过去图书馆或上网查资料知道它们起的作用、如何操作等,现在科技发达,完全可以找到相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市绿化与休闲空间融合设计创新创业项目商业计划书
- 大豆蛋白素食肉酱生产创新创业项目商业计划书
- 坚果炒货品牌化创新创业项目商业计划书
- 坚果清真坚果系列创新创业项目商业计划书
- 2025合同范本之物流公司用工合同
- 2025租房合同范本内容
- 2025上海如何开具餐饮发票合同范本
- 2025购房合同范本
- 2025农村私人土地承包合同范本
- 2025药品质量保证合同书范本
- 2024版2025秋贵州黔教版综合实践活动五年级上册全册教案教学设计
- 转作风重实干课件
- 村干部饮水安全培训总结课件
- 甲状腺课件类型
- 《工程勘察设计收费标准》(2002年修订本)
- 最新人教版四年级英语上册课件(完美版)Review of Unit 5
- 掌骨骨折查房课件
- 大学食堂装饰装修方案
- 工资结清证明(模板)
- 矿山档案(台帐) 表格参照模板参考范本
- 航运管理实务整套课件汇总完整版电子教案(全)
评论
0/150
提交评论