这是我在以前做的一个笔记。它的功能是实现一个U盘。记得当时花了很多时间,但现在翻出来看已经有些不记得了。现在把它共享出来,我想也许会对在做这方面刚入门的朋友有些帮助。
作者的联系方式:
E-mail: gbing163@163.com
BLOG:http://blog.youkuaiyun.com/xgbing
优快云下载:http://download.youkuaiyun.com/detail/xgbing/6926225
索引
作者前言 ..........................................................................................................................................1
索引 ..................................................................................................................................................1
at91lib\usb\common\core..................................................................................................................3
at91lib\usb\ device\core ....................................................................................................................3
初始化 ..............................................................................................................................................3
USB 标准请求..................................................................................................................................6
主机发送到设备的第一个数据...............................................................................................6
STALL 包 .........................................................................................................................................7
USBDDriver.c 代码阅读..................................................................................................................8
SetConfiguration(USBDDriver *pDriver, unsigned char cfgnum)...........................................8
GetConfiguration ......................................................................................................................8
GetDeviceStatus........................................................................................................................8
GetEndpointStatus ....................................................................................................................8
GetDescriptor............................................................................................................................9
SetInterface ...............................................................................................................................9
GetInterface ..............................................................................................................................9
USBDDriver_Initialize .............................................................................................................9
USBDDriver_RequestHandler..................................................................................................9
MSDDStateMachine.c 代码阅读 ...................................................................................................10
Struct MSDDriver...................................................................................................................10
MSDD_PreProcessCommand(MSDDriver *pMsdDriver)..................................................... 11
MSDD_StateMachine .............................................................................................................21
MSDLun.h/MSDLun.c ...................................................................................................................24
Struct MSDLun.......................................................................................................................24
LUN_Read..............................................................................................................................25
LUN_Write .............................................................................................................................25
LUN_Init.................................................................................................................................25
SBCMethod.c 代码阅读.................................................................................................................26
SBCLunIsReady 和 SBCLunCanBeWritten...........................................................................26
SBC_Write10..........................................................................................................................28
USBD_UDP.C 硬件驱动层(端点操作)...................................................................................38
(1)硬件层的状态 ..............................................................................................................38
(2)void USBD_Init(void) ..................................................................................................39
(3)中断服务 UDPD_IrqHandler .......................................................................................39
(4)进入端点中断处理 UDP_EndpointHandler ................................................................43
(A) 写数据的过程.........................................................................................................47
(B)读数据的过程..............................................................................................................50
USB Mass Stroage 传输可能发生的四种错误 .............................................................................53
SCSI 命令 .......................................................................................................................................53
词语解释 ................................................................................................................................55
INQUIRY................................................................................................................................55
ModeSense..............................................................................................................................57
PREVENT-ALLOW MEDIUM REMOVAL .........................................................................57
ReadCapacity ..........................................................................................................................58
Read10 ....................................................................................................................................59
Write10 ...................................................................................................................................59
SCSI_TEST_UNIT_READY .................................................................................................60
USB Mass Storage Class – UFI Command Specification 1.0 第 5 节翻译...................................60
AT91 使用的 Sense Data........................................................................................................61
总结 ................................................................................................................................................62
附 A ...............................................................................................................................................63
CBW 是否总是由主机发往设备?...............................................................................63
CBW 中 SCSI 的命令大小是否都小于等于 16 个字节?如果大于的话,那命令就要
分包传输。 ....................................................................................................................63
控制传输总是以一个空包结束吗?.....................................................................................63