本书详细介绍当前几大热点ARM嵌入式系统软件模块的原理及其在AM7上的实现。分为5章,每章介绍一种模块。第1章介绍FAT文件系统的基础知识,以及兼容FAT12、FAT16和FAT32的文件系统模块ZLG/FS的源码分析。第2章介绍USB模块驱动程序的设计思想及实现过程。第3章详细介绍CF卡和IDE硬盘及相应软件模块ZLG/CF的设计思想及实现过程。第4章详细介绍TCP/IP及相应软件模块ZLG/IP的设计思想及实现过程。第5章介绍GUI的基础知识及GUI模块ZLG/GUI的设计思想和实现过程。\r\n 这些模块是在PHILIPS公司的通用ARM7微控制器LPC2200系列上调式通过的,可以很容易地移植到基于其他处理器核的嵌入式系统上。\r\n 本书可作为《ARM嵌入式系统系列教程》的配套参考资料,可用作高等院校相关专业的ARM嵌入式系统课程的参考书,也可作为从事ARM嵌入式系统开发应用工程技术人员的参考资料。
第1章 ZLG/FS原理与应用\r\n 1.1 概述\r\n 1.1.1 ZLG/FS简介\r\n 1.1.2 ZLG/FS的特点\r\n 1.1.3 已实现的特性\r\n 1.1.4 暂时未实现的特性\r\n 1.2 使用\r\n 1.2.1 使用示例\r\n 1.2.2 Config.h和fat.h\r\n 1.2.3 与编译器无关的数据类型\r\n 1.2.4 初始化ZLG/FS\r\n 1.2.5 目录相关操作\r\n 1.2.6 文件相关操作\r\n 1.2.7 关闭ZLG/FS\r\n 1.2.8 在多任务环境下使用ZLG/FS\r\n 1.3 ZLG/FS的结构视图\r\n 1.3.1 概述\r\n 1.3.2 应用程序\r\n 1.3.3 文件管理与目录管理\r\n 1.3.4 文件分配表管理与文件目录表管理\r\n 1.3.5 逻辑盘管理模块\r\n 1.3.6 高速缓存管理模块\r\n 1.3.7 底层驱动程序\r\n 1.3.8 实用程序\r\n 1.3.9 源代码文件说明\r\n 1.4 驱动程序设计指南\r\n 1.4.1 一个驱动程序的例子\r\n 1.4.2 参数\r\n 1.4.3 逻辑盘初始化\r\n 1.4.4 卸载逻辑盘\r\n 1.4.5 读/写扇区\r\n 1.5 FAT文件系统基础知识\r\n 1.5.1 简介\r\n 1.5.2 本节的约定\r\n 1.5.3 概述(适用于各类型的FAT文件系统)\r\n 1.5.4 引导扇区和BPB\r\n 1.5.5 FAT数据结构\r\n 1.5.6 FAT类型的确定\r\n 1.5.7 FAT卷的初始化\r\n 1.5.8 FAT32 FSInfo扇区结构和备份引导扇区\r\n 1.5.9 FAT的目录结构(FDT表)\r\n 1.5.10 FAT的长目录项\r\n 1.5.11 命名限制和字符集\r\n 1.5.12 短文件名和长文件名的名字映射\r\n 1.5.13 命名惯例和长文件名\r\n 1.5.14 长目录项对旧版FAT的影响\r\n 1.5.15 验证目录的内容\r\n 1.5.16 与FAT目录项相关的其他注意事项\r\n 1.6 逻辑盘信息管理\r\n 1.6.1 用户接口函数\r\n 1.6.2 内部使用函数\r\n 1.6.3 逻辑盘和卷的区别\r\n 1.6.4 逻辑盘信息登录项\r\n 1.6.5 初始化\r\n 1.6.6 加载底层驱动程序\r\n 1.6.7 卸载底层驱动程序\r\n 1.6.8 获取逻辑盘信息\r\n 1.6.9 获取空闲登录项\r\n 1.7 Cache管理\r\n 1.7.1 用户接口函数\r\n 1.7.2 内部使用函数\r\n 1.7.3 原理\r\n 1.7.4 初始化\r\n 1.7.5 通过Cache读/写逻辑扇区\r\n 1.7.6 把Cache数据写回逻辑盘\r\n 1.8 文件分配表管理 \r\n 1.8.1 FAT简介\r\n 1.8.2 接口函数\r\n 1.8.3 获取簇的下一个簇号\r\n 1.8.4 设置下一个簇号\r\n 1.8.5 为簇链增加一个簇\r\n 1.8.6 删除一个簇链\r\n 1.9 文件目录表管理\r\n 1.9.1 FDT简介\r\n 1.9.2 用户接口函数\r\n 1.9.3 内部接口函数\r\n 1.9.4 数据结构\r\n 1.9.5 读取FDT信息\r\n 1.9.6 保存FDT信息\r\n 1.9.7 获取指定目录指定FDT信息\r\n 1.9.8 设置指定目录指定FDT信息\r\n 1.9.9 在指定目录查找指定FDT\r\n 1.9.10 指定目录查增加FDT\r\n 1.9.11 在指定目录删除指定FDT\r\n 1.9.12 改变指定目录指定FDT属性\r\n 1.9.13 察看指定目录是否为空\r\n 1.9.14 在指定目录查看指定FDT是否存在\r\n 1.10 目录操作 \r\n 1.10.1 用户接口函数\r\n 1.10.2 内部接口函数\r\n 1.10.3 获取指定目录的逻辑盘号\r\n 1.10.4 改变当前逻辑盘\r\n 1.10.5 建立目录\r\n 1.10.6 删除目录\r\n 1.10.7 改变当前目录\r\n 1.10.8 用户文件/目录名转换为系统名\r\n 1.10.9 获取指定文件/目录所在的目录的开始簇号及系统内名称\r\n 1.10.10 获取指定目录开始簇号\r\n 1.11 文件操作\r\n 1.11.1 用户接口函数\r\n 1.11.2 数据结构\r\n 1.11.3 初始化\r\n 1.11.4 删除文件\r\n 1.11.5 打开文件\r\n 1.11.6 查看指定的文件是否处于打开状态\r\n 1.11.7 关闭文件\r\n 1.11.8 从文件中读数据\r\n 1.11.9 把数据写入文件\r\n 1.11.10 判断文件是否读/写到文件尾\r\n 1.11.11 移动文件读/写位置\r\n 1.12 实用程序\r\n第2章 USB驱动程序开发\r\n 2.1 USB1.1协议简介\r\n 2.1.1 USB系统构成\r\n 2.1.2 USB设备的枚举过程\r\n 2.1.3 USB的分组标识\r\n 2.1.4 USB标准设备请求\r\n 2.1.5 USB设备描述符\r\n 2.2 PDIUSBD12器件简介 \r\n 2.3 硬件电路设计\r\n 2.4 软件设计总体思想\r\n 2.5 USB设备控制层\r\n 2.6 USB接口控制驱动\r\n 2.7 应用层\r\n 2.7.1 初始化PDIUSBD12\r\n 2.7.2 控制传输处理\r\n 2.7.3 端点1和端点2数据接收与发送设计思想\r\n 2.7.4 从端点接收数据\r\n 2.7.5 往端点发送数据\r\n 2.8 协议层\r\n 2.9 USB驱动程序软件包的使用方法\r\n第3章 CF卡及IDE接口实现与编程\r\n 3.1 CF简介\r\n 3.1.1 CF背景\r\n 3.1.2 CFA目标与宗旨\r\n 3.1.3 CF存储卡总览\r\n 3.1.4 CF存储特点与应用\r\n 3.2 CF存储卡物理层结构\r\n 3.2.1 CF存储卡\r\n 3.2.2 CF+卡\r\n 3.3 CF存储卡电气接口\r\n 3.3.1 物理描述\r\n 3.3.2 电气描述\r\n 3.3.3 电气接口\r\n 3.3.4 电气规范\r\n 3.3.5 接口/总线时序\r\n 3.3.6 True IDE模式 I/O传输功能\r\n 3.4 CF+/CF卡True IDE模式软件接口\r\n 3.4.1 数据寄存器\r\n 3.4.2 错误寄存器\r\n 3.4.3 特征寄存器\r\n 3.4.4 扇区计数寄存器\r\n 3.4.5 扇区号寄存器\r\n 3.4.6 柱面低寄存器\r\n 3.4.7 柱面高寄存器\r\n 3.4.8 设备/磁头寄存器\r\n 3.4.9 状态和辅助状态寄存器\r\n 3.4.10 设备控制寄存器\r\n 3.4.11 命令寄存器\r\n 3.4.12 ATA设备硬件复位\r\n 3.4.13 ATA设备插入及移出检测\r\n 3.4.14 主/从设备的配置与操作\r\n 3.5 ATA指令描述\r\n 3.5.1 CFATA指令集\r\n 3.5.2 设置特征——EFH\r\n 3.5.3 设备识别——ECH\r\n 3.5.4 读扇区——20H或21H\r\n 3.5.5 写扇区——30H或31H\r\n 3.5.6 立即空闲——95H或E1H \r\n 3.5.7 立即待机——94H或E0H\r\n 3.6 ATA指令流程规范\r\n 3.6.1 选择设备\r\n 3.6.2 PIO data in设备有数据输出\r\n 3.6.3 PIO data out设备有数据输入\r\n 3.6.4 Nondata设备没有数据传输\r\n 3.7 ZLG/CF驱动中间件\r\n 3.7.1 ZLG/CF驱动的结构视图\r\n 3.7.2 中间件原理\r\n第4章 ZLG/IP的原理及应用\r\n 4.1 概述\r\n 4.1.1 ZLG/IP简介\r\n 4.1.2 ZLG/IP特点\r\n 4.2 ZLG/IP支持的硬件举例以太网接口\r\n 4.2.1 EasyARM2200以太网接口电路图\r\n 4.2.2 以太网控制芯片RTL8019AS\r\n 4.2.3 RTL8019AS引脚分类\r\n 4.2.4 RTL8019AS 寄存器的说明\r\n 4.3 ZLG/IP的应用指南\r\n 4.3.1 SOCKET API的使用指南\r\n 4.3.2 ZLG/IP设置指南\r\n 4.3.3 ZLG/IP的驱动编写规则\r\n 4.4 TCP/IP协议栈的分析\r\n 4.4.1 TCP/IP简介\r\n 4.4.2 TCP/IP的分层\r\n 4.4.3 TCP/IP协议栈中最底层的链路层\r\n 4.4.4 网络层协议\r\n 4.4.5 传输层协议\r\n 4.5 嵌入式TCP/IP协议栈的实现\r\n 4.5.1 与操作系统的联系\r\n 4.5.2 ZLG/IP的设置文件\r\n 4.5.3 以太网驱动程序的编写\r\n 4.5.4 以太网层程序的编写\r\n 4.5.5 ARP协议处理程序的编写\r\n 4.5.6 IP协议处理程序的编写\r\n 4.5.7 ICMP协议处理程序的编写\r\n 4.5.8 UDP协议处理程序的编写\r\n 4.5.9 TCP协议处理程序的编写\r\n 4.5.10 SOCKET API程序的编写\r\n第5章 GUI图形用户界面基础\r\n 5.1 概述\r\n 5.2 基本画图原理\r\n 5.3 基本画图函数\r\n 5.3.1 点\r\n 5.3.2 线 \r\n 5.3.3 圆形 \r\n 5.3.4 圆弧及扇形\r\n 5.3.5 椭圆形\r\n 5.3.6 矩形\r\n 5.3.7 正方形\r\n 5.3.8 填充\r\n 5.4 简易窗口管理\r\n 5.5 字符及图形\r\n 5.6 菜单的操作\r\n 5.7 彩色图形处理\r\n 5.8 ZLG/GUI应用实例\r\n 5.8.1 驱动程序的编写\r\n 5.8.2 基本作图\r\n 5.8.3 画窗口\r\n 5.8.4 图形、汉字显示\r\n 5.8.5 菜单操作\r\n附录 版权声明及许可协议
本书自成体系,也可作为《ARM嵌入式系统系列教程》的配套参考资料。互联网为何发展如此迅速?因为沟通的魅力无限。沟通可以极大地
促进社会发展,这不是相加的关系,而是相乘甚至是指数的关系。设想一下,远古时代的类人猿一个一个地在森林中生活,“老死不相往来”
,地球上还会出现现代文明社会吗?早期的嵌入式系统是一个个孤立的系统,与人的沟通——人机界面也很简单。这是由当时的技术水平以及
当时嵌入式系统的应用场合决定的。与早期的电脑类似,早期的嵌入式系统价格昂贵,数量也很少,普通人不可能接触,只有专家才能操作。
尽管如此,早期嵌入式系统的性能却很低,只能用于解决实际的问题。由于成本昂贵,性能较低,设计嵌入式系统主要考虑如何充分发挥其性
能,其他方面只好割爱;因此造成只有“专家”才能使用嵌入式系统。时过境迁,嵌入式系统已经发生了巨大变化。如今,“福特出售的‘计
算能力’已超过了IBM”(福特公司的高级经理语。这里的‘计算能力’泛指通用计算机和嵌入式系统的计算能力,事实上,福特公司不生产通
用计算机,只生产汽车,内嵌许多嵌入式系统),嵌入式系统已深入到社会的方方面面。嵌入式系统的广泛使用使嵌入式系统之间互相沟通变得
十分重要。孤立的嵌入式系统必须事必亲为,结果任何事都不能做得最好。而嵌入式系统增多后,每个嵌入式系统可以专注于一件事,可以做
得最好。同样对于一个公司,尽管每个员工都做得最好,但若员工之间没有互相沟通与协调,公司也运作不下去。因此,各个嵌入式系统之间
须相互协调,甚至还需要与整个系统的外部交换数据。本书介绍的几个软件模块都是用于嵌入式系统之间、嵌入式系统与其他系统之间、嵌入
式系统与人之间的互相沟通和交换数据。鉴于ARM核在嵌入式系统中的地位,这些模块首先是在PHILIPS公司的通用ARM7微控制器LPC2200系列上
调试通过的,但可以很容易移植到基于其它处理器核的嵌入式系统上。本书各个章节内容均由各个嵌入式软件模块的编写者完成,详细地介绍
了相应嵌入式软件模块的实现思想和方法。各个章节内容安排如下:第1章——ZLG/FS原理与应用。介绍与FAT12、FAT16和FAT32兼容的文件系
统的原理,并通过对ZLG/FS软件包的源码分析,分层次介绍如何在嵌入式系统中支持基于FAT12、FAT16和FAT32的卷,即分析ZLG/FS的实现。
FAT文件系统是被通用电脑广泛支持的文件系统,也是嵌入式系统常用的文件系统,使用该文件系统,可以使用简单的方法与最广泛的系统交换
数据,并使这些数据发挥最大效益。第2章——USB驱动程序开发。以PDIUSBD12为例,详细介绍如何使用PHILIPS公司的LPC2200 ARM微控制器开
发基于μC/OSII 的USB驱动程序。通过这个例子,用户可深入了解如何较规范地编写基于μC/OSII操作系统的USB驱动程序。
USB是当前PC机流行的外设接口总线,USB的从设备和主设备也愈来愈多。嵌入式系统如果作为USB从设备,与PC机通信就比较简单,如果再
与FAT文件系统相结合,则可将嵌入式系统设计成U盘,不需要驱动程序即可与PC很方便地交换数据。第3章——CF卡及IDE接口实现与编程。详
细地介绍CF卡(Compact Flash Card)在True IDE 模式下的应用技术,以及CF卡驱动的开发方法和实例。CF卡是使用广泛的电子存储设备,很多
数码相机、PDA都使用它来存储数据,甚至一些手机也支持CF卡。CF卡比其他电子存储设备便宜,嵌入式系统如果使用它作为存储设备,成本较
低,又容易与其他设备交换数据(但须与FAT文件系统相结合)。如果与USB结合,可形成读卡器,交换数据就更加方便。第4章——ZLG/IP的原
理及应用。 从网络结构的角度分析TCP/IP协议的组成,并通过解剖ZLG/IP分析TCP/IP协议栈的实现过程。前面几章都是介绍近距离的沟通,而
用本章的软件模块可实现远距离沟通。目前互联网遍布全球,通过该软件模块可实现在全世界范围内沟通。第5章——GUI图形用户界面基础。
详细介绍嵌入式系统简易的图形用户界面ZLG/GUI的原理,分析Bresenham画直线、圆和椭圆等算法,并提供实现的代码和应用例子代码。现在
嵌入式系统功能越来越强,越来越复杂,操作却要求越来越简单。这时就需要GUI图形用户界面来显身手。漂亮的人机界面还会提高用户的购买
欲。本书介绍的嵌入式软件模块均由广州周立功单片机发展有限公司资深工程师设计,并会不断地升级软件,力求软件越来越完善。参与本书
编写和工作的主要人员有陈明计、黄邵斌、戚军、叶皓贲、周立山、郑明远、刘英斌、岳宪臣和朱旻等。全书由周立功负责规划、内容安排、
定稿与修改。由于作者水平有限,书中难免有疏忽、不恰当甚至错误的地方,恳请各位老师及同行指正。
感谢北京航空航天大学出版社的大力支持,使本书得以快速出版;感谢PHILIPS美国半导体公司CK Phua先生几年来一如既往的支持和关心。
周立功
2004年11月
无封面