USB Mass Storage大容量存储 The Thirteen Class章节的理解
http://blog.csdn.net/xgbing/article/details/7002558
USB Mass Storage 6.7 The Thirteen Class章节的理解
Case(1), case(6), case(12)状态下是正常的数据传输,被称为“The thin diagonal”。其它的状态是协议外的内容,是一些判断。
6.7.1 主机期望发起一次无数据传输的命令
CBW包中的dCBWDataTransferLength字段=0,Direction位不考虑。
主机做的工作:
(1) 发送一个CBW
(2) 偿试接收CSW
(3) 如果在STALL状态下接收到CSW:先清空BULK—IN端口数据,再接收CSW
(4) 判断CSW,如果“bCSWStatus = 00h or 01h, and the dCSWDataResidue is 0.”,它是CASE(1),
其它是一个相位错误,需要主机发送一个复位来清除错误。
设备做的工作:
(1) 等待接收一个CBW
(2) CBW有效,则执行命令
(3) 分析包,如果是CASE(1),说明无数据传输,设置bCSWStatus to 00h or 01h.,bCSWStatus to 00h or 01h.。
如果是CASE(2)或CASE(3),设置bCSWStatus to 02h.
(4) 发送CSW。
6.7.2 主机期望从设备接收数据
这种情况下CBW中的dCBWDataTransferLength为非0并且Direction为1(Data-In)。
主机做的工作:
(1) 发送CBW
(2) 偿试接收数据
(3) 如果在STALL状态下接收到数据:1)主将接收数据2)主机将清空BULK_IN端口
(4) 偿试接收CSW
(5) 如果在STALL状态下接收到CSW:1)主机将清空bulk_in端口2)主机将偿试再次接收CSW。
(6) 分析CSW,如果是CASE(4),CASE(5),CASE(6), bCSWStatus = 00h or 01h,
接收数据的大小应等于dCBWDataTransferLength – dCSWDataResidue。
如果是CASE(7),CASE(8),且bCSWStatus = 02h,主机需要发送复位来清除错误。
设备做的工作:
(1) 等待并接收CBW
(2) CBW有效则执行命令。如果是CASE(6),发送dCBWDataTransferLength字节数据给主机,
设置bCSWStatus to 00h or 01h,dCSWDataResidue to zero。
CASE(4),CASE(5):说明设备发送的数据长度比主机要求的数据长度小。有两种处理方法:
1)发送实际数据后再发送填充数据使用总长度等于dCBWDataTransferLength,设置dCSWDataResidue=dCBWDataTransferLength;
2)发送实际数据长度,设置dCSWDataResidue=dCBWDataTransferLength-发送数据的长度。
CASE(7),CASE(8):说明设备要发送的数据超出主机要求的数据长度。两种处理:
1)发送主机要求的数据长度,(下一句不知怎么翻译)
2)发送设备的数据长度(超出主机要求的数据长度)。
这两种处理后均设置bulk_in端口为STALL状态,并设置CSW包相位错误(bCSWStatus to 02h)。
(3) 发送CSW。
6.7.3 主机期望发送数据到设备
这种情况下CBW中的dCBWDataTransferLength为非0并且Direction为0(Data-In)。
主机做的工作:
(1) 发送CBW
(2) 发送数据到设备,在数据传输结尾,主机将发送一个短包。
(3) 在STALL状态下发送数据,主机将清空bulk_out端口
(4) 偿试接收CSW
(5) 在STALL状态下接收CSW,主机清空bulk_in端口,再偿试接收CSW
(6) CSW有效,如果是CASE(9),CASE(11),CASE(12),设备实际接收的数据等于
dCBWDataTransferLength – dCSWDataResidue。
如果是CASE(9),(13),主机需要发送复位来清除错误。
设备做的工作
(1) 接收CBW
(2) CBW有效:
如果是CASE(9),CASE(11),CASE(12),有可能设备需要的数据小于主机发送的长度:
1) 设备接收它需要的数据长度,并设置dCSWDataResidue = dCBWDataTransferLength – 实际接收数据的长度。
之后设置bulk_out端口为STALL状态。
2) 设备接收主机发送的所有数据。
3) 发送CSW。
The Thirteen Cases
There are basically three actions that should be performed depending on the case:
• STALL the Bulk-IN endpoint
• STALL the Bulk-OUT endpoint
• Report a Phase Error in the CSW
The table below lists all cases along with the actions which must be taken after the command,
including the correct length/direction of the transfer.
The following notation is used to characterize host and device expectations:
转载于:https://www.cnblogs.com/shangdawei/p/3151185.html
USB Mass Storage大容量存储 The Thirteen Class章节的理解相关推荐
- Linux下大容量存储,第 2 章 USB Mass Storage大容量存储的基本知识
第 2 章 USB Mass Storage大容量存储的基本知识 摘要 USB Mass Storage所对应的层次和要实现哪些东西: 图 2.1. USB Mass Storage Framewor ...
- 如何实现Linux下的U盘(USB Mass Storage)驱动
如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write LinuxUSB MSC (Mass Storage Class) Driver Crif ...
- ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)
ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能) 之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实 ...
- 基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍
USB Mass Storage Class Bulk-Only Transport Microsoft公司至Windows98后,USB主机 都支持Bulk-Only标准,所以现在的大容量存储类设备 ...
- USB Mass Storage协议
简介 USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.BulkOut和Interrupt端点.该设备类又包含6个 ...
- usb mass storage设备枚举过程
8月份从PC开发岗位换到底层嵌入式驱动开发来了.接到的第二个活,是在高通8650平台上实现驻留支持SCSI指令.8650平台是高通推出的EVDO RevB的双核平台,和之前6085相比性能更强,软件结 ...
- USB Mass Storage Class
编辑博客时,回车的意思是切换段落,shift+回车才是换行. SCSI Interface Controller: AMD am5380 1 U盘量产工具 - 主控芯片私有的SCSI命令 ChipEa ...
- USB Mass Storage
参见:USB Mass StorageClass Bulk-Only Transport 1 规范概述和范围 前提条件:熟悉USB协议规范和USB海量存储类规范概述. 本规范只描述块传输,也就是仅通过 ...
- USB mass storage驱动分析
1. USB驱动代码在/drivers/usb/gadget下,有文件:android.c,其他驱动文件f_adb.c,f_mass_storage.c:其中android.c 依赖于f_adb.c ...
最新文章
- 开发一个大型后台管理系统,应该用前后端分离的技术方案吗?
- 二周第三次课(3月28日)
- 还在懵懂状态?给处于初/中级阶段的数据分析师的两三点建议
- JZOJ 3813. 【NOIP2014模拟9.7】我要的幸福
- 服务器iis自动停止,IIS应用程序池老是自动停止
- mysql blgg__MySQL_exceptions.ProgrammingError:(2014,“命令不同步;您现在无法运行此命令”)?...
- 计算机组成原理 试讲,常州信息职业技术学院-试讲ppt-计算机组成原理-信息表示.ppt...
- rust模组服如何切换标准服_资讯DNF手游将于3月20日发放10000个体验服资格(附申请方法)...
- docker快速搭建数据库测试环境
- oracle中插入一个blob数据
- PHP大转盘中奖概率算法实例
- 【问题记录】mysql设置任意ip访问
- 【编译原理】理解BNF
- Scratch-贪吃蛇小游戏
- vector详解以及一些问题(C++)
- 安利几个实用且有趣的Excel实用技巧给你
- C++笔记--Linux网络编程(15-0)-socket(供自查,文档说明)
- 讯飞智能录音笔SR502:支持OCR识别功能的职场礼物
- 计算机主机电源故障分析检测维修,电源故障:台式机电脑电源故障检修
- stream之group分组
热门文章
- C/C++里面的左移和右移
- 用Log Explorer恢复数据的基本操作
- Python之isinstance
- L3-023 计算图 (30 分)--PAT 团体程序设计天梯赛 GPLT
- CCCC-GPLT L1-038. 新世界 团体程序设计天梯赛
- 【软件测试】边界测试中所选择的输入测试数据一定是有效数据(错)
- 未名湖边的烦恼-蓝桥杯算法训练题-递推/递归
- 1048. 数字加密(20)-浙大PAT乙级真题
- 蓝桥杯 BASIC-18 基础练习 矩形面积交
- flash传值给javascript,并在html页面输出,javascript向flash swf文件传递参数值注意细节...