文档库 最新最全的文档下载
当前位置:文档库 › 毕业论文提纲-基于ARM9的DCS控制器设计——BOOTLOADER设计

毕业论文提纲-基于ARM9的DCS控制器设计——BOOTLOADER设计

基于ARM9的DCS控制器设计——BOOTLOADER设计

目录

摘要 (2)

Abstract (3)

第1章绪论 (3)

1.1 分散控制系统结构 (3)

1.2 DCS研究现状 (3)

1.3 本课题目的与意义 (4)

1.4 本课题主要任务 (4)

第2章基于ARM9的嵌入式处理器及系统 (5)

2.1 LPC3250原理与结构 (5)

2.2 嵌入式处理器比较 (11)

2.3 BOOTLOADER介绍 (11)

2.4 WinCE6介绍…………………………………………… .16

第3章SD卡接口硬件设计 (20)

3.1 LPC3250处理器介绍 (20)

3.2 DCS控制器对SD卡需求 (24)

3.3 原理图设计 (21)

3.4 PCB设计 (26)

第4章Bootloader软件设计 (28)

4.1 BOOTLOADER功能及设计 (28)

4.2 LPC3250之BOOTLOADER结构 (28)

4.3 BOOTLOADER驱动程序设计 (34)

4.3.1 地址映射 (34)

4.3.2 程序设计 (34)

4.3.3 BOOTLOADER驱动程序流程 (35)

第5章SD卡软件设计 (40)

5.1 SD接口 (40)

5.2SD驱动程序设计 (41)

第6章实验 (40)

6.1 BOOTLOADER测试程序设计 (40)

6.2SD测试 (41)

6.3实验结论 (41)

第7章总结 (45)

致谢 (45)

参考文献 (45)

第2章基于ARM9的嵌入式处理器及系统

2.1 LPC3250原理与结构

2.2 嵌入式处理器比较

2.3 BOOTLOADER介绍

2.4 WinCE6介绍

WinCE是微内核操作系统,这是目前嵌入式操作系统都在使用的先进的内核技术,例如,VxWorks、QNX和最新的L4内核都实现了微内核技术。微内核是指在内核里面只实现一些基本服务,如进程调度、进程间通信和中断处理等,其他的服务和功能都放在内核外。显然,微内核的好处是易于移植到不同的处理器和硬件平台,内核外的服务如设备驱动和文件管理模块是运行在不同的地址空间,这样相较于整个系统都是平板结构的实时内核(如uc/os-II、nucleus、threadx)要更加安全和可靠。微内核的核心也非常小巧,一般几K~几十K字节。当然事物永远是辨正的两个方面,微内核系统因为要经常在内核态和用户态之间转换,所以系统的某些性能和实时响应能力可能要比平板结构的实时内核要低(不同的性能指标取决于不同的微内核系统的设计)。

同Windows一样,WinCE每个运行程序都是一个进程,WinCE 5.0 版本支持32个进程,每个进程有32M的虚拟地址空间,WinCE 6.0 则可以支持3.2万个进程,每个进程有2G的虚拟地址空间。WinCE 是一个基于抢占的多线程操作系统。在线程这一级,WinCE 可以实现类似操作系统">嵌入式操作系统任务的调度、通讯、同步功能。为了支持可以抢占的硬实时调度,WinCE 已经实现了优先级反转机制(priority inversion)。

6.0版本的WinCE内核相较以前的5.0有了很大的改进,重要的一点就是把一部分关键文件、图形管理和驱动程序放到内核里面,好处是减少了模块在用户态和内核态切换的开销,还减少了应用程序访问这些模块调用的开销。WinCE 6.0的内核结构见下图。

图2.X WinCE6.0内核结构

