您的当前位置:首页基于ARM的温度采集系统的设计-毕设答辩

基于ARM的温度采集系统的设计-毕设答辩

来源:锐游网


1. Nand Flash和Nor Flash区别:

CPU处理器 : Samsung S3C2440A,主频400MHz,最高533Mhz,SDRAM内存:在板64M SDRAM,32bit数据总线,SDRAM时钟频率高达100MHz,在板128M Nand Flash,掉电非易失,在板2M Nor Flash,掉电非易失,已经安装BIOS

Mini2440的启动时读取的第一条指令是在0x00上,分为成nand flash和nor flash上启动。

Nor flash的有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在nor flash上可以直接运行程序,所以nor flash可以直接用来做boot,采用nor flash启动的时候会把地址映射到0x00上。mini2440就是直接把vivi直接烧录在nor flash上。

Nand flash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像nor flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。

Mini2440把Bootloader烧到nand flash上启动,因为在mini2440里有一个内置的SRAM,叫做stepping stone(垫脚石,很形象…),系统启动加电后,会把nand flash上的起始4KB的内容拷贝到SRAM里执行,这样就实现了从nand flash启动。如果bootloader小于4KB的话(像vboot),在SRAM里就能boot,大于4KB的话(u-boot,vivi),在SRAM里做一些基本初始化后,再把bootloader的剩余部分拷贝到SDRAM里(>0x30000000)。

我们使用mini2440的时候,经常通过nor flash启动,进入vivi的菜单(mini2440的Nor flash已经烧录好了vivi),之后通过vivi的usb下载功能,把其他的bootloader

下在到nand flash里,下载完成后,再通过nand flash启动,测试我们的bootloader。NOR flash适合做代码存储并EIP的,NAND适合用来作大量数据存储的。

2. 嵌入式Linux系统的组成:

Linux内核和根文件系统组成了Linux系统。

3. 根文件系统的相关知识:

根文件系统是Linux启动时使用的第一个文件系统否则根文件系统无法正常启动,根文件系统由一列目录组成,目录中包括了应用程序,就像上一章节中本设计中的QT测温应用程序,同时目录中还包括C库以及相应的配置文件。Linux系统支持多种文件系统,为了对多种文件系统进行管理,Linux引入了VFS(虚拟文件系统)为各类文件系统提供了统一的应用编程接口。

根据存储设备的硬件特性和系统要求,不同的文件系统被应用于不同的场合。在嵌入式Linux系统中主要的储存设备是RAM和FLASH,常用的基于存储设备的文件系统类型包括:jffs2,,yaffs,ramdisk,ramfs等。

FLASH作为嵌入式系统主要存储媒介,主要NOR和NAND两种,FLASH存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序,因此必须针对FLASH设计符合要求的文件系统。

闪存设备日志型文件系统-JFFS(Journalling Flash File System)最初是由瑞典的 Axis Communication AB 开发,其目的是为了保护嵌入式系统免受宕(dang)机和断电危

害的文件系统。然而在NAND设备上大量使用的JFFS已经被JFFS2取代。

JFFS2 继承了JFFS的一些特性,并由Red Hat重新改写而成。JFFS2的全名为Journalling Flash File System Version 2(闪存日志型文件系统第2版),它的功能是管理在MTD设备上实现的日志型文件系统。与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。它只会直接在MTD设备上实现日志结构的文件系统。JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。

YAFFS(Yet Another Flash File System)是第一个专门为Nand Flash存储器设计的嵌入式文件系统,适用于大容量的存储设备。YAFFS 是基于日志的文件系统,提供磨损平衡和掉电恢复的健壮性。它还为大容量的Flash 芯片做了很好的调整,针对启动时间和RAM 的使用做了优化。它适用于大容量的存储设备,已经在Linux 和WinCE 商业产品中使用。

4. Bootloader的相关知识:

对于开发板mini2440有多种bootloader,例如 u-boot,supervivi,v-boot等等。他、、们之间的区别就是不同的bootloader可以引导不同内核。像supervivi能启zImage,u-boot能启动uImage,而zImage和uImage的不同之处就在于在编译时生成内核的文件头不同。本设计采用的是supervivi作为bootloader来引导Linux内核。

Supervivi和许多bootloader一样它的启动也包括两个部分:stage1和stage2。Stage1主要实现的是硬件的初始化同时为stage2准备内存空间,并将stage2复制到内存中并设置堆栈,然后跳转到stage2。.

Stage1包括以下步骤:

a.初始化硬件

b. 为bootloader的stage2准备RAM空间

c. 拷贝bootloader的stage2到RAM空间

d. 设置堆栈

e. 跳转到stage2的C入口点

Stage2:包括以下步骤:

a. 初始化本阶段要使用的设备

b. 将内核和根文件系统从Flash读到RAM中

c. 调用内核

5. Linux内核的相关知识:

Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、虚拟文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。

系统调用接口:SCI层为用户提供了一套标准的系统调用函数来访问Linux内核,搭

起了用户空间到内核空间的桥梁。

进程管理:主要是实现了进程的创建,进程的停止,并控制进程间的相互通信,进程管理还包括进程如何共享CPU,即进程的调度。

内存管理:主要是实现多个进程安全有序地共享内存。

网络协议栈:主要为Linux系统提供了丰富的网络协议。

虚拟文件系统:VFS隐藏了各种文件系统的细节,为文件操作提供统一的接口,如图5.3所示。

设备驱动:Linux内核中很多代码都在设备驱动中,它们控制特定的硬件设备。

6. 几个经典函数:

s3c2410_gpio_setpin(unsigned int pin, unsigned int to)

s3c2410_gpio_cfgpin(unsigned int pin, unsigned int function)

#define S3C2410_GPFCON S3C2410_GPIOREG(0x50)

#define S3C2410_GPFDAT S3C2410_GPIOREG(0x54)

#define S3C2410_GPFUP S3C2410_GPIOREG(0x58)

#define S3C2410_GPF0 S3C2410_GPIONO(S3C2410_GPIO_BANKF, 0)

#define S3C2410_GPF0_INP (0x00 << 0)

#define S3C2410_GPF0_OUTP (0x01 << 0)

#define S3C2410_GPF0_EINT0 (0x02 << 0)

#define S3C2400_GPF0_RXD0 (0x02 << 0)

7. Linux系统的相关知识:

User Applications用户空间GNU C LibrarySystem Call InterfaceKernel内核空间结构体系相关代码 内核空间和用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够实现从用户空间到内核空间的转移。

8. 交叉编译环境:

嵌入式系统的开发一般采用“宿主机-目标机”交叉开发方式[4]。首先,利用宿主上丰富的资源以及良好的开发环境来进行开发和仿真目标机上的软件,再通过H-JTAG口,UTAR口或者是以太网接口将生成的代码下载到目标机上进行运行。

9. DS18B20的时序:

复位脉冲:最短为 480us 的低电平信号,释放总线并进入接收状态等待 15-60us 接着 DS1820发出(低电平 持续 60-240 us)存在脉冲。

写时序:从高拉至低电平时 就产生写时间隙,开始 15us 之内应将所需写的位送到总线上,然后采样,低电平是“0”高电平是:“1”。

读时序:从高拉至低电平时 总线只须保持低电平17us之后再拉高就产生读时序。

DS18B20的命令:Write Scratchpad(写暂存存储器 [4EH]; Read Scratchpad(读暂存存储器) [BEH] ;Copy Scratchpad(复制暂存存储器) [48H] ;Convert Temperature(温度变换) [44H] ; Recall EPROM(重新调出) [B8H] ;Read Power supply(读电源) [B4H]

因篇幅问题不能全部显示,请点此查看更多更全内容

Top