原创 USB Mass Storage学习笔记(3)

2008-6-30 16:59 8580 12 9 分类: 通信

本文PDF文档下载


接着学习Microchip的AN。相关文章的原文在上一篇博客中。




MICROCHIP AN1003 USB Mass storage Device Using a PIC MCU



通信概述


本章对SD卡和PC直接的通信进行概述。图4描述了整个系统的框图。

点击看大图

设备驱动被称为“任何负责硬件设备与CPU接口的代码”。USB通信中采用分层的驱动模型,每一层负责一部分的通信处理。在本应用中,MSD被枚举为支持BOTMass Storage Device。因此,主机使用USB 存储设备驱动(usbstor.sys)作为功能驱动。主机还调用Disk.sysPartMgr.sysVolSnap.sys作为应用程序与设备驱动间的过滤器驱动。Root Hub驱动(usbhub.sys)管理端口初始化和设备驱动与总线类驱动。总线类驱动(usbd.sys)管理总线电源,枚举,及Root Hub驱动与主机控制驱动之间的USB传输和通信。


MSD这端,PIC<?xml:namespace prefix = st1 />18F4550的串行接口引擎(SIE)负责底层USB通信。USB数据在MCU核与SIE之间移动是通过称为USB RAM的内存空间。PIC18F4550提供配置和控制16个双向端点的能力。在本应用中,仅使用了两个双向端点。端点0对于所有的USB设备都是必须的。Mass storage 硬盘将端点1配置成Bulk In,Out端点用于Bulk-Only传输。它也与SD卡通信。


frm注:以上部分对USB的驱动部分的分层功能的说明很有价值)


<?xml:namespace prefix = o />

 


SCSI 命令


frm注:MSD设备必须要支持以下的SCSI命令)


在成功枚举了目标USB设备后,主机根据枚举过程中接口描述符中的bInterfaceSubClass规定初始化命令。


USB MSD应用规定bInterfaceSubClass=06h,表示本设备将支出SCSI Primary Command-2SPC-2)。在接口描述符中的bInterfaceProtocol=0x50,表示支出BOT协议。如图3所示,BOT传输是以CBW为起始的。设备成功接收了CBW应该有对应的响应。如果在命令传输阶段,主机发现了Bulk-Out端点有STALL, 主机会尝试传输由dCBWDataTransferLengthDirection位定义的剩下的数据字节。设备会通过Bulk-In端点向主机发送CSW


本节我们主要说明MSD支持的SCSI命令。读者可以参考SCSI Primary Commands-3SPC-3)和SCSI Primary Commands-2(SPC-2)规范。CBWCB的第一个字节总是操作码(Operation Codeopcode


<!--[if !supportLists]-->     <!--[endif]-->INQUIRYOpcode 12h


INQUIRY命令请求SCSI目标设备向主机发送逻辑单元(logical unit)信息。SPC-3规定即使设备服务器还在忙于其它命令也要回复INQUIRY数据。而且,标准INQUIRY数据应该是无任何媒介访问延迟的。标准INQUIRY数据最少为36个字节。


<!--[if !supportLists]-->     <!--[endif]-->READ CAPACITYOpcode 25h


READ CAPACITY命令请求设备的容量和Data-In缓冲的媒体格式。READ CAPACITY命令的响应由4字节的Logical Block Address4字节的块长度组成。返回的Logical Block Address(LBA)是之间访问块设备的最后的逻辑块的LBA。如果逻辑块的数量超过了返回的LBA规定的最大值,设备应将返回的LBA设为FFFFFFFFh

SCSI命令部分待续......



PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
12
关闭 站长推荐上一条 /3 下一条