嵌入式操作系统是运行在不同的微处理器上,如手机和移动设备大量使用的ARM体系结构的CPU,市场上有三星ARM2410/2430、TI OMAP730/1710/2430和Marvel XScale体系的PXA270等,除此之外,还有数字电视、IP机顶盒系统使用的MIPS体系结构,如东芝、博通、IDT等公司的芯片。当然,x86在各种通用嵌入式系统方面也有大量的应用。

微软的嵌入式操作系统也是使用BSP(Board Support Package)的概念支持各种CPU和硬件平台的移植工作,在WinCE 5.0里已经有包括三星2410、Marvel PXA270等许多流行的BSP,微软的OEM 厂商如研华、飞思卡尔、NXP等也提供他们移植的OEM BSP。WinCE 6.0将会在CE5.0支持ARM V4基础上支持ARM V6,包括三星、飞思卡尔的ARM11核的SoC都将得到支持。在x86方面,微软依托在桌面系统的强势,得到了众多IPC(工业PC)和EPC(嵌入式PC)厂家的拥戴和支持。

在BSP结构方面,新的WinCE6.0的内核和OAL是完全独立的两个模块,好处是在修改BSP 后,内核不需要重新构建了,减少了多次构建、测试和发布内核的过程,提高了系统的可靠性。这种结构还可以让微软发布针对OEM的内核,而OEM可以因为自身知识产权的考虑,以二进制方式向最终用户发布BSP。WinCE自身包含OEM BSP 定制和发布工具,这样OEM可以很方便地发行自己的BSP SDK包。

设备驱动程序是嵌入式操作系统中一个重要部分,它是外设和应用软件的接口。

WinCE的设备驱动程序规范和丰富,需要特别指出的是,WinCE 5.0所有的驱动程序全部是采用动态加载方式,即在操作系统内核启动以后对硬件外设(如USB、LCD) 加载,驱动程序依然运行在内核空间。简单来讲,这种驱动程序是在用户态和我们熟悉的Windows 系统的DLL方式没有区别,其好处是程序员调试一个驱动的时候会很方便,和应用程序的调试没有差异,可以使用正常的函数调用,把驱动的动作和数据显示在屏幕上;再有,相对用户自己开发的驱动程序,可能有不稳定和可靠的地方,运行在用户态,整个系统将会更稳定些。

但是问题和缺陷也显而易见,就是因为驱动的动态加载和内核的切换代表性能的损失,对于桌面系统这可能没有太大的影响,但是在嵌入式系统,用户对实时性能的要求要严格得多。为了解决这个问题,在新的WinCE6.0里面的驱动程序将分为内核模式和用户模式两种,内核模式侧重效率,用户模式侧重稳健和可靠。微软力求保证驱动程序的主体结构没有大的变化,微软资料显示大约有几天的时间可以完成一个一般规模的驱动的移植过程,微软公司和微软的增值代理都提供了相应的课程。

嵌入式系统毕竟不是桌面系统,用户需求的差异和环境差异很大,平台的变化也多,用户的选择余地就大。为了方便用户比较和选择一个合适的嵌入式操作系统,微软官方网站上提供了第三方的评测报告供用户阅读和分析;国内外基于微软的嵌入式成熟应用也可以供参考;微软中国的市场和教育普及工作也对用户了解微软嵌入式操作系统大有帮助。下面仅对目前国内嵌入式系统比较流行的嵌入Linux 和VxWorks 进行分析,比较他们和微软嵌入式操作系统的差异和各自特色。

比较微软和其他的嵌入式操作系统,Linux和嵌入式Linux(经过嵌入式优化的Linux商业和非商业版本)的优势在于:1,开放性,Linux100%源代码公开;2,广泛性和成功的开发模式,全球化的社区开发和维护方式已经被验证是一种高效率和成功的软件开发模式;3,各种CPU和最新的硬件器件和系统的支持;4,丰富的开源资源和第三方应用软件。

Linux的缺点是:

