基于 L PC2 1 32的 U盘软硬件系统设计*
■ 广 东 技 术 师 范 学 院
■ 广州致远电子有限公司
张 华 俞 小 青
周 立 山
⋯ 阐述一个基于 ARM7的 U盘设计;详 细描述基于 LPC2132、USB接 口芯片 PDIUSBD12和 Flash ROM 的硬
件 系统设计。软件设计主要 包括 D12驱动、Mass Storage类
实现和 Flash存储器的读写控制等。
关键词 LPC2132 USB Mass Storage类协议 U盘
引 言
USB移动存储技术(U盘)把 USB接 口技术与 Flash
存储器技术结合在一起 ,构成了一种快速、大容量、方便的
新型数据交换系统,主要构成有主控制器(MCU)、USB接
口芯片和 Flash存储器。主控制器(MCU)是系统的核心,
负责控制各种外围设备、实现各种算法、协调与主机通信;
USB接 口芯片负责 USB通信 ;Flash(闪烁存储器)用来存
储数据,它决定了U盘的容量。
1 硬件系统设计
U盘设计 结构框 图
如图 1所示。使用 Phil—
ips公 司的 ARM7l1 芯 片
LPC2132,控制 Philips的
USB1.1接 口芯 片 PDI—
USBD12[2],处 理 PMC公
司 的 128 KB 串 行
Flash存储器作为数据存
储设备实现 U盘。
(1)ARM处理器
USB接 口芯片
PDIUSBD12
Flash存储器
Pm25Lv010
M7控制芯
LPC2132
图 1 系统结构框图
LPC2132是基于一个支持实时仿真和跟踪的 16/32
位 ARM7TDMI—S CPU,并 带有 64 KB嵌 入 的高 速
Flash存储器 。LPC2132的实时仿真和跟踪功能方便了
代码的调试,降低了开发成本。
(2)PDIUSBD12
PDIUSBD12(简称为“D12”)是 一款性 价 比很 高的
USB器件 ;通常用于微控制器 系统 中实现 与微 控制器
进行通信的高速通用并行接 口;支持本地的DMA传输。
*基金项目:智能控制技术在汽车驾驶(疲劳驾驶)监控中的应用研究。
2004年度广东省普通高校自然科学研究项目(编号:o4JOlO)。
PDIUSBD12所具有的低挂起功耗连同 LazyClock输出可
以满足使用 ACPI、OnNOW 和 USB电源管理的
。低
功耗可以应用于使用 USB总线供电的外设。
(3)Flash存储器
存储器选用 PMC公司的 Pm25LV010。适合低功耗
和低电压下工作的应用场合;具有完备 的数据保护功能。
通过设置芯片的状态寄存器 ,可以将存储空间的高 1/4、
高 1/2或整片写保护。写使能和写禁止指令进一步保护
数据。另外还提供 WP引脚用于硬件数据保护,以防止对
状态寄存器的意外修改。
U盘电路原理如图 2所示。
2 软件设计
软件设计主要包括 D12驱动 、Mass Storage类协
议和 Flash存储器的读/写控制。
2.1 D12驱动的实现
在 USB设备插入主机之前,主机对这个 USB设备的
情况一无所知 ,无法建立起通信;但 USB协议规定了一些
最基本的准则 ,如每个设备的端点 0都是可用的,属于控
制端点。有了这个基本的沟通途径,主机就开始通过端点
0向设备提出~些问题,这些问题是有关设备基本情况
的。这些基本情况 可以反映 USB设备所属的类别及 子
类 ,反映配置情况、接 口情况和端点情况;一旦得知了这些
信息,主机就大体了解了这个设备是个什么样 的设备,按
照 USB协议 中的相应规定,就逐步建立起 了一条介于设
备之间的高速数据通道,用于数据的传输。主机向设备提
出的这些问题实际上就是 USB协议中规定的各种
请
求 ,设备必须对这些问题进行 回答 ;而回答 的方式就是向
主机传送相应的描述符,即设备描述符 、配置描述符、接口
描述符、端点描述符。
⋯ 一 ⋯ 一 ⋯ 一 , ± m 、 ⋯ ⋯ ⋯ l1^ ~ ~ 53
维普资讯 http://www.cqvip.com
P0.21 W M CAP1.3
P0娩 |c 0 0
RTXC1
P1.1 9,TRACEPKT3
RIXC2
Vss
V3a
P1.18,IRACEPKT2
P0.25/AD0 4/Aout
P0.26,AD0.5
P0.27,AD0.0/CAP0.1 1
P1.17厂I|RACEPKT1
P0.28 删 .1/CAP0.2, tAT0.2
P0 | O c 3 0.3
P0_3O D03删 T3/CAP0 0
P1.16/TRACEPKT0 一
喜
奏l藿
器
山 > 山 山
;
P1.2o,TRACESYNc
Po.1 7,CAP1.2,SC_K1 lAT1.2
P0.1 6,ED盯 0,h【AT0.2/CAP0.2
P0.15瓜 I1 n盯 2
P1.21 IPEST煳
V3
Vss
P0.1仰 cD1庄:【 r1
P1.22 ESTA1’1
P0.13仍 IR 1, 【AT1.1
po.12力)SR1,htAT1.0
N P0.I1/l:TS1,cAPI_1
P1.23/P ESTAT2
帛 PO.10/RTS1/CAP1.0
q P0.9瓜xD1/PwM鲫3Ⅱ盯3
P0.8/'I"xD1/PW M 4
窘 一
q 昌
苣
q
0 0 一
山 山 山
Rgr—USB
堡 sB
AD7
Vdd33
30pF
Vdd3.]
图 2 U盘 电路原理
为了使软件可移植性强、易维护,采用分层的
编 bAddress,UINT8 bEnable);
写 PDIUSBD12的驱动程序。USB驱动程序分层结构如 ◇ 设 置 端 点 使 能,void D12一SetEndpointEnable
表 1所列 。 (UINT8 hEnable);
表 1 USB驱动程序分层结构 ◇ 设置模式,void D]2一SetMode(uint8 bConfig,uint8
文件名 简要说明 相关性
PDIUSBD12与 MCU 之 D12HAL
.C 与硬件相关 间的硬件接口
D12CI.C PDIUSBD12命令接口 与硬件无关
Chap
— .9.C USB协议层 与硬件无关
Descriptor.C USB协议层 与硬件无关
D12Driver.C USB应用层 与硬件无关
① 硬件提取层(D12HAI .c)包含最底层的函数。
② D12命令接口(D12CI.c)实现 PDIUSBD12的命令
接 口以简化器件的编程。该层的函数及其功能如下 :
◇读取芯片 ID号,uint16 D12一ReadChipID(void);
◇设置地址/使能,void D12一SetAddressEnable(UINT8
bClkDiv)。
③ 协议层(Chap一9.c)处理标准的 USB设备请求 ,以
及特殊的厂商请求 ,如 DMA等。USB主机通过标准USB
设备请求,可设定和获取 USB设备的有关信息,完成 USB
设备的枚举。
所有的请求都是通过端点 0接收和发送 SETUP包
来完成的。接收主机 SETUP包的函数为 epO—rxdone(),
所有 SETUP包都由函数 control—handler()来处理,发送
SETUP包的函数为 epO—txdone()。SETUP包的接收和
发送通过控制传输结构全局变量 CONTROL_XFER Con—
trolData来控制,它实现 了以上 3个 函数之 间的通信。
4 《雄‘;缸 入主 毒 刍I甜 J . ⋯ ⋯ ⋯ ,r 。. .= R 、
vl毒 0∞星 ,£. dvu盍 一0 嚣
u皂
叫∞山盈
n 0
∞∞∞>
H^ L,∞
ql、,上x
一 Hlx
0 I^-L,卜
0^ H《、 .PL、 《00∞目∈ .0
0l nq
.0dvul,8目U∞ .0
苔 0.昌 I^,v口 ∞,£.0
∞∞
,9q
£A
00dv U∞ 0
0 苔 凸 重 d,o(— 岜 .0
维普资讯 http://www.cqvip.com
CONTROL
_ XFER结构体的定义如下:
typede{struct— controLxfer{
DEVICE—REQUEST DeviceRequest;
//usB设备请求结构体,8字节
unsigned short wLength;//传输数据的总字节数
unsigned short wCount;//传输字节数统计
unsigned char pData;//传输数据的指针
unsigned char dataBuffer[MAX
— CONTROLDATA_SIZE];
//请求的数据
)C0NTR0L—XFER;
上述几个函数及 ControlData变量之间的关系如 图 3
所示 。
U
应 用天 地
识别设备 ,设备就必须提供正确的描述符 :
◇设备描述符;
◇ 配置描述符;
◇接 口描述符;
◇端点描述符。
2.2.2 Bulk—Only批量传输协议实现
Bulk—Only协议 包括两 部分:类 特定请 求命令 和
Bulk—Only传输。
(1)类特定请求命令
① 批量传输的大容量存储器复位。要发送批量传输
的大容量存储器复位请求 ,主机将在默认管道发送一个设
备请求:
图 3 USB协议层
④ 应用层(D12Driver.c)实现 PDIUSBD12的所有功
能。USB设备控制驱动、USB接 口控制驱动和协议层都
在应用层的控制之中。应用层要实现的任务包括 :
◆ 初始 化 PDIUSBD12。包括 初始化 PDIUSBD12的
硬件连接、复位 PDIUSBD12、配置 PDIUSBD12的中断服
务程序地址 、初始化应用层相关的全局变量。
◆ 编写 PDIUSBD12中断服务程序。PDIUSBD12几
乎所有功能都是通过 PDIUSBD12中断服务程序来完成
的,因此中断服务程序是应用层的核心部分,也是本驱动
程序的核心部分。它要完成以下任务 :
◇控制端点数据接收与发送 中断服务程序 ,负责处
理控制传输的有关工作 ;
◇端点 1和端点 2数据接收与发送中断服务程序;
◇USB总线挂起、复位、DMA结束中断服务程序。
◆用户读写端点 1和端点 2的 API函数。
◆传输控制处理任务。该任务用 于处理枚举、标准
任务请求、厂商请求等传输控制。
2.2 Mass Storage类协议的实现
完整的 Mass Storage类协议需要实现如下几部分 :
在枚举时,提供 Mass Storage类协议描述符;实现 Bulk—
Only批量传输协议 ;实现 SCSI命令集。
2.2.1 Mass Storage类协议描述符
USB采用设备类的方式对设备进行管理。要让主机
◇ bmRequestType——类、接 口、
主机到设备;
◇ bRequest字 段 设 置 为 255
(FFh);
◇ wValue字段设置为 0;
◇wIndex字段设置为接口编号;
◇wLength字段设置为 0。
批量传输的大容量存储器复位请
求如下:
IbmRequestTypel bRequest『wValue l wlndex l wLengthl Data I
l 0010001b J 11111111b I O000h l接口 I O000h I空 I
② 获取最大逻辑单 元号 (专用类请求)。Get Max
LUN设备请求用于确定设备支持的逻辑单元编号。设备
的逻辑单元编号可 以从 LUN为 0到 LUN的最大值 15
(Fh)。
要发送 Get Max LUN设备请求,主机应在以下默认
管道发送一个设备请求 :
◇bmRequestType——类、接 口、设备到主机;
◇bRequest范围设置为 254(FEh);
◇wValue字段设置为 0;
◇ wIndex字段设置为接口编号;
◇ wLength字段设置为 1。
获得最大逻辑单元字如下:
设备应返回1字节包含设备支持的最大逻辑单元数。
例如,如果设备支持4个 LUN,则 LUN的编号应从 O~3,
则返回值为 3。如果设备没有相关的 LUN,则返 回值为
0。主 机 不 应 向一 个 不 存 在 的 LUN 发 送命 令 块 包
(CBW )。
不支持多 LUN的设备会返回STALL。
paper@mesnet.corn.cn(投稿专用) Micr。c。ntr。11ers&Embedded Svstems 5 5
维普资讯 http://www.cqvip.com
应用天地
(2)Bulk—Only传输
Bulk—Only传输协议没有使用中断和控制端点 ,仅
使用 Bulk批量 端点来 进
行命令块、数据和命令块
状态 的传输。控 制 端 点
(默认)管道仅用来请求批
量端点上的 STALL停止
的状态和执行类特定请求
命令。
Bulk—Only传输的流
程如图4所示。
+
命令传{ 俞(cBw)I
f l
T Y
数据输出 数据输入
(主机到设备) (设备到主机)
I I
Y
状态传输 I
图4 命令/数据/状态流程
2.2.3 SCSI命令集实现
SCSI命令集是 SCSI设备通用命令集。SCSI有 3种
字长的命令:6字节、lo字节和 l2字节。Microsoft win—
dows环境下支持 12字节长的命令。图 5给出了通用的
UFI命令块的格式。请注意,这些字节就是 CBW 封包中
CBWCB字段的内容。
\
宇八 7 6 5 4 3 2 1 O
O 操作代码
1 逻辑单元号 保 留
2 (MSB)
3 逻辑块地址
4 (Logical Block Address,即 LBA,可选)
5 (LSB)
6 保 留
7 (MSB) 传输量、参量列表或
8 返回数据长度(可选) (LSB)
9 保 留
10 保 留
11 保 留
图5 UFI子类命令块地址
对不同的命令只需根据 SCSI命令集白皮书作出适 当
的回应。Pm25LvOlO的最小擦除单位为扇区(4 KB),故在
程序 中定义一个 4 KB的缓 冲 区 Cache—STRUC Flash—
Cache,把每次收到的数据放入缓冲区中,到缓冲区满数据
接收完毕时再将其写入 Flash存储器中,流程如图 6所示。
2.3 Flash存储器的读写控制
Flash存储器读写程序 由 SPI控制和 Pro25LVO10控
制两部分组成。
Pm25LV010 Flash存储器采用的是 SPI串行接口,其
SPI有两种工作模 式——模式 0和模式 3。SPI.C完成
SPI底层操作 ,给 Pm25LV010控制程序提供一个读写 1
字节数据函数。该函数使用 SPI模式 0。
Pm25LVO10控制程序完成 Pm25LVO10器件的所有
操作 ,其向高层提供的函数及功能如表 2所列。
开 始
接收数据存入FlashCache缓冲区
将无需改写的数据读入缓冲区
将缓冲区数据写入Flash存储器
完 成
图 6 接收数据命令流程
Pm25LV010的最小擦除单位是扇区(每扇区 4 KB),
在改写扇区内任意一字节数据时都需要将该扇区擦除。针
对这种情况,在程序中定义了~个 4 KB大小的缓冲区,当
上层调用函数 WriteToFlash()向Flash写数据时,并不直接
写入 Flash,而是先写到数据缓冲区,其流程如图7所示。
图 7 向 Flash写数据流程
表 2 Pm25LV010驱 动程序 高层 函数
函数名 功 能
void PMC Ini(void) 初始化 Flash器件
void Flash_RDID(uint8*IDdata) 读器件 ID
void Flash
— RdNByte(uint32 addr, N字节读取函数
uint8 pdata,uint32 count)
void WriteToFlash(uint32 addr,uint32 向 Flash写数据 len,uint8 "X-dat)
void ReadNoChange(Uint32 addr, 在向一个扇区写一段数据时,把
uint32 ien.uint8*bud 不需修改的数据保存在缓冲区
uint8 Flash— WriteSectors(uint32 ad— 写
一 个扇区 dr,uint8 pdata,uint32 Verify)
《聋卉缸 入 务 刍厢 一A一 ⋯ 一⋯ ⋯ 一,r ±m、
维普资讯 http://www.cqvip.com
应用天地
步态加速度信号的无线采集系统设计
■ 华 中师范大学 周 兆 丰 刘 守 印 侯 向 锋
为实现步态加速度信号的无线采集,提 出一种基 于内嵌 8051的无线收发芯片 CC1010的有效方法。简
⋯ 要介绍步态加速度信号无线采集系统的工作原理,详细说明该系统的软硬件设计与实现。系统采用路 由
一 一 和重传机制,以确保数据的可靠传输。利用本采集系统成功建立一个 36人的步态加速度数据库,可供不
同领域的步态研究者进行分析。
关键词 步态加速度 CC1010 MMA7260 路 由 无线采集
步态,即人走路 的姿势。作为一种生物特征 ,它具有
不受距离影响、非侵犯性、难以伪装、受环境影响小等独特
的优点 ,因而近年来备受关注。国内外的许多知名大学和
研究机构 ,如美国麻省理工学院、中国科学院 自动化研究
所等,都广泛展开了步态识别研究工作口]。步态的独特性
为人的身份识别和认证提供了有效线索,对医疗上的异步
病态、偏瘫等疾病的预防、诊断和康复也可以起到很显著
的辅助作用。而且,在现代化 的体育训练中,也可以通过
步态特征来监测运动员的体能消耗情况、动作准确程度
等,制定科学的训练
。此外,步态在机器人的行走、人
的行为理解等科学研究上也占有举足轻重的地位。
目前,国内外的步态研究都刚刚起步。各个步态研究
领域都需要大量可靠的原始步态数据。现在公开的步态
数据库主要有南安普敦大学的 S0T0N步态数据库、麻省
理工学院的 MIT步态数据库、卡 内基梅隆大学的 CMU
步态数据库,以及中国科学院自动化研究所提供的 NLPR
步态数据库。以上数据库都是基于图像的。然而,动态环
境中拍摄的图像受光照变化、运动目标的影子等多方面因
素的影响,会给基于图像的步态特征提取带来较大困难。
所以,Heikki Ailisto等人[2 提出一种采用加速度传感器
来获取步态数据的新方法 ,避免了动态环境中多方面因素
对捕捉图像的不利影响,降低了数据处理的难度,开辟了
步态数据获取 的新途径;但此方法采用装备有 DAQ12OO
数据采集卡的笔记本电脑来采集数据,不仅成本高,而且
不便于测试对象携带。
步态加速度信号的提取方法成了步态研究的一个瓶
颈;但是,随着各项技术的迅速发展 ,自动化、智能化的采
集步态加速度信号成为了可能。
本文提出了一种基于无线收发芯片 CC1010的步态
加速度信号无线采集的有效实现方法。该方法采用三轴
加速度传感器 MMA7260测量步态的加速度信号,并用
Chipcon公司的内嵌 8051的无线收发芯片 CC1010作为
核心控制器,控制其内置的模数转换器对加速度信号进行
采样 、A/D转换 ,然后在无线发射模块和接收模块间借助
于路由实现了步态加速度信号可靠的无线传输。该采集
系统由 450 mAh的锂电池为其供电,可脱机使用。
1 系统设计原理
首先使用三轴加速度传感器来感测人行走时产生的
三维加速度信号 然后由 A/D转换器对模拟信号进行采
3 结 论
基于 LPC2132微控制器的硬件平 台上实现了 USB
驱动、Bulk—Only传输协议、SCSI命令集,实现了完整的
U盘功能。l誓
参考文献
Eli周立功,等.ARM 嵌入式系统基础教程[M].北京:北京航
空航天大学 出版社 ,2005.
[2]周立功,等.PDIUSBD12 USB固件编程与驱动开发[M].北
京:北京航空航天大学出版社,2003.
[3]PMC Pm25LV010 Datasheets 2005.10.
[4]周立功,张华,等.深入浅出 ARM7——LPC213x/214x(上)
(下)[M].北京 :北京航空航天大学出版社,2006.
⋯ ⋯ 一 ⋯ ,播 擅 =k-田 、 ⋯ ⋯ ⋯ l1⋯ k ~ ⋯ 。 5 7
维普资讯 http://www.cqvip.com