原创基于linux的EEPROM的读写控制毕业论文设计.docx
- 文档编号:11283601
- 上传时间:2023-02-26
- 格式:DOCX
- 页数:30
- 大小:155.98KB
原创基于linux的EEPROM的读写控制毕业论文设计.docx
《原创基于linux的EEPROM的读写控制毕业论文设计.docx》由会员分享,可在线阅读,更多相关《原创基于linux的EEPROM的读写控制毕业论文设计.docx(30页珍藏版)》请在冰豆网上搜索。
原创基于linux的EEPROM的读写控制毕业论文设计
毕业设计[论文]
题目:
基于linux的EEPROM的读写控制
毕业论文(设计)原创性声明
本人所呈交的毕业论文(设计)是我在导师的指导下进行的研究工作及取得的研究成果。
据我所知,除文中已经注明引用的内容外,本论文(设计)不包含其他个人已经发表或撰写过的研究成果。
对本论文(设计)的研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示谢意。
作者签名:
日期:
毕业论文(设计)授权使用说明
本论文(设计)作者完全了解**学院有关保留、使用毕业论文(设计)的规定,学校有权保留论文(设计)并向相关部门送交论文(设计)的电子版和纸质版。
有权将论文(设计)用于非赢利目的的少量复制并允许论文(设计)进入学校图书馆被查阅。
学校可以公布论文(设计)的全部或部分内容。
保密的论文(设计)在解密后适用本规定。
作者签名:
指导教师签名:
日期:
日期:
注意事项
1.设计(论文)的内容包括:
1)封面(按教务处制定的标准封面格式制作)
2)原创性声明
3)中文摘要(300字左右)、关键词
4)外文摘要、关键词
5)目次页(附件不统一编入)
6)论文主体部分:
引言(或绪论)、正文、结论
7)参考文献
8)致谢
9)附录(对论文支持必要时)
2.论文字数要求:
理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:
任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:
1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写
2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画
3)毕业论文须用A4单面打印,论文50页以上的双面打印
4)图表应绘制于无格子的页面上
5)软件工程类课题应有程序清单,并提供电子文档
5.装订顺序
1)设计(论文)
2)附件:
按照任务书、开题报告、外文译文、译文原文(复印件)次序装订
3)其它
目录
摘要II
AbstractIII
1绪论1
1.1开发背景1
1.2EEPROM的开发意义1
2LINUX技术简介3
2.1开发工具简介3
2.2编译工具简介5
2.3bootloader简介6
3操作系统的移植8
3.1LINUX内核的移植8
3.2LINUX内核的目录结构9
3.3LINUX源代码的安装10
4EEPROM的概要设计13
4.1IIC总线的读写控制逻辑13
4.2设计操作过程16
4.3设计参考程序17
4.4实验结果分析20
结束语21
参考文献22
致谢23
基于linux的EEPROM的读写控制
摘要
本文着眼于在linux开发环境下实现EEPROM的读写控制访问方法.Linux操作系统作为新兴的操作系统,具有内核强大、开源、易扩展和裁减以及丰富的硬件支持等诸多优点,其嵌入式应用具有实时处理能力,广泛应用于智能设备、智能仪器仪表、信息电器领域。
随着计算技术向微型化、网络化方向的发展,嵌入式软件极大地提高了传统工业控制、医疗、办公乃至家用消费类电子产品的附加值和易用性,市场应用前景极为广阔。
项目必要性软件在信息系统中起着核心和灵魂的作用。
本设计在EduKit2410实验平台上,通过编写程序在EEPROM器件AT24C04进行读写访问,掌握EEPROM器件在LINUX下的读写访问方法,然后把实验数据写入整个EEPROM的存储空间,接着读出来而进行比较[8]。
通过检测EEPROM器件AT24C04和处理器I2C总线接口及驱动程序的工作是否正常,比较写入数据与读出数据的结果。
关键词:
EEPROMI2C总线读写控制
BasedonLinuxRead-WritecontrolofEERROM
Abstract
ThisarticlefocusesonrealizingreadwritescontrolaccessmethodofEEPROMunderthelinuxdevelopmentenvironment.TheLinuxoperatingsystemasaemermingoperatingsystem,-source,easytoexpandandthereductionandtherich,itsembeddedapplicationtheintelligentequipment,thesmartinstrumentmeasuringappliance,theinformationelectricappliancedomain.Alongwiththecomputationtechnologytothemicrominiaturization,thenetworkdirectiondeveloping,theembeddedsoftwareenhancedthetraditionindustrialcontrol,medical,theworkandeventheprospectisextremelybroad.Theprojectnecessarysoftwareisplayingthecoreandthesoulroleintheinformationsystem.
ThisdesignisinEduKit2410experimentplatform,carriesontheread-writevisitthroughthewriteprograminAT24C04ofEEPROMcomponentAT24C04,graspstheaccessmethodundertheLinuxofwrite-readinEEPROMcomponent,thenreadandcompareit.ThroughexamineingAT24C04ofEEPROMcomponentandtheprocessorI2Cbusinterface,thenexaminingifthedriverworkisnormal,comparingtheresultofwritedataandreaddate.
Keywords:
EEPROMI2CBusRead-Writecontrol
1绪论
1.1开发背景
linux是当前最流行的操作系统之一。
它具有高效、健壮、安全以及功能齐全等特性,因而赢得了人们的青睐。
它是一个完全免费的UNIX操作系统,来自世界各地的志愿者为这个充满魅力的操作系统的发展贡献着自己的才能。
可以说,LINUX的发展凝聚了世界各地无数开发人员的大量心血,体现了一种信息世界的共建、共享和共荣的精神[1]。
Linux操作系统作为新兴的操作系统,其嵌入式应用具有实时处理能力,可广泛应用于智能设备、智能仪器仪表、信息电器领域。
随着计算技术向微型化、网络化方向的发展,嵌入式软件极大地提高了传统工业控制、医疗、办公乃至家用消费类电子产品的附加值和易用性,市场应用前景极为广阔。
项目必要性软件在信息系统中起着核心和灵魂的作用。
与其他嵌入式操作系统相比,Linux的源代码是开放的,不存在黑箱技术。
Linux作为一种可裁剪的软件平台系统,是发展未来嵌入式设备的绝佳资源。
在保持Linux内核系统更小、更稳定、更具价格竞争力等优势的同时,对系统内核进行实时性优化,使之适应于对工业控制领域高实时性的要求。
这是嵌入式linux操作系统更适合在嵌入式工控系统中应用[2]。
Linux是免费的操作系统。
Linux的创始人LinusTorvalds将Linux适时地放到GNU公共许可证下,使得Linux本身在短短的几年发展成为一个稳定,健壮的OS,也使得人们不用花钱就可以使用。
使得操作系统真正走上平民化。
Linux的源代码是开放的,源代码随处可得,即使最困难的问题也有办法解决,不存在黑箱技术。
遇到问题时可通过网络,得到丰富的技术支持。
可以看出,Linux用于嵌入式系统方面是可行的,具有广泛的应用前景[3]。
1.2EEPROM的开发意义
EEPROM是一种具有掉电记忆功能的存贮器,其内容可以象普通RAM一样进行改写,而且改写时能够自动擦除并换成新内容。
它不象EPROM那样需要紫外线擦除;而只需用电即可擦除并改写存贮在其内部的内容。
EEPROM通常在内部带有编程电源。
由于它只需外接单一+5V电源,因此使用起来十分方便。
和串行芯片相比,并行EEPROM的电路接口和编程设计均简单得多,所以在对电路板面积要求不很苛刻的情况下,使用EEPROM存贮器还是十分的方便。
电可擦除可编程EEPROM在应用系统中既可由软件对其内容进行随机读写,又可在芯片断电的情况下长期保存片内信息,因此兼备了RAM和ROM的基本特点。
EEPROM有串行和并行两大类。
并行EEPROM存储容量较大,读写方法简单,但价格较高,适用于信息量较多的场合。
串行EEPROM结构简单紧凑,价格低廉,但其读写方法复杂,存储单元较小,一般用于掉电情况下需要保存或一些数据需要在线修改的场合,这类数据不多却很重要,若使用常规的RAM芯片,就必须附带一套性能可靠的掉电保护系统,这不仅增加了线路设计的复杂性,同时也给设备的运行和维护带来了诸多不便。
使用串行EEPROM来存储这类数据是最合适不过的[4]。
尤其随着当今智能化仪表趋于小型化,再加上真正需要保存的以及预设的数据位、控制位、保密位并不占据太多的存储空间,串行EEPROM的体积小,功耗低,硬件接口非常简单,因而越来越受到人们的重视,在智能化仪器仪表、控制装置等领域得到广泛的应用。
2LINUX技术简介
2.1开发工具简介
开发嵌入式linux系统最方便的方法还是够建一个标准的linux开发环境。
这将会大大简化linux开发的编译,调试等工作。
EduKit2410系统的linux开发就可以在标准linux环境下进行。
一.Cygwin安装:
1)运行Cygwin安装程序setup.exe,然后选择“InstallfromLocalDirectory“,选择“下一步”,如图2-1所示。
图2-1Cygwin安装1
2)选择Cygwin的安装目录,注意Cygwin的安装目录必须位于硬盘NTFS分区,否则会影响文件属性和权限操作,导致错误的结果。
选择Unix文本文件类型。
选择“下一步”,如图2-2所示。
图2-2Cygwin安装2
3)选择Cygwin安装程序包所在的本地目录。
选择“下一步”,如图2-3所示。
图2-3Cygwin安装3
4)选择安装项目。
(如图2-4)点击在安装项目左边的“default”,可以调整该项目的安装设置,可选择全部安装。
开发Linux必须选择全部安装以下项目:
Admin——包括启动服务cygrunsrv等工具,NFS启动必备;
Archive——压缩解压工具集;
Base——基本的Linux工具集;
Devel——开发工具集,包括gcc、make等开发工具;
Libs——函数库;
Net——网络工具集;
Shells——常用Shell工具集;
Utils——包括bzip2等实用工具集;
图2-4Cygwin软件包的选择
软件包安装完成后,根据提示信息进行余下的操作,此后可以运行Cygwin。
注意:
由于cygwin是Windows环境下虚拟的Linux开发环境,一般在ALL处设置为Install状态,即全
部安装。
所以要建立一个完整的Linux开发调试环境,加上存放编译工具和例程的空间,至少需要一个容量在2GB以上的分区。
二、环境准备
1、拷贝以下文件到Cygwin安装后的Cygwintmp目录下:
2、运行Cygwin开发环境,执行以下命令(注意空格及大小写):
$>cd
$>ls
(...)<-应该能看到目录列表
$>sourcetmpset_env_linux.sh
三.把以下文件夹下所有文件拷贝到Cygwintmpedukit-2410目录下:
CrossToolsforCygwin-交叉编译工具及函数库
Filesystem-文件系统源码
Kernel-Linux内核源码
Bootloader-启动代码源码
2.2编译工具简介
1)安装交叉编译工具
$>cd
$>tar-P-xvjf$SOURCEDIRcross-armtools-linux-edukit2410.tar.bz2
$>sourcetmparmtools-linuxcross-install.sh
2)安装内核
注:
如果关闭过Cygwin请先执行:
sourcetmpset_env_linux.sh
$>cd$WORKDIR
$>tar-xvjf$SOURCEDIRlinux-2.4.18-rmk7-pxa1-mz5.edukit2410.tar.bz2
$>cdkernel
3)编译配置
注:
如果关闭过Cygwin请先执行:
sourcetmpset_env_linux.sh
$>cd$WORKDIR
$>makexconfig
<选LoadConfigureFile...输入archarmdef-configsedukit2410-nand
$>makedep
$>makezImage
命令含义如下:
makexconfig在图形截界面下对内核进行配置;
makedep:
搜索linux编译输出与源代码之间的依赖关系,并生成以来文件;
makezImage:
编译linux内核,生成压缩的内核映像文件。
2.3bootloader简介
系统引导程序通常称为BootLoader,是在系统复位后执行的第一段代码,相当于PC上的BIOS以及商业实时操作系统中的板级支持包BSP,BootLoader首先完成系统硬件的初始化,包括时钟的设置、存储区的映射等,设置堆栈指针,然后跳转到操作系统内核的入口,将系统控制权交给操作系统,在此之后系统的运行和BootLoader再无任何关系。
BootLoader独立于操作系统,必须由用户自己设计,uClinux的发行包中不包含BootLoader,但用户可以直接使用或参考一些开源的BootLoader软件工程[11]。
BootLoader的实现高度依赖于硬件,包括处理器的体系结构、具体型号、硬件电路板的设计。
BootLoader、内核映像和文件系统映像在系统中的存储的典型空间分配结构图如图2-5所示。
图2-5典型空间分配结构图:
linux提供生成压缩方式的内核映像,节省Flash的存储空间,这也是实际设计过程中最经常使用的方式。
linux将编译好的内核压缩后和linux附带的引导解压文件连接,生成最终的映像文件。
引导解压文件位于linux-2.4.xarcharmnommubootcompressed目录,映像文件的入口是汇编文件head.s,映像文件的起始地址在连接文件linux.lds中设置,这个地址也就是BootLoader最后跳转的地址。
在基于三星处理器S3C4510评估板SNDS100的uClinux中,Place)方式的内核映像文件。
此时内核映像文件的入口是汇编文件head-armv.s,该文件位于linux-2.4.xarcharmnommukernel目录,映像文件的起始地址在连接文件linux-2.4.xarcharmnommuvmlinux.lds中设置。
开发人员在调试过程中也经常使用未经压缩的在Ram本地执行XIP方式的内核映像文件,与在Flash本地执行的映像文件的区别是它不需要将数据段从Flash拷贝到Ram中的过程[15]。
这种方式下,需要BootLoader具有通过网口或串口下载内核映像文件并启动内核的功能。
最简功能设计设计一个最简单的BootLoader,只需要依次完成以下功能:
(1)禁止所有的中断;
(2)设置处理器时钟、运行速度;
(3)存储区初始化;
(4)设置堆栈指针将bss段清零;
(5)跳转到内核映像的入口。
在跳转到内核映像的入口前,以下条件必须满足:
寄存器r0——必须设置为0;
寄存器r1——必须设置为唯一的处理器结构号,文件linuxarcharmtoolsmach-types中包含所有结构号的列表;
存储区管理单元MMU——必须关闭;
指令缓存I-cache——打开或者关闭;
数据缓存D-cache——关闭。
完备功能设计。
设计一个完备的BootLoader,可在最简功能基础上考虑是否增加以下功能:
(1)上电自检;
(2)支持串口通讯方式,提供串口方式的命令控制台;
(3)支持以太网通讯方式,提供以太网通讯方式的命令控制台;
(4)可以通过串口或以太网下载并引导内核和文件系统映像文件;
(5)支持通过串口或以太网通讯烧写映像文件到Flash;
(6)能够读写IO端口、存储区、寄存器;
(7)配置功能,包括设置IP地址、MAC地址、系统时间等。
3操作系统的移植
3.1LINUX内核的移植
3.1.1内核移植过程:
1)下载linux内核
下载linux内核至homearmdev_:
usrkerberosbin:
usrlocalbin:
usrbin:
bin:
usrX11R6bin:
:
$PATH再重新登陆。
[arm@localhostlinux-2.6.14]#suarm
3)设置flash分区
指明分区信息,指定启动时初始化,禁止FlashECC校验。
4)配置内核
配置内核产生.config文件,编译内核,下载zImage到开发板。
3.1.2创建uImage
1)获取mkimage工具
2.6内核树的Makefile提供了创建uImage的方法,但需要我们提供相应的mkimage命令。
所以首先拷贝u-boot中tools目录下编译后生成的mkimage到usrbin下,然后便可以在内核根目录下通过makeuImage来创建uImage文件。
该文件生成在archarmboot下。
2)修改内核的Makefile文件
[arm@localhostlinux-2.6.14.1]$viarcharmbootMakefile
#MKIMAGE变量记录mkimage命令的路径mkuboot.sh脚本文件可以scripts目录中找到
MKIMAGE:
=$(srctree)scriptsmkuboot.sh
#zreladdr-y与params_phys-y可以在archarmmach-s3c2410Makefile.boot当中找到
ZRELADDR:
=$(zreladdr-y)
PARAMS_PHYS:
=$(params_phys-y)
INITRD_PHYS:
=$(initrd_phys-y)
生成uImage的mkImage命令行,其中需要关注的就是-a与-e参数。
参数-a:
指明uImage加载的SDRAM地址,内核默认指定加载地址为0x30008000。
u-boot引导时,bootm命令跳到与上相同位置执行,检查完镜像头后,它会跳到内核真正的入口点开始执行。
参数-e:
指明uImage中刨去镜像头后真正的内核入口地址。
镜像头为0x40长,故此处指定为0x30008040。
3.2LINUX内核的目录结构
现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。
Linux核心源程序通常都安装在usrsrclinux下,而且它有一个非常简单的编号约定:
任何偶数的核心都是一个稳定地发行的核心,而任何奇数的核心都是一个开发中的核心[13]。
Linux内核源码的各个目录大致与此相对应,其组成如下(假设相对于usrsrcLinux-2.4.23目录):
arch目录包括了所有和体系结构相关的核心代码。
它下面的每一个子目录都代表一种Linux支持的体系结构,例如i386就是Intel CPU及与之相兼容体系结构的子目录。
PC机一般都基于此目录。
COPYING目录下是GPL版权申明。
对具有GPL版权的源代码改动而形成的程序,或使用GPL工具产生的程序,具有使用GPL发表的义务,如公开源代码。
CREDITS目录下是光荣榜。
对Linux做出过很大贡献的一些人的信息。
documentation目录下是一些文档,没有内核代码,可惜都是English的,是对每个目录作用的具体说明。
drivers目录中是系统中所有的设备驱动程序。
它又进一步划分成几类设备驱动,每一种有对应的子目录,如声卡的驱动对应于driverssound; block 下为块设备驱动程序,比如ide(ide.c)。
如果你希望查看所有可能包含文件系统的设备是如何初始化的,你可以看driversblockgenhd.cdevice_setup()。
它不仅初始化硬盘,也初始化,因为安装nfs文件系统的时候需要网络其他:
如, Lib放置核心的库代码; Net,核心与网络相关的代码; Ipc,这个目录包含核心的进程间通讯的代码; Fs,所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,例如fat和ext2。
fs目录存放Linux支持的文件系统代码和各种类型的文件操作代码。
每一个子目录支持一个文件系统,如ext3文件系统对应的就是ext3子目录。
include目录包括编译核心所需要的大部分头文件,例如与平台无关的头文件在includelinux子目录下,与 intel cpu相关的头文件在includeasm-i386子目录下,而includescsi目录则是有关scsi设备的头文件目录[10]。
init目录包含核心的初始化代码(不是系统的引导代码),有main.c和Version.c两个文件。
这是研究核心如何工作的好起点。
ipc目录包含了核心进程间的通信代码。
Kernel内核管理的核心代码,此目录下的文件实现了大多数linux系统的内核函数,其中最重要的文件当属sched.c;同时与处理器结构相关代码都放在arch*kernel目录下。
lib目录包含了核心的库代码,不过与处理器结构相关的库代码被放在arch*lib目录下。
MAINTAINERS目录存放了维护人员列表,对当前版本的内核各部分都有谁负责。
Makefile目录第一个Makefile文件。
用来组织内核的各模块,记录了个模块间的相互这间的联系和依托关系,编译时使用;仔细阅读各子目录下的Makefile文件对弄清各个文件这间的联系和依托关系很有帮助。
mm目录包含了所有独立于 cpu 体系结构的内存管理代码,如页式存储管理内存的分配和释放等。
与具体
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 原创 基于 linux EEPROM 读写 控制 毕业论文 设计