第一,实时性。Linux本身并不是为嵌入式系统而设计的,从操作系统系统结构设计偏重于可靠性和网络的效率,虽然商业嵌入式Linux公司如MontaVista 在2.4内核上实现了可抢占的实时调度,开源社区也有了2.6 R T补丁,但是比较WinCE 和VxWorks 实时性都略逊一筹,来自南京大学的文章中有一个可以参考数据表格,可以查看相关文献。

第二,开发工具。Linux的开发工具一直是一个软肋,从开源社区分工讲。内核和工具链是两个完全独立的部分,内核的开发和维护人员主要依赖于命令行工具。可喜的是,开源的Eclipse框架已经成为包括嵌入式Linux 在内的传统嵌入式操作系统的集成开发环境(IDE),基于Eclipse的商业嵌入式软件如DevRocket、Workbench和Linuxscope也正在成熟。但是相对微软的V isual Studio 2005,应该说中国的用户更加熟悉微软的开发工具。

第三,完整应用软件方案,嵌入式系统要求的是有针对性的应用软件方案,嵌入式Linux虽然已经有完整的操作系统组件,但是缺少针对具体应用的软件方案,举个智能手机的例子,微软的

Windows Mobile for SmartPhone基本含有了手机硬件驱动(BSP)、内核、TCP/IP、文件系统基本组件、手机软件和多媒体办公软件等丰富的应用软件,这些基本涵盖了整个智能手机所需要的全部软件。但是相比较而言,嵌入式Linux的方案就显得单薄多,虽然借助于包括Trolltech(奇趣) 的qtopia在内的手机应用软件或者Access 的整套手机Linux软件方案,Linux手机软件仍缺少完整性和成熟性,这点对于包括中国手机企业在内的2~3线的手机制造和设计公司带来一定的压力。

第四,商业化产品和服务。比较微软,Linux和嵌入式Linux的商业公司规模小而且没有标准化,虽然社区具有丰富的开发和创意的资源,但是社区没有义务提供商业的服务和承诺。

VxWorks是传统嵌入式操作系统中的佼佼者,特别是在通信、国防和工业控制领域具有较强的优势。VxWorks是基于微内核技术的实时内核,从设计和实际的使用情况看,完全可以满足硬实时性的要求,这点较Linux有较强的优势。相较于WinCE,VxWorks的实时性要更好一点,设备管理和驱动要简练和高效些。VxWorks6.1的版本之后还提供基于MMU内存保护和错误管理的机制(目前CE和.NET MicroFramework 还不支持),使系统的可靠性更有保证。VxWorks系统的配置灵活,代码尺寸相较于WinCE和Linux要小得多,基本系统甚至比.NET Micro Framework还要小,这样适合更低配置和成本要求的嵌入式设备。

VxWorks的网络功能强大,风河公司和第三方都有大量的网络协议和应用软件支撑,VxWorks 的API 是POSIX 兼容,这样通信行业的标准代码就很容易移植进来了(Linux 有相同的特点),这可以说是WinCE的一个弱点。

但是,VxWorks 在消费电子和手持移动设备方面应用比较微软操作系统甚至Linux都相对少得多,从技术和商业层面看,笔者认为主要是这样几个原因:1,VxWorks是从内核发展成为一个比较完整的嵌入式OS,但是API和图形系统并不是十分标准和流行,单靠VxWorks自己的产品和松散的第三方资源还很难形成完整和公认的消费电子中间件。2,VxWorks早期是采用开发授权加上版税的方式收取费用,这种方式不能为强调成本控制的OEM/ODM(委托制造/委托设计)厂商所接受,比如在过去的5年里,中国台湾OEM/ODM生产的家用无线网络产品多数都转到Linux平台,手机和GPS转到上市比较快的WinCE和Window Mobile平台。OEM/ODM不能接受为售价只有15~25美元的无线路由器再支付哪怕是1美元(甚至更少)的版税了。

当然,风河公司已经充分意识到这个问题,并在过去几年改变了商业模式,比如以收取年费的方式取代版税模式,同时风河正式采用双OS的策略,进军嵌入式Linux 市场,推出风河通信和消费电子用Linux 平台,以期和微软抗衡,这是因为它的实质也是一个基于开源的嵌入式Linux版本。

第3章SD卡接口硬件设计

3.1 LPC3250处理器介绍 (20)

3.2 DCS控制器对SD卡需求 (24)

3.3 原理图设计 (21)

3.4 PCB设计 (26)

第4章Bootloader软件设计

4.1 BOOTLOADER功能及设计

EBOOT的核心功能就是引导操作系统映像。

为一个新的硬件设备定制WinCE6、0操作系统的主要步骤如下:

1、针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动。

2、利用创建的BSP,定制一个系统设计(OS Design)。即通过VS2005创建一个Platform Builder的工程。该工程可编译产生最终的运行时映像文件(Rum-time Image)。

3、针对板上的外围设备创建相关驱动,并添加到BSP中。

4、通过创建子工程和Catalog Items的方式,修改OS Design。

5、编译OS Design,下载编译得到的运行时映像文件到目标设备。此时,可通过远程调试工具进行调试。

6、在完成所有的调试工作之后,导出该运行时映像对应的SDK(Software Development Kit),应用程序的开发人员可基于此SDK编写该设备的应用程序。

可以看出,在整个WinCE操作系统的移植过程中,BSP的移植是最基础也是最关键的一步。而创建BSP的过程主要包括以下几个内容:

1、创建BOOTLOADER。BOOTLOADER在开发的过程中用于下载操作系统映像文件。

2、创建OAL。OAL最终被链接到内核映像文件,它主要完成硬件的初始化和管理。

3、创建设备驱动。设备驱动是板上外围设备的软件支持。

4、修改运行时映像的配置文件。配置文件主要包括BIB、REG等文件。

BOOTLOADER的主要作用是将操作系统运行时映像加载到内存,并跳转到OS的启动程序处。它的这一作用跟前一篇介绍的NBOOT的作用完全一致。BOOTLOADER获取运行时映像(一般对应的文件名为NK)一般有两种方法。它可以通过有线连接的方式象网络(Ethernet)、USB或串口从外部下载NK。它也可以从本地的存储器(Flash、Hard Disk)中加载NK。通常,BOOTLOADER通过Ethernet下载操作系统映像故将其称为EBOOT。在开发的过程中使用EBOOT,可以提高开发效率。通过使用EBOOT,你可以很快速的下载NK到目标设备中。而利用Flash编程工具或者是通过JTAG 下载则很慢。在一些产品最终发布时,EBOOT是可以去掉的,但也有一些则必须包括BOOTLOADER,像X86的平台就是如此。

基于不同的硬件设计,Bootloader会有不同的引导方式,分别介绍如下:

NORFlash Boot:

一般ARM处理器的片选0都会接有NORFlash,这样在ARM上电以后,会从0地址开始执行程序,也就是从NORFlash的0地址开始执行。所以把EBOOT烧到NORFlash的0地址开始的地方,这样在上电以后,EBOOT开始执行,可以在NORFlash里面执行,也可以自拷贝到SDRAM中执行。最后加载WinCE image并运行。

NANDFlash Boot with EBOOT:

由于NORFlash容量小,价格贵,现在很多ARM处理器支持NandFlash引导。不同厂家的处理器对Nandflash的引导略有区别,具体要看datasheet。但是本质就是先从Nandflash中读出一个小的Loader来运行,这个Loader再从Nandflash中加载EBOOT到SDRAM中运行,最后EBOOT加载WinCE image,就是NK.bin。

NANDFlash Boot without EBOOT:

如果在NandFlash引导的时候不需要EBOOT,也可以不用EBOOT。这样就是系统启动后从Nandflash中加载一个小的Loader,小的Loader对硬件系统作基本的初始化,然后直接加载WinCE image,一般应该是NK.nb0,然后运行。

以上是EBOOT的主要功能,为了实现这些功能,EBOOT必须完成以下工作:

1、初始化MCU。包括初始化MCU的相关寄存器、中断、看门狗、系统时钟、内存和MMU。前面几项跟NBOOT基本一致,但这里增加了对MMU的初始化。

2、在完成所有的初始化工作之后,调用BootloaderMain()。这个函数的定义在WinCE6、0中对应的文件是C:"WINCE600"PLA TFORM"COMMON"SRC"COMMON"BOOT"BLCOMMON"blcommon、c

3、BootloaderMain()主要依次调用以下几个函数,OEMDebugInit()、OEMPlatformInit()、OEMPreDownload()、OEMLaunch(),而这些函数必须由EBOOT的代码来实现。

4、最终跳转到OAL、exe的StartUp处,进而启动WinCE操作系统。

整个流程如下图所示:

图4.X EBOOT流程图

EBOOT的代码可参考C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\BOOTLOADER \EBOOT目录。比如S3C2410的EBOOT。NBOOT加载EBOOT时,必须将EBOOT放在内存中指定的位置,这个位置是由EBOOT的来决定的。具体的,在EBOOT中的体现是eboot.bib里的内存配置,如下图所示。

NBOOT加载EBOOT到内存的地址必须与此地址对应。由于在NBOOT中没有使用MMU,所以NBOOT 使用的实际地址应该为0x30021000,否则系统将不能正常启动。第二点,如果没有采用NBOOT加载EBOOT的方法,而是将EBOOT直接存储在NOR Flash中,此时必须在EBOOT的代码中实现自加载的过程,即将NOR Flash中的EBOOT全部加载到RAM中,并执行,实现代码如下:

;---------------------------------------------------------------

; Copy boot loader to memory

ands r9, pc, #0xFF000000 ; see if we are in flash or in ram

bne %f20 ; go ahead if we are already in ram

; This is the loop that perform copying、

ldr r0, = 0x21000 ; offset into the RAM

add r0, r0, #PHYBASE ; add physical base

mov r1, r0 ; (r1) copy destination

ldr r2, =0x0 ; (r2) flash started at physical address 0 ldr r3, =0x10000 ; counter (0x40000/4)

10 ldr r4, [r2], #4

str r4, [r1], #4

subs r3, r3, #1

bne %b10

; Restart from the RAM position after copying、

mov pc, r0

nop

nop

nop

EBOOT在实现必备功能的前提下,我们还可以扩展其功能,譬如说初始化LCD,并显示特定的启动画面,显示加载映像的进度等。

本将节粗略的介绍了WinCE6、0下EBOOT的内容,但没有涉及具体的代码实现。总之,EBOOT 的核心功能就是引导操作系统映像。

4.2 LPC3250之BOOTLOADER结构

LPC3250支持几种boot,boot进程可以拷贝到内部SRAM并执行位于如下外部源的外部程序:?UART boot用UART5或者UART收发器;

?NANDFLAHS;

?SPI boot用SSP0;

?外部静态存储器。

LPC3250有个内置16K的ROM包含了一个程序,该程序可以运行启动程序,把4个外部源上的代码加载到内部RAM。

系统重启之后,总是从内部ROM开始执行,在ROM中的程序叫做bootstrap,流程图如下图所示:

图X.X Bootloader top level flow chart

Bootstrap软件通过读SERVICE_N(GPI_01)输入引脚开始。如果是低电平,则开始service boot;如果是高电平,则转到normal boot。

由于本项目主要采用NANDFLASH启动,因此主要介绍NANDFLASH启动过程。

NANDFLASH启动是属于normal boot的一种方法。当从NANDFLASH启动,启动代码要找到拷贝到NAND的代码页数和NAND类型。

Bootloader首先通过读NAND的ID来识别其类型,如果找到了NAND设备,则将会把数据从NAND转换加载到内部RAM。如果发现设备失败,则继续查询内存。从NAND提供的有效ICR (Interface Configuration Data)来配置数据。

启动代码用NAND控制器16位模式读出NAND的第一页,因此其word0,word2….才是包含了bootloader所需要的代码。

一旦读取到了ICR,启动代码设置NAND控制器为合适的模式,并拷贝所需要的代码量到内部

RAM,要注意,启动代码不能够跳过坏块。因此,需要用第二启动代码实现能够跳过坏块的功能。NAND的0块出厂总是有效。NAND的块大小有两种,小页模式(Small page)和大页模式(Large page),其对应的块大小分别为16K和128K,因此第二启动代码分别不能够超过15.5K和54K。下图是ICR的格式。

图4.X Interface Configuration Data

启动代码需要对其中的位进行读写操作,以便能够更好地执行启动过程。

LPC3250所开发的DCS控制器的BIOS主要功能有文件下载(SD CARD和串口)、FLASH烧写(NANDFlash)、启动存储在FLASH 中的程序、设置启动参数,设置Wince的自启动。

LPC3250所开发的DCS控制器所带的Bootloder 由两部份组成,分别是kickstart loader 与stage 1 application loader。stage 1 application loader 主要功能如下:

·Register and memory change and dump

- Poke, peek, dump, fill

?Image load via a serial port , SDMMC card, or FLASH

- Supports raw binary and S-record files

- Images can be executed after loading

- Images can be saved in FLASH

?NAND FLASH support

- Erase of NAND blocks

- Direct read and write of FLASH blocks and pages

- Bad block management

- Reserved block management for operating systems

?MMU functions

- Data and instruction cache control

- V irtual address translation enable/disable

- V irtual address remapping

- Page table dump

?System support functions

- Baud rate control, clock control, system information

?Automatic load and run support

- Automatic load and execution of images from FLASH, SDMMC, or via the terminal

4.3 BOOTLOADER驱动程序设计

4.3.1 地址映射

NBOOT加载EBOOT时,必须将EBOOT放在内存中指定的位置,这个位置是由EBOOT的来决定的。在LPC3250中,指定如下:

MEMORY

; Name Start Size Type

; ------- -------- -------- ----

EBOOT 83FC0000 00040000 RAMIMAGE

VECTORSC 00000000 00000800 RESERVED

ARGS 00000800 00000800 RESERVED

RAMC 00001000 00023000 RAM

ETHDMAC 00024000 00010000 RESERVED

STACKC 00034000 00008000 RESERVED

MMUTABC 0003C000 00004000 RESERVED

IRAMUNC 08000000 00040000 RESERVED

4.3.2 程序设计 (34)

4.3.3 BOOTLOADER驱动程序流程 (35)

第5章SD卡软件设计 (40)

5.1 SD接口 (40)

5.2SD驱动程序设计 (41)

第6章实验 (40)

6.1 BOOTLOADER测试程序设计 (40)

6.2SD测试 (41)

6.3实验结论 (41)

参考文献:

[1] https://www.wendangku.net/doc/8c18976479.html,/qrs/2007/1111/article_1171_8.html

[2] LPC3250 user Manul.

[3] 何宗键. WinCE 嵌入式系统. 北京航空航天大学出版社. 2008.

[4] 李庆诚, 唐德凯. 嵌入式操作系统实时性对比与评价. 单片机和嵌入式系统杂志. 2007.6.

[5] Dedicated System, RTOS state of art. https://www.wendangku.net/doc/8c18976479.html,

[6] MEDC2007. 移动和嵌入式开发者大会会议手册.

[7] 杜伟. 微软嵌入式技术发展趋势. 2007年北京高校嵌入式教学会议.

[8] 何小庆, 比尔·温博戈. 移动电话挑战嵌入式linux. 电子产品世界. 2006.9.

[9] https://www.wendangku.net/doc/8c18976479.html,

相关文档
相关文档 最新文档