[doc] 基于LPC2148的SD卡实现嵌入式系统升级
基于LPC2148的SD卡实现嵌入式系统升级
设计
《国外电子元器件)2008年第10期嵌入式系统
基于LPC2148的SD卡实现嵌入式系统升级设计
刘海.朱红
(成都电子科技大学,四川成都610054)
摘要:在嵌入式系统中,为了实现设备终端的内核,文件系统升级和设备功能维护,一般是将目标板连接到主机,通过
JTAG口,串口或网口来实现升级.在此,提出一种更为方便的升级
,即利用LPC2148用户,只需通过SPI方式对
发送的SD卡进行底层驱动,运用SD卡文件系统,IAP编程接口方式和程序跳转,即可达到系统升级和维护的目的.
不仅与用户交互方便.且可节约大量的人力,财力和时间.该
同样可用于ARM7和ARM9.
关键词:智能终端;系统程序/嵌入式系统;系统升级;系统编程
中图分类号:TP393文献标识码:A文章编号:1006—6977(2008)10—0027—03
RealizationofupgradingembeddedsystemusingSDcardbasedonLPC2148
LIUHai,ZHUHong
(UniversityofElectronicandScienceTechnology,Chengdu610054,China)
Abstract~Inembeddedsystem,theobjectiveboardandhostboardarealwaysconnectedtoupgradethroughtheJTAG,seri—
alinterfaceornetwork,inordertoupgradethekernel,filesystemandthemaintenanceofequipmentfunctionofthetermi-
na1.Amoreconvenientwayofupgradingisprovided,whichisbasedonLPC2148.AftertheusersinserttheSDcard,the
systemcanbeupgradedandkeepmaintenancebythedriverforSDcard,theorganizationoffilesystem,lAPprogramming
interfaceandjumpingcodeareimplementedthroughSPIinterface.Itisnotonlyconvenienttocommunicatewiththeusers,
butalsosavealotofmanpower.financeandtime.1?hedesignalsocanbeusedinARM7andARM9.
Keyword:intelligentterminal;systemprocedure/embeddedsystem;systemupgrade;systemprogramming
1引言
随着现代工业社会逐步向智能化社会的过渡,嵌入式在现
代经济生活中扮演着重要的角色.为了做出好的产品,必须与
用户形成互动.利用用户的反馈信息不断完善产品.另外,产
品在长时间使用中.会慢慢出现终端程序设计上的缺陷,这就
要求对终端系统设备的内核,文件进行系统升级或者对设备
进行功能维护.如果对几百个终端进行现场ISP升级,或通过
JTAG口,串口实现升级,不仅浪费大量的人力,财力,更重要
的是浪费了宝贵的时间,延误了开拓市场的机遇,降低了用户
对产品的信誉度【l】.为了解决这些问
,提出了利用LPC2148
的SD卡实现嵌入式系统升级的
.
2总体系统升级方案设计
厂家生产出产品后,用户购买回去使用.当设备出现了
系统漏洞或者用户不满足现有功能而提出更多需求时,就要
对系统升级或者维护系统功能.厂家只需将SD卡取回,把更
新后的程序放入SD卡中,然后发放给用户,用户只需把SD
卡插入终端设备.即可达到系统升级的目的.图1给出厂商
与用户之间的交流流程图.图2给出整个系统设计流程图.
按图1所示.厂商与用户交流过程如下:
收稿日期:2008一O7—12稿件编号:200807023
作者简介:刘海(1984一),男,四川成都人,硕士研究生.
厂家
烧XBootloader程序
将程序存XSD卡中
返回厂家
升级程序Y
出厂
用户
插入SO卡
=I=
继续使用
图1
?读出升级
程序寄入f
,RAM中.}
SD卡
?驱动sD卡
厂商与用户交流流程图
升级程序区
用户数据
类Bootloader程序
0x00007000
(可任意指定)
?跳转到指定段
0x00O00000
图2系统设计流程图
(1)厂商将一个类似Bootloader的程序通过ISP方式.将
其下载到Flash中,如图2所示的位置.
(2)将升级程序放入SD卡中,随产品一起出厂.
(3)用户拿到SD卡后,将其插入SD卡槽,终端设备开始
工作.
(4)用户使用一段时间后,若出现问题或者需要升级,维
护时,只需将SD卡返回厂家即可.
(5)厂家将升级后的程序放入返回的SD卡中,再返回
给用户,或者厂家直接再发放SD卡给用户.而无需用户返回
SD卡
研究方向:嵌入式系统和信号与信息处理.
-
27-
《国外电子元器件}2008年第l0期
(6)用户拿到SD后,将其直接插入终端设备卡后,则
可达到升级的目的.
}fj厂前.通过ISP编程方式烧人一个类似于Bootloader
的程序.陔程序的实现大致分为3个步骤:
(1)SPI模式下的SD卡底层驱动:
(2)凄SD卡中的系统程序,并放人指定的Flash地址
段中:
(3)跳转到指定的Flash地址段,执行升级后的系统.
在用户插入SD卡前.程序不断判断SD卡是否插入.用
户插入SD卡后,程序首先驱动SD卡,使其能正常T作,然后
读取SD卡中的升级程序,并将其放入指定的Flash地址段
中.最后,跳转到指定段,开始T作.厂家可根据需要,任意安
排升级程序放置的位置.
3系统硬件设计
核心处理器采用PHILIPS公司的LPC2148.它是一个支
持实时仿真和嵌入式跟踪的32位ARM7微控制器,带有32
KB和512KB嵌入的高速Flash存储器.128位宽度的存储
器接口和独特的加速结构,使32位代码能够在最大时钟速
率下运行,并带有SPI总线.选用该处理器主要考虑其内部
资源丰富.无需扩展存储器和SPI总线,且性能优异,抗干扰
能力强.价格低廉,具有极高的性价比.
该设计只是产品电路中的一部分.其硬件电路如图3所
示.LPC2148具有同步,全双1:串行接口(SPI),其最大数据位
频率为输入时钟频率的l/8,可以设置为主机或从机工作方
式SD卡是通过SPI总线协议驱动的,数据传输中,主机总是
向从机发送一个字节数据,而从机也总是向主机发送一个字
节数据.网3中左边为LPC2148,右边为SD卡插槽.SCK1为
串行时钟,用于LPC2148与SD卡之间的数据传输时钟信号;
MISOI是一个单向信号,用于将数据从SD卡传输至
LPC2148:MOSII也是一个单向信号.用于将数据从LPC2148
传输至SD卡;SSEL1为选通信号,用于选中SD卡.3中的
引脚3和引脚6分别接地,引脚4接电源,引脚8用于检测SD
卡是否捕人.并可根据实际要求选定.SD卡与LPC2148之间
通过SPI协议和SD文件系统的组织形式,才能协调通讯.
P0.20SSEL1
P0.19一一__[]—毒M0SI1
100oGND
LPC21484
P0.17昌VCCSPIGND
100(~R
l9
SCK1
MIS01P0.18——
Q—GND
l3硬件电路图
4系统软件设计
系统软件部分首先通过SPI协议对SD卡初始化,然后根
据SD卡的FAT32文件系统组织形式读取SD卡中的数据,将
读取数据通过IAP方式将其写入Flash中,最后用一个跳转程
序跳转到该段,以达到升级的目的.
-
28-
4.1SD卡的初始化
用户应用程序通常以文件的形式访问SD卡.并以文件
的形式存取数据:文件系统层是通过调用SD卡物理层的有
关函数来实现的口I,所以要想以文件系统的形式访问SD卡,
则必须先驱动SD.SD卡的读写操作都是基于命令的,通过向
SD卡发送相应的命令并读取相应的响应控制SD卡.在对
SD卡读写前,首先要进行初始化操作.这是确保SD卡能在
SPI模式下正常读写数据的前提I31.SD卡上电复位后,默认是
SD模式.为了使SD卡进入SPI模式,必须将CS置低(至少
延迟74个时钟)并通过SPI总线发送CMD,使SD卡复位,
同时激活,并进行内部初始化处理,使SD卡退空闲状态.
SD卡初始化流程图如图4所示.
I设置sPI时钟I
„??
选择卡(cs为低)复位卡(CMD~)l设置读写长度I
??
l延迟I激活卡(CMD.)?
?+l初始化全局变量
不选择卡(cs为高l读0CR寄存器
图4SD卡初始化流程图
SD卡中SPI模块的读操作包括读单块和读多块两种.该
系统仅实现了读单块功能.初始化的长度为5l2字节.函数的
实现分为4个步骤:?LPC2148向SD卡发送读单块命令
(CMD,),SD卡响应(R1格式);?等待SD卡发送读起始令
牌;?判断收到的令牌是否为0xFE;?从sD卡中读取数据[41.
4.2SD卡文件系统
SD卡完成底层驱动后,可按照FAT32文件系统格式对
SD卡上的数据进行操作.进而在SD卡上实现读写文件等操
作FAT32文件系统是微软FAT类文件系统中的最高版本,
是现今Windows下最常用的硬盘文件系统[51.
当读取SD卡中的文件时,首先要根据文件名查找该文件
的信息结构体.根据文件信息结构体中的起始簇号即可找到数
据区第1簇的内容,也可在FAT表中找到第2个簇号.根据第
2个簇号又能找到第2簇的内容和FAT表中的第3个簇号,直
至遇到文件结束标志.这样,就可根据FAT表中的簇号读取到
全部文件数据[41.以图5为例,说明读取SD卡文件的具体步骤:
(1)先在目录项表中找到与文件名匹配的,如”Myfile”,从
“Myfile”所对应的目录项中可以读到该文件的首簇号0004;
FAT区数据区
0000F8FF
目录区0001FFFF
00020O00
Myfi1e0004乙.
00030000
00040O05
00050006
00060008
O007O000
—_
OO08FFFF._
00090000
Myfi1e(1)
MyfiIe(2)
Myf|le(3)
Myfile(4)
图5SD卡文件读取步骤
基于LPC2l48的SD卡实现嵌入式系统升级设计
(2)根据首簇号0004访问FAT表,读出首簇号对应的
FAT表项内容0005,即第2个簇号.根据第2个簇号再访问
FAT表,读出其对应的FAT表内容,即第3个簇号0006…
等.依次做下去,直到最后一个表项内容为FFFF为止;
(3)由第(2)步可知,”Myfile”这个文件占用了4个簇,这
4个簇号形成一个簇链0004H一0005H一0006H一0008H.根据
这些簇号所形成的簇链访问这4个簇号对应的4个数据存
储区域,文件”Myfile”就分成4个部分分别存放在这4个存
储区域中161.
4.3IAP功能的实现
LPC2148支持多种方式对Flash进行编程.用来写入用
户代码或数据.第一种方式是通过内置的串行JTAG接口进
行编程;第二种方式是通过UART0进行在系统编程(ISP);
第三种方式是通过在应用编程(IAP).IAP程序是thumb代
码,地址为0x7FFFFFF0.在使用IAP擦除,编程操作过程中.
片内Flash存储器不可访问.当用户运行应用程序时.用户
Flash区域的中断向量有效,所以在调用Flash擦除,写IAP
之前,用户应当禁止中断,确保用户中断向量在RAM中有效
和中断处理程序位于RAM中.IAP代码不使用或禁止中断.
可将SD卡读出的数据用C代码烧入指定的Flash段中171:
{定义IAP程序的入口地址
#defineIAPj0CAT10N0x7FFFFFF1
{定义数据结构或指针,将IAP命令表和结果表传递给lAP
函数
unsignedlongcommand[5];
unsignedlongresuh[2];
}定义函数类型指针,函数包括两个参数,无返回值
Typedefvoid(IAP)(unsignedint【J,unsignedint?);
IAPiap_
entry;//定义函数指针
设置函数指针
iap_entry=(1AP)IAPJOCATION;
{调用IAP语句
iap_
entry(command,result);
4.4程序实现跳转到任意行代码段执行
现以下例来说明这段程序.如果程序跳转到绝对地址为
0xFFFF0执行.代码如下:
typedefvoid(mn)();//定义一个无参数,无返回类型的
Fnnaddress=(NIB)0xFFFF0;//定义一个函数指针,指向跳
转的位置
address();//调用函数
在上述应用程序中,根本没有看到任何一个函数实体.
但是却执行了函数调用;实际上它起到了.”软重启”的作用,
跳转到CPU启动后第一条要执行的指令位置,即实现了程序
的跳转.
5结语
该设计方案以LPC2148为核心,通过SD卡驱动,FAT32文
件系统,IAP功能和程序跳转实现了系统升级的模块设计,并
用于实际开发中.该设计增强了系统维护,缩短了产品的开发
周期,节约了大量的人力,财力,增加了与用户的交流力度.与
传统设计相比,在开发时间,成本和灵活性等方面都占有优势
性.该设计已经调试成功,并作为一个功能模块用于某电子产
品上,在产品需要增加新功能和维护系统稳定方面起到了巨大
的作用.要注意的是,该程序设计是在Keil下编译通过的.生成
的HEX文件不能直接放人SD卡中.因为该文件与通过ISP烧
写Flash的文件不一样,要作一定的修改.另外,该方案不仅能
用于系统升级,也能用于为程序补丁和写入数据等.也可用于
ARM9.因此该设计方案具有广泛的应用前景.
参考文献:
【1】韦文祥,朱志杰,车琳娜,等.基于LPC2124的一个远程系
统软件升级方案[J].单片机与嵌入式系统应用,2006(5):
46-49.
【2】周立功.ARM嵌入式系统软件开发实例(二)【M】.北京:北京
航空航天大学出版社.2006.
【3】张凯,姜熙君,陈磊,等.MMC卡的文件系统及其实现方
法fJ].单片机与嵌入式系统应用,2006(5):3O一32.
[4]张天益.基于ARM的车栽播放器的设计【D】.成都:电子科
技大学.2007.
[5]张明亮,张宗杰.浅析FAT32文件系统fJ].计算机与数字工
程,20o4,33(1):56—59.
[6J陈祖爵,蒋仕俊.智能遥控器SD卡文件系统的设计与实现
[J].计算机与设计,2007,28(19):4716—4718.
【7】周立功.ARM微控制器基础与实践[M].北京:北京航空航
函数指针类型天大学出版社.2003.
,
(上接第26页)模拟器件,易受外界干扰,所以必须添加滤波
和去耦电路等.设计涉及的I~Clinux不仅体积小,移植性稳
定,网络功能优秀,而且它的源代码公开,还支持在线调试,
不用每次都把应用程序添人内核,因此可大大提高系统的设
计进度,节省设计时间.
参考文献:
【1】周立功.ARM嵌入式基础教程【M】.北京:北京航空航天科
技大学出版社.2005.
[2】田泽.嵌入式系统开发与运用【M].北京:北京航空航天大
学出版社.2005.
【3】刘森.嵌入式系统接口设计与Linux驱动程序开发[M].北
京:北京航空航天大学出版社,2006.
[4】龚建伟,朱志松.基于数字运算的PSD调理电路设计[J].制
造业自动化,2005,27(11):35—36.
[5】王雪文,张志勇.传感器原理及应用【M】.北京:北京航空航
天大学出版社.2004.
-
29-