基于LPC2148的SD卡实现嵌入式系统升级设计

发布者:喜从中来最新更新时间:2012-08-27 来源: 国外电子元器件 关键字:LPC2148  SD卡  系统升级 手机看文章 扫描二维码
随时随地手机看文章
1 引言
    随着现代工业社会逐步向智能化社会的过渡,嵌入式在现代经济生活中扮演着重要的角色。为了做出好的产品,必须与用户形成互动,利用用户的反馈信息不断完善产品。另外,产品在长时间使用中,会慢慢出现终端程序设计上的缺陷,这就要求对终端系统设备的内核、文件进行系统升级或者对设备进行功能维护。如果对几百个终端进行现场ISP升级,或通过JTAG口、串口实现升级,不仅浪费大量的人力、财力,更重要的是浪费了宝贵的时间,延误了开拓市场的机遇,降低了用户对产品的信誉度。为了解决这些问题,提出了利用LPC2148的SD卡实现嵌入式系统升级的设计方案。


2 总体系统升级方案设计
   
厂家生产出产品后,用户购买回去使用,当设备出现了系统漏洞或者用户不满足现有功能而提出更多需求时,就要对系统升级或者维护系统功能。厂家只需将SD卡取回,把更新后的程序放入SD卡中,然后发放给用户,用户只需把SD卡插入终端设备.即可达到系统升级的目的。图1给出厂商与用户之间的交流流程图。图2给出整个系统设计流程图。

    按图1所示,厂商与用户交流过程如下:
    (1)厂商将一个类似Boot loader的程序通过ISP方式,将其下载到Flash中,如图2所示的位置。
    (2)将升级程序放入SD卡中,随产品一起出厂。
    (3)用户拿到SD卡后,将其插入SD卡槽,终端设备开始工作。
    (4)用户使用一段时间后,若出现问题或者需要升级、维护时.只需将SD卡返回厂家即可。
    (5)厂家将升级后的程序放入返回的SD卡中,再返回给用户.或者厂家直接再发放SD卡给用户,而无需用户返回SD卡。
    (6)用户拿到SD卡后,将其直接插入终端设备卡后,则可达到升级的目的。
    出厂前,通过ISP编程方式烧入一个类似于Boot loader的程序。该程序的实现大致分为3个步骤:
    (1)SPI模式下的SD卡底层驱动;
    (2)读出SD卡中的系统程序,并放入指定的Flash地址段中:
    (3)跳转到指定的Flash地址段,执行升级后的系统。
    在用户插入SD卡前,程序不断判断SD卡是否插入。用户插入SD卡后,程序首先驱动SD卡,使其能正常工作,然后读取SD卡中的升级程序,并将其放入指定的Flash地址段中。最后,跳转到指定段,开始工作。厂家可根据需要,任意安排升级程序放置的位置。


3 系统硬件设计
   
核心处理器采用PHILIPS公司的LPC2148。它是一个支持实时仿真和嵌入式跟踪的32位ARM7微控制器。带有32KB和512 KB嵌入的高速Flash存储器。128位宽度的存储器接口和独特的加速结构,使32位代码能够在最大时钟速率下运行,并带有SPI总线。选用该处理器主要考虑其内部资源丰富,无需扩展存储器和SPI总线,且性能优异,抗干扰能力强,价格低廉,具有极高的性价比。
    该设计只是产品电路中的一部分。其硬件电路如图3所示。LPC2148具有同步、全双工串行接口(SPI),其最大数据位频率为输入时钟频率的1/8,可以设置为主机或从机工作方式。SD卡是通过SPI总线协议驱动的,数据传输中。主机总是向从机发送一个字节数据,而从机也总是向主机发送一个字节数据。图3中左边为LPC2148,右边为SD卡插槽。SCKl为串行时钟,用于LPC2148与SD卡之间的数据传输时钟信号:MISOl是一个单向信号,用于将数据从SD卡传输至LPC2148;MOSll也是一个单向信号。用于将数据从LPC2148传输至SD卡;SSEL1为选通信号,用于选中SD卡。图3中的引脚3和引脚6分别接地,引脚4接电源,引脚8用于检测SD卡是否插入,并可根据实际要求选定。SD卡与LPC2148之间通过SPI协议和SD文件系统的组织形式.才能协调通讯。

4 系统软件设计
   
系统软件部分首先通过SPI协议对SD卡初始化,然后根据SD卡的FAF32文件系统组织形式读取SD卡中的数据,将读取数据通过IAP方式将其写入Flash中,最后用一个跳转程序跳转到该段,以达到升级的目的。
4.1 SD卡的初始化
   
用户应用程序通常以文件的形式访问SD卡,并以文件的形式存取数据;文件系统层是通过调用SD卡物理层的有关函数来实现的,所以要想以文件系统的形式访问SD卡,则必须先驱动SD。SD卡的读写操作都是基于命令的,通过向SD卡发送相应的命令并读取相应的响应控制SD卡。在对SD卡读写前,首先要进行初始化操作。这是确保SD卡能在SPI模式下正常读写数据的前提。SD卡上电复位后,默认是SD模式。为了使SD卡进入SPI模式,必须将CS置低(至少延迟74个时钟)并通过SPI总线发送CMDn,使SD卡复位,同时激活,并进行内部初始化处理,使SD卡退出空闲状态。[page]
    SD卡初始化流程图如图4所示。

    SD卡中SPI模块的读操作包括读单块和读多块两种。该系统仅实现了读单块功能。初始化的长度为512字节。函数的实现分为4个步骤:①LPC2148向SD卡发送读单块命令(CMD17),SD卡响应(Rl格式);②等待SD卡发送读起始令牌;③判断收到的令牌是否为0xFE;④从SD卡中读取数据。
4.2 SD卡文件系统
    SD卡完成底层驱动后,可按照FAT32文件系统格式对SD卡上的数据进行操作,进而在SD卡上实现读写文件等操作。FAT32文件系统是微软FAT类文件系统中的最高版本.是现今Windows下最常用的硬盘文件系统。
    当读取SD卡中的文件时,首先要根据文件名查找该文件的信息结构体。根据文件信息结构体中的起始簇号即可找到数据区第1簇的内容,也可在FAT表中找到第2个簇号。根据第2个簇号又能找到第2簇的内容和FAT表中的第3个簇号,直至遇到文件结束标志。这样,就可根据FAT表中的簇号读取到全部文件数据。以图5为例,说明读取SD卡文件的具体步骤:

    (1)先在目录项表中找到与文件名匹配的,如“Mvfile”,从“Myfile”所对应的目录项中可以读到该文件的首簇号0004:
    (2)根据首簇号0004访问FAT表,读出首簇号对应的FAT表项内容0005,即第2个簇号。根据第2个簇号再访问FAT表,读出其对应的FAT表内容,即第3个簇号0006…等。依次做下去,直到最后一个表项内容为FFFF为止;
    (3)由第(2)步可知,“Myfile"这个文件占用了4个簇,这4个簇号形成一个簇链000dH一0005H一0006H一0008H,根据这些簇号所形成的簇链访问这4个簇号对应的4个数据存储区域.文件“Myfile”就分成4个部分分别存放在这4个存储区域中161。
4.3 IAP功能的实现
    LPC2148支持多种方式对Flash进行编程,用来写入用户代码或数据。第一种方式是通过内置的串行JTAG接口进行编程:第二种方式是通过UART0进行在系统编程(ISP);第三种方式是通过在应用编程(IAP)。IAP程序是thumb代码,地址为0x7FFFFFF0。在使用IAP擦除、编程操作过程中,片内Flash存储器不可访问。当用户运行应用程序时,用户Flash区域的中断向量有效.所以在调用Flash擦除、写IAP之前,用户应当禁止中断,确保用户中断向量在RAM中有效和中断处理程序位于RAM中。IAP代码不使用或禁止中断。可将SD卡读出的数据用C代码烧入指定的Flash段中:


4.4 程序实现跳转到任意行代码段执行
    现以下例来说明这段程序,如果程序跳转到绝对地址为0xFFFF0执行,代码如下:
    typedef void(*run)();//定义一个无参数,无返回类型的函数指针类型
    run address=(run)0xFFFFO;//定义一个函数指针,指向跳转的位置
    address()://调用函数
    在上述应用程序中,根本没有看到任何一个函数实体,但是却执行了函数调用;实际上它起到了“软重肩”的作用,跳转到CPU启动后第一条要执行的指令位置,即实现了程序的跳转。


5 结语
    该设计方案以LPC2148为核心,通过SD卡驱动、FAT32文件系统、IAP功能和程序跳转实现了系统升级的模块设计,并用于实际开发中。该设计增强了系统维护,缩短了产品的开发周期.节约了大量的人力、财力,增加了与用户的交流力度。与传统设计相比。在开发时间、成本和灵活性等方面都占有优势性。该设计已经调试成功,并作为一个功能模块用于某电子产品上,在产品需要增加新功能和维护系统稳定方面起到了巨大的作用。要注意的是,该程序设计是在Keil下编译通过的,生成的HEX文件不能直接放入SD卡中,因为该文件与通过ISP烧写Flash的文件不一样,要作一定的修改。另外,该方案不仅能用于系统升级,也能用于为程序补丁和写入数据等,也可用于ARM9。因此该设计方案具有广泛的应用前景。

关键字:LPC2148  SD卡  系统升级 引用地址:基于LPC2148的SD卡实现嵌入式系统升级设计

上一篇:AD7656与LPC2210的并行采集接口设计
下一篇:用梯度均值法提高LPC2138的A/D分辨率

推荐阅读最新更新时间:2024-03-16 13:06

基于液体式高功率微波衰减器温控系统的设计与实现
    高功率微波衰减器的最基本原理就是将微波功率通过衰减吸波材料转化为热量,因此热传导结构和散热冷却系统的研究设计就尤为重要,直接关系整个衰减器系统的正常工作。液体衰减材料的衰减特性有一定的温度特性,即衰减量会随着液体衰减材料温度变化而改变,但是同时又要保证不会因为温度过高而使其沸腾。因此温控系统的设计关乎衰减器研制的成败。     本文将基础传热学、换热器设计、嵌入式系统充分的融为一体,实现了控制温度的目的。 1 温控体系结构     图1所示为温控系统结构图,温控系统主要由传感器、电加热水箱、螺旋板式换热器和嵌入式控制系统组成。系统的末端连接换热器,使衰减液耗散其吸收高功率后而产生的热量,从而保证了衰减液的温度不会持续增高。
[嵌入式]
于LK冗余方案的纪庄子污水处理厂自控系统升级改造
1 引言 纪庄子污水处理厂位于天津市河西区卫津河以西、津港运河以北、纪庄子排污河以南的区域,占地面积30公顷。纪庄子污水处理厂的污水处理工艺采用多级AO处理工艺。纪庄子污水处理厂升级改造工程是天津市污水处理工程项目之一,主要内容包括污水处理厂的工艺设备、电气设备和自控仪表设备等的升级改造。纪庄子污水处理厂服务于天津市纪庄子排水系统,升级改造工程的设计处理能力为45万吨/日。 纪庄子污水处理厂升级改造工程的工作内容包括改造老系统曝气沉淀池、改造老系统初次沉淀池集配水井、改造老系统初次沉淀池、改造老系统初次沉淀池为厌氧池、改造老系统生物池、改造老系统污泥泵房、新建老系统接触池、改造老系统加氯间、改造扩建系统初次沉淀池为厌氧池、改造扩建
[嵌入式]
单片机读写SD卡最简单最基本的程序
  单片机读写SD卡最简单最基本的程序 / /   2010-11-01 21:14   转载自 刀禁凯森   最终编辑 zlulu2008   处理器:s3c44b0 (arm7)   SD卡与处理器的引脚连接:MISO -- SIORxD MOSI -- SIOTxD CLK -- SCLK CS -- PE5   包括四个文件:sd_drive.c :用户API函数,移植时不需修改   sd_cmd.c:中间层函数,移植时不需修改   sd_hard.c:硬件层函数,移植时需修改   sd_config.h:一些功能的宏定义,移植时需修改   第一次读写SD卡时,需调用SD_Init(void),然后就可以
[单片机]
锤子手机T1系统升级 拍照功能改善
     距离锤子手机T1的发货日期越来越近,目前据保守估计锤子手机T1的预定量已超过五万台,距离老罗所说的十万台目标已经不远。随之而来的是Smartisan OS系统的更新也愈发频繁。   Smartisan OS系统迎来频繁更新   此次锤子手机T1的Smartisan OS系统更新并没有大的版本变化,系统版本仍然是1.0.0,不同的是在版本后有更新日期用于区分不同的更新包,截止目前最近一次更新是在6月21日(上周六)。不过略显遗憾的是在几次更新当中官方并没有给出具体的系统更新日志,所以具体有哪些功能在更新中得到了改进只能是用过才知道。   开启了HDR功能和桌面使用向导   而通过我们的试用发现,在之前相机当中被锁
[手机便携]
STM32CubeMX的SDIO模式下对SD卡读写测试
1.问题描述:使用STM32CubeMX,配置SDIO的4bit模式,对SD卡进行读写测试。 2.准备工作: 软件版本:STM32CubeMX–4.22.0 ;KEIL5 硬件平台:原子战舰V3 (1)软件设置: I. SDIO选择,这里选择4bits模式,实际选1bits也可以。 II. 时钟树配置 III. SDIO模式时钟分频设置,其他默认。 其他详细配置请自行打开源码压缩包里的MP3_Test.ioc查看。 (2)Keil工程测试代码: 测试代码参考硬石的HAL库例程,其资料下载地址在最下方。 I.首先是测试要用到的宏定义及变量的声明。 II.接下来是对主函数代码的添加与修改。 III.主要代码段修
[单片机]
SD卡扇区擦除之整卡擦除(以及一些细节问题和疑惑)
前言 其实这个博文是强迫症的产物,对产物;如果要在一个SD卡上建立文件系统FATFS,我带从这张卡的第0个字节,清除到最后一个字节,确保卡上“无残留”,从而不会影响我后续的工作;当整张卡被清除的那一刻,开心!!! 文章中的例程包含标准容量卡SDSC的和高容量卡SDHC的例程; 以我16G的金士顿SD卡为例; 流程 首先你需要获取SD卡上的CSD寄存器值,从而计算出当前卡的准确容量,可以看我下面这个博客:https://blog.csdn.net/wuyuzun/article/details/90581825 这里为啥说当前卡的准确容量,来看下面这个图片比较: 计算机显示我的内存卡的总容量如下 通过STM32的 SD_Ge
[单片机]
<font color='red'>SD卡</font>扇区擦除之整卡擦除(以及一些细节问题和疑惑)
三星发布Android9.0系统升级公告
集微网消息,谷歌在去年8月份发布了Android9.0操作系统,此后各大手机厂商开始给旗下的手机推送Android9.0的系统升级包,作为国际大厂之一的三星也不例外。 近日,三星盖乐世空间APP发布了Android9.0的系统升级公告,详细列出来自家手机升级该系统的时间表。 我们看到有十几款手机能够升级到该操作系统,最早升级的是三星的Galaxy S9系列,升级时间是今年2月份,最晚升级的是三星Galaxy Tab A(2018.10.5),升级时间为今年10月份。 此外,三星首款代工产品Galaxy A6s也出现在升级Android9.0的列表中,三星把它叫做Phoenix,手持该机的用户大可放心。 至于去年12月份发布的黑瞳全
[手机便携]
三星发布Android9.0<font color='red'>系统升级</font>公告
STM32+SDIO+FATFS文件系统 直读SD卡 (含程序)
网上关于小型嵌入式的文件系统有好多~当然要数 FATFS 很是出名 一来小巧,二来免费。当然了国产的振南的znFAT 一样开源好用而且极其的省资源~!非常适合51单片。更重要的是国语的支持,呵呵!这次在STM32上为SD卡移植文件系统还是非常简单顺利的,这多亏了ST 官方提供的驱动,而我自己不用动手编写SD卡的命令省了很多时间而且官方做的驱动虽然效率一般但是极其严谨我很是佩服。 FATFS的官方网站是 http://elm-chan.org/fsw/ff/00index_e.html znFAT的官方网站是 http://www.znmcu.cn/softshow.asp?id=47 SD卡以用SPI驱动 也可
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved