基于LPC2132的U盘软硬件系统设计
时间:07-24
来源:互联网
点击:
2.2 Mass Storage类协议的实现
完整的Mass Storage类协议需要实现如下几部分:在枚举时,提供Mass Storage类协议描述符;实现Bulk-Only批量传输协议;实现SCSI命令集。
2.2.1 Mass Storage类协议描述符
USB采用设备类的方式对设备进行管理。要让主机识别设备,设备就必须提供正确的描述符:
◇设备描述符;
◇配置描述符;
◇接口捕述符;
◇端点描述符。
2.2.2 BuIk-Only批量传输协议实现
Bulk-Only协议包括两部分:类特定请求命令和Bulk-Only传输。
(1) 类特定请求命令
① 批量传输的大容量存储器复位。要发送批量传输的大容量存储器复位请求,主机将在默认管道发送一个设备请求:
◇bmRequestType——类、接口、主机到设备;
◇bRequest字段设置为255(FFh);
◇wValue字段设置为0;
◇wIndex字段设置为接口编号;
◇wLength字段设置为0。
批量传输的大容量存储器复位请求如下:
② 获取最大逻辑单元号(专用类请求)。Get MaxLUN设备请求用于确定设备支持的逻辑单元编号。设备的逻辑单元编号可以从LUN为0到LUN的最大值15(Fh)。
要发送Get Max LUN设备请求,主机应在以下默认管道发送一个设备请求:
◇bmRequestType——类、接口、设备到主机;
◇bRequest范围设置为254(FEh);
◇wValue字段设置为0;
◇wIndex字段设置为接口编号;
◇wLength字段设置为1。
获得最大逻辑单元字如下:
设备应返回1字节包含设备支持的最大逻辑单元数。例如,如果设备支持4个LUN,则LUN的编号应从0~3,则返回值为3。如果设备没有相关的LUN,则返回值为0。主机不应向一个不存在的LUN发送命令块包(CBW)。
不支持多LUN的设备会返回STALL。
(2) Bulk-Only传输
Bulk-Only传输协议没有使用中断和控制端点,仅使用Bulk批量端点来进行命令块、数据和命令块状态的传输。控制端点(默认)管道仅用来请求批量端点上的STALL停止的状态和执行类特定请求命令。
Bulk-Only传输的流程如图4所示。
2.2.3 SCSI命令集实现
SCSI命令集是SCSI设备通用命令集。SCSI有3种字长的命令:6字节、10字节和12字节。Microsoft Win-dows环境下支持12字节长的命令。图5给出了通用的UFI命令块的格式。请注意,这些字节就是CBW封包中CBWCB字段的内容。
对不同的命令只需根据SCSI命令集白皮书作出适当的回应。Pm25LV010的最小擦除单位为扇区(4 KB),故在程序中定义一个4 KB的缓冲区Cache_STRUC Flash-Cache,把每次收到的数据放入缓冲区中,到缓冲区满数据接收完毕时再将其写入Flash存储器中,流程如图6所示。
2.3 Flash存储器的读写控制
Flash存储器读写程序由SPI控制和Pm25LV010控制两部分组成。
Pm25LV010 Flash存储器采用的是SPI串行接口,其SPI有两种工作模式——模式0和模式3。SPI.c完成SPI底层操作,给Pm25LV010控制程序提供一个读写1字节数据函数。该函数使用SPI模式0。
Pm25LV010控制程序完成Pm25LV010器件的所有操作,其向高层提供的函数及功能如表2所列。
Pm25LV010的最小擦除单位是扇区(每扇区4 KB),在改写扇区内任意一字节数据时都需要将该扇区擦除。针对这种情况,在程序中定义了一个4 KB大小的缓冲区,当上层调用函数WriteToFlash()向Flash写数据时,并不直接写入Flash,而是先写到数据缓冲区,其流程如图7所示。
3 结 论
基于LPC2132微控制器的硬件平台上实现了USB驱动、Bulk-Only传输协议、SCSI命令集,实现了完整的U盘功能。
完整的Mass Storage类协议需要实现如下几部分:在枚举时,提供Mass Storage类协议描述符;实现Bulk-Only批量传输协议;实现SCSI命令集。
2.2.1 Mass Storage类协议描述符
USB采用设备类的方式对设备进行管理。要让主机识别设备,设备就必须提供正确的描述符:
◇设备描述符;
◇配置描述符;
◇接口捕述符;
◇端点描述符。
2.2.2 BuIk-Only批量传输协议实现
Bulk-Only协议包括两部分:类特定请求命令和Bulk-Only传输。
(1) 类特定请求命令
① 批量传输的大容量存储器复位。要发送批量传输的大容量存储器复位请求,主机将在默认管道发送一个设备请求:
◇bmRequestType——类、接口、主机到设备;
◇bRequest字段设置为255(FFh);
◇wValue字段设置为0;
◇wIndex字段设置为接口编号;
◇wLength字段设置为0。
批量传输的大容量存储器复位请求如下:
② 获取最大逻辑单元号(专用类请求)。Get MaxLUN设备请求用于确定设备支持的逻辑单元编号。设备的逻辑单元编号可以从LUN为0到LUN的最大值15(Fh)。
要发送Get Max LUN设备请求,主机应在以下默认管道发送一个设备请求:
◇bmRequestType——类、接口、设备到主机;
◇bRequest范围设置为254(FEh);
◇wValue字段设置为0;
◇wIndex字段设置为接口编号;
◇wLength字段设置为1。
获得最大逻辑单元字如下:
设备应返回1字节包含设备支持的最大逻辑单元数。例如,如果设备支持4个LUN,则LUN的编号应从0~3,则返回值为3。如果设备没有相关的LUN,则返回值为0。主机不应向一个不存在的LUN发送命令块包(CBW)。
不支持多LUN的设备会返回STALL。
(2) Bulk-Only传输
Bulk-Only传输协议没有使用中断和控制端点,仅使用Bulk批量端点来进行命令块、数据和命令块状态的传输。控制端点(默认)管道仅用来请求批量端点上的STALL停止的状态和执行类特定请求命令。
Bulk-Only传输的流程如图4所示。
2.2.3 SCSI命令集实现
SCSI命令集是SCSI设备通用命令集。SCSI有3种字长的命令:6字节、10字节和12字节。Microsoft Win-dows环境下支持12字节长的命令。图5给出了通用的UFI命令块的格式。请注意,这些字节就是CBW封包中CBWCB字段的内容。
对不同的命令只需根据SCSI命令集白皮书作出适当的回应。Pm25LV010的最小擦除单位为扇区(4 KB),故在程序中定义一个4 KB的缓冲区Cache_STRUC Flash-Cache,把每次收到的数据放入缓冲区中,到缓冲区满数据接收完毕时再将其写入Flash存储器中,流程如图6所示。
2.3 Flash存储器的读写控制
Flash存储器读写程序由SPI控制和Pm25LV010控制两部分组成。
Pm25LV010 Flash存储器采用的是SPI串行接口,其SPI有两种工作模式——模式0和模式3。SPI.c完成SPI底层操作,给Pm25LV010控制程序提供一个读写1字节数据函数。该函数使用SPI模式0。
Pm25LV010控制程序完成Pm25LV010器件的所有操作,其向高层提供的函数及功能如表2所列。
Pm25LV010的最小擦除单位是扇区(每扇区4 KB),在改写扇区内任意一字节数据时都需要将该扇区擦除。针对这种情况,在程序中定义了一个4 KB大小的缓冲区,当上层调用函数WriteToFlash()向Flash写数据时,并不直接写入Flash,而是先写到数据缓冲区,其流程如图7所示。
3 结 论
基于LPC2132微控制器的硬件平台上实现了USB驱动、Bulk-Only传输协议、SCSI命令集,实现了完整的U盘功能。
USB MCU ARM 仿真 电源管理 总线 电压 电路 相关文章:
- 基于USB的通用无线传输接口设计(09-20)
- 索尼VRD-MC1 DVD刻录机解析(09-24)
- USB On-The-Go 技术概述(09-16)
- 谈关于非编网络的管理及其维护(下)(10-02)
- 打破瓶颈,以技术驱动液晶电视升级换代(11-26)
- 高速USB OTG--便携设备绝佳的互连解决方案(11-18)