本文PDF文档下载
接着学习Microchip的AN。相关文章的原文在上一篇博客中。
MICROCHIP AN1003 :USB Mass storage Device Using a PIC MCU
通信概述
本章对SD卡和PC直接的通信进行概述。图4描述了整个系统的框图。
设备驱动被称为“任何负责硬件设备与CPU接口的代码”。USB通信中采用分层的驱动模型,每一层负责一部分的通信处理。在本应用中,MSD被枚举为支持BOT的Mass Storage Device。因此,主机使用USB 存储设备驱动(usbstor.sys)作为功能驱动。主机还调用Disk.sys,PartMgr.sys和VolSnap.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-2(SPC-2)。在接口描述符中的bInterfaceProtocol=0x50,表示支出BOT协议。如图3所示,BOT传输是以CBW为起始的。设备成功接收了CBW应该有对应的响应。如果在命令传输阶段,主机发现了Bulk-Out端点有STALL, 主机会尝试传输由dCBWDataTransferLength和Direction位定义的剩下的数据字节。设备会通过Bulk-In端点向主机发送CSW。
本节我们主要说明MSD支持的SCSI命令。读者可以参考SCSI Primary Commands-3(SPC-3)和SCSI Primary Commands-2(SPC-2)规范。CBWCB的第一个字节总是操作码(Operation Code或opcode)
<!--[if !supportLists]-->● <!--[endif]-->INQUIRY(Opcode 12h)
INQUIRY命令请求SCSI目标设备向主机发送逻辑单元(logical unit)信息。SPC-3规定即使设备服务器还在忙于其它命令也要回复INQUIRY数据。而且,标准INQUIRY数据应该是无任何媒介访问延迟的。标准INQUIRY数据最少为36个字节。
<!--[if !supportLists]-->● <!--[endif]-->READ CAPACITY(Opcode 25h)
READ CAPACITY命令请求设备的容量和Data-In缓冲的媒体格式。READ CAPACITY命令的响应由4字节的Logical Block Address和4字节的块长度组成。返回的Logical Block Address(LBA)是之间访问块设备的最后的逻辑块的LBA。如果逻辑块的数量超过了返回的LBA规定的最大值,设备应将返回的LBA设为FFFFFFFFh。
SCSI命令部分待续......
文章评论(0条评论)
登录后参与讨论