logo资料库

基于LPC2148的SD卡实现.PDF

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
基于LPC2148的SD卡实现 嵌入式系统升级设计 刘海,朱红 成都电子科技大学 四川 成都 610054 摘 要: 在嵌入式系统中,为了实现设备终端的内核、文件系统升级和设备功能维护,一般是将目标板连接到主机,通过 JTAG 口、 串口或网口来实现升级。在此,提出一种更为方便的升级方法,即利用 LPC2148 用户,只需通过 SPI 方式对发送的 SD 卡 进行底层驱动,运用 SD 卡文件系统、IAP 编程接口方式和程序跳转,即可达到系统升级和维护的目的。不仅与用户交互方便, 且可节约大量的人力、财力和时间。该方案同样可用于 ARM7 和 ARM9。 关键词: 智能终端,系统程序 / 嵌入式系统,系统升级,系统编程 Realization of upgrading embedded system using SD card based on LPC2148 LIU Hai,ZHU Hong University of Electronic and Science Technology,Chengdu 610054,China Abstract: In embedded system,the objective board and host board are always connected to upgrade through the JTAG,serial interface or network,in order to upgrade the kernel,file system and the maintenance of equipment function of the terminal.A more convenient way of upgrading is provided,which is based on LPC2148.After the users insert the SD card,the system can be upgraded and keep maintenance by the driver for SD card,the organization of file system,IAP programming interface and jumping code are jmplemented through SPI interface.It is not only convenient to communicate with the users,but also save a lot of manpower,finance and time.The design also can be used in ARM7 and ARM9. Key word: intelligent terminal, system procedure/embedded system, system upgrade, system programming 1 引言 随着现代工业社会逐步向智能化社会的过渡,嵌入式 在现代经济生活中扮演着重要的角色。为了做出好的产品, 必须与用户形成互动,利用用户的反馈信息不断完善产品。 另外,产品在长时间使用中,会慢慢出现终端程序设计上 的缺陷,这就要求对终端系统设备的内核、文件进行系统 大量的人力、财力,更重要的是浪费了宝贵的时间。延误 了开拓市场的机遇,降低了用户对产品的信誉度 [1]。为了 解决这些问题,提出了利用 LPC2148 的 SD 卡实现嵌入式 系统升级的设计方案。 2 总体系统升级方案设计 升级或者对设备进行功能维护。如果对几百个终端进行现 厂家生产出产品后,用户购买回去使用,当设备出现 场 ISP 升级,或通过 JTAG 口、串口实现升级,不仅浪费 了系统漏洞或者用户不满足现有功能而提出更多需求时, www.globalsca.com 2008年11月 93
就要对系统升级或者维护系统功能。厂家只需将 SD 卡取 地址段中。最后,跳转到指定段,开始工作。厂家可根据 回,把更新后的程序放入 SD 卡中,然后发放给用户,用 需要,任意安排升级程序放置的位置。 户只需把 SD 卡插入终端设备,即可达到系统升级的目的。 图 1 给出厂商与用户之间的交流流程图。图 2 给出整个系 3 系统硬件设计 统设计流程图。 按图 1 所示,厂商与用户交流过程如下: 图 1 厂商与用户之间交流流程图。 核心处理器采用 PHILJIPS 公司的 LPC2148。它是一 个支持实时仿真和嵌入式跟踪的 32 位 ARM7 微控制器, 带有 32KB 和 512KB 嵌入的高速 Flash 存储器。128 位宽 度的存储器接口和独特的加速结构,使 32 位代码能够在 最大时钟速率下运行,并带有 SPI 总线。选用该处理器主 要考虑其内部资源丰富,无需扩展存储器和 SPI 总线,且 性能优异,抗干扰能力强,价格低廉,具有极高的性价比。 该设计只是产品电路中的一部分。其硬件电路如图 3 所示。LPC2148 具有同步、全双工串行接口(SPI),其最 (1) 厂商将一个类似 Boot loader 的程序通过 ISP 方式, 大数据位频率为输入时钟频率的 l/8,可以没置为主机或 从机工作方式。SD 卡是通过 SPI 总线协议驱动的,数据 传输中,主机总是向从机发送一个字节数据,而从机也总 是向主机发送一个字节数据。图 3 中左边为 LPC2148,右 边为 SD 卡插槽。SCKl 为串行时钟,用于 LPC2148 与 SD 卡之间的数据传输时钟信号;MIS01 是一个单向信号,用 于将数据从 SD 卡传输至 LPC2148;MOSll 也是一个单向 信号,用于将数据从 LPC2148 传输至 SD 卡;SSEL1 为选 通信号,用于选中 SD 卡。图 3 中的引脚 3 和引脚 6 分别 接地,引脚 4 接电源,引脚 8 用于检测 SD 卡是否插入, 并可根据实际要求选定。SD 卡与 LPC2148 之间通过 SPI 协议和 SD 文件系统的组织形式,才能协调通讯。 将 其下载到 Flash 中,如图 2 所示的位置; 图 2 系统设计流程图 (2) 将升级程序放入 SD 卡中,随产品一起出厂; (3) 用户拿到 SD 卡后,将其插入 SD 卡槽,终端设备 开始 工作; (4) 用户使用一段时间后,若出现问题或者需要升级、 维护时,只需将 SD 卡返回厂家即可; (5) 厂家将升级后的程序放入返回的 SD 卡中,再返回 给用户,或者厂家直接再发放 SD 卡给用户,而无需用户 返回 SD 卡; (6) 用户拿到 SD 卡后,将其直接插入终端设备卡后, 则可达到升级的目的。 出 厂 前, 通 过 ISP 编 程 方 式 烧 入 一 个 类 似 于 Boot loader 的程序。该程序的实现大致分为 3 个步骤: 4 系统软件设计 图 3 硬件电路图 (1) SPI 模式下的 SD 卡底层驱动; (2) 读出 SD 卡中的系统程序,并放入指定的 Flash 地 址段中: (3) 跳转到指定的 Flash 地址段,执行升级后的系统。 在用户插入 SD 卡前,程序不断判断 SD 卡是否插入。 系统软件部分首先通过 SPI 协议对 SD 卡初始化,然 后根据 SD 卡的 FAT32 文件系统组织形式读取 SD 卡中的 数据,将读取数据通过 IAP 方式将其写入 Flash 中,最后 用一个跳转程序跳转到该段,以达到升级的目的。 用户插入 SD 卡后,程序首先驱动 SD 卡,使其能正常工作, 4.1 SD 卡的初始化 然后读取 SD 卡中的升级程序,并将其放入指定的 Flash 用户应用程序通常以文件的形式访问 SD 卡,并以文 www.globalsca.com 94 2008年11月
件的形式存取数据。文件系统层是通过调用 SD 卡物理层 的有关函数来实现的 [2],所以要想以文件系统的形式访问 SD 卡,则必须先驱动 SD。SD 卡的读写操作都是基于命令 的,通过向 SD 卡发送相应的命令并读取相应的响应控制 SD 卡。在对 SD 卡读写前,首先要进行初始化操作。这是 确保 SD 卡能在 SPI 模式下正常读写数据的前提 [3]。SD 卡 上电复位后,默认是 SD 模式。为了使 SD 卡进入 SPI 模式, 必须将 CS 置低(至少延迟 74 个时钟)并通过 SPI 总线发 送 CMD。使 SD 卡复位,同时激活,并进行内部初始化处理, 使 SD 卡退出空闲状态。SD 卡初始化流程图如图 4 所示。 图 5 SD 卡文件读取步骤 访问 FAT 表,读出其对应的 FAT 表内容,即第 3 个簇号 0006…等。依次做下去,直到最后一个表项内容为 FFFF 为止; (3) 由第 (2) 步可知,“Myfile”这个文件占用了 4 个簇, 这 4 个簇号形成一个簇链 0004H-0005H-0006H-0008H, 根据这些簇号所形成的簇链访问这 4 个簇号对应的 4 个数 据存储区域,文件“Myfile”就分成 4 个部分分别存放在 这 4 个存储区域中 [6]。 4.3 IAP 功能的实现 LPC2148 支持多种方式对 Flash 进行编程,用来写入 用户代码或数据。第一种方式是通过内置的串行 JTAG 接 口进行编程;第二种方式是通过 UARTO 进行存系统编程 (ISP);第三种方式是通过在应用编程(IAP)。IAP 程序是 图 4 SD 卡初始化流程图 SD 卡中 SPI 模块的读操作包括读单块和读多块两种。 该系统仅实现了读单块功能。初始化的长度为 512 字节。 函数的实现分为 4 个步骤:① LPC2148 向 SD 卡发送读单 块命令(CMD17),SD 卡响应(R1 格式);②等待 SD 卡 发送读起始令牌;③判断收到的令牌是否为 OxFE;④从 SD 卡中读取数据 [4]。 4.2 SD 卡文件系统 SD 卡完成底层驱动后,可按照 FAT32 文件系统格式 thumb 代码,地址为 0x7FFFFFF0。在使用 IAP 擦除、编 对 SD 卡上的数据进行操作,进而在 SD 卡上实现读写文 程操作过程中,片内 Flash 存储器不可访问。当用户运行 件等操作。FAT32 文件系统是微软 FAT 类文件系统中的 最高版本,是现今 Windows 下最常用的硬盘文件系统 [5]。 当读取 SD 卡中的文件时,首先要根据文件名查找该 应用程序时,用户 Flash 区域的中断向量有效,所以在调 用 Flash 擦除、写 IAP 之前,用户应当禁止中断,确保用 户中断向量在 RAM 中有效和中断处理程序位于 RAM 中。 文件的信息结构体。根据文件信息结构体中的起始簇号 IAP 代码不使用或禁止中断。 即可找到数据区第 1 簇的内容,也可在 FAT 表中找到第 可将 SD 卡读出的数据用 C 代码烧入指定的 Flash 段 2 个簇号。根据第 2 个簇号又能找到第 2 簇的内容和 FAT 中 [7]: 表中的第 3 个簇号,直至遇到文件结束标志。这样,就可 根据 FAT 表中的簇号读取到全部文件数据 [4]。以图 5 为例, 说明读取 SD 卡文件的具体步骤: * 定义 IAP 程序的入口地址 #define IAP_LOCATION 0x7FFFFFF1; * 定义数据结构或指针,将 IAP 命令表和结果表传递 (1) 先在目录项表中找到与文件名匹配的内容,如 给 IAP 函数 unsigned long command[5], “Myfile”从“Myfile”所对应的目录项中可以读到该文件 unsignecl long result[2]; 的首簇号 0004: * 定义函数类型指针,函数包括两个参数,无返回值 (2) 根据首簇号 0004 访问 FAT 表,读出首簇号对应的 Typedef void(*IAP)(unsigned int[],unsigned int[]); FAT 表项内容 0005,即第 2 个簇号。根据第 2 个簇号再 IAP lap_entry; // 定义函数指针 www.globalsca.com 2008年11月 95
* 设置函数指针 新功能和维护系统稳定方面起到了巨大的作用。要注意 iap_entry=(IAP)IAP_LOCATION; 的是,该程序设计是在 Keil 下编译通过的,生成的 HEX * 调用 IAP 语句 文件不能直接放入 SD 卡中,因为该文件与通过 ISP 烧写 iap_entry(command,result); Flash 的文件不一样,要作一定的修改。另外,该方案不 4.4 程序实现跳转到任意行代码段执行 也可用于 ARM9。因此该设计方案具有广泛的应用前景。 仅能用于系统升级,也能用于为程序补丁和写人数据等, 现以下例来说明这段程序。如果程序跳转到绝对地址 为 0xFFFF0 执行,代码如下: 参考文献 typedef void(*run)();// 定义一个无参数,无返回 [1] 韦文祥 , 朱志杰 , 车琳娜 , 等 . 基于 LPC2124 的一个 类型的函数指针类型 远程系统软件升级方案 [J]. 单片机与嵌入式系统应用 , run address=(run)0xFFFF0;// 定义一个函数指针, 2006(5): 46-49. 指向跳转的位置 address():// 调用函数 [2] 周立功 . ARM 嵌入式系统软件开发实例 ( 二 ) [M]. 北京 : 在上述应用程序中,根本没有看到任何一个函数实体, 北京航空航天大学出版社 . 2006. 但是却执行了函数调用。实际上它起到了“软重启”的作 [3] 张凯 , 姜熙君 , 陈磊 , 等 . MMC 卡的文件系统及其实现方 用,跳转到 CPU 启动后第一条要执行的指令位置,即实 法 [J]. 单片机与嵌入式系统应用,2006(5): 30-32. 现了程序的跳转。 5 结语 [4] 张天益 . 基于 ARM 的车载播放器的设计 [D]. 成都 : 电子科 技大学 . 2007. [5] 张明亮 , 张宗杰 . 浅析 FAT32 文件系统 [J]. 计算机与数字 该 设 计 方 案 以 LPC2148 为 核 心, 通 过 SD 卡 驱 动、 工程,2004, 33(1): 56-59. FAT32 文件系统、IAP 功能和程序跳转实现了系统升级的 [6] 陈祖爵 , 蒋仕俊.智能遥控器 SD 卡文件系统的设计与实现 模块设计,并用于实际开发中。该设计增强了系统维护, [J]. 计算机与设计 , 2007, 28(19): 4716-4718. 缩短了产品的开发周期,节约了大量的人力、财力,增加 [7] 周立功 . ARM 微控制器基础与实践 [M]. 北京 : 北京航空航 了与用户的交流力度。与传统设计相比,在开发时间、成 天大学出版社 , 2003. 本和灵活性等方面都占有优势性。该设计已经调试成功, 并作为一个功能模块用于某电子产品上,在产品需要增加 转载自《国外电子元器件》2008年(第10期) www.globalsca.com 96 2008年11月
分享到:
收藏