USB与SCSI

USB总线专题(五)——Mass storage 设备相关知识 前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长。 1. 定义 小型计算机系统接口(SCSI,Small Computer System Interface):是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。SCSI 标准定义命令、通信协议以及实体的电气特性(换成 OSI... 阅读详情

USB传输协议中的行为分为四种:控制传输,批量传输,中断传输,同步传输。为什么叫做行为,很简单,因为所有操作USB的协议如:SCSI,HID,UVC协议等等,都是基于这四种行为的。当然,USB底下的每一种协议都有他的特点,但这些特点都离不开上面四种传输,而本人对上面三种协议中,SCSI协议是比较熟悉,HID协议也做过相应的开发,UVC的话,只是大概了解了其中的操作。但总结出来,这些协议的特点在于数据的不同,而不是在于传输方式,因为看多了后你会发现,他还是离不开这四种传输方式的。下面就以我对SCSI协议的理解去解释下USB的操作吧,如有错误,请指点指点。。。。。

 

控制传输:

控制传输在我看来是USB传输的起点,他是使用端点0去进行对应的信息应答。这抽象一点的话就是你插个设备到电脑上,电脑要知道你要使用的是什么协议,接口数目,接口类型是什么,你要使用的是哪些端点,你的端点配置是怎样,你的那个设备名字叫什么玩意等等,端点0对于USB传输是必需的,没有端点0,电脑都不知道自己下一步要做什么了。当USB设备插入后,主机会发一些提取描述符的动作,如GET_DEVICE_DESCRIPTOR,GET_CONFIGURATION_DESCRIPTOR

发了这些信息后,紧接着会给设备分配地址:SET_ADDRESS,后面的操作基本也就那些,会多了一些GET_STRING_DESCRIPTOR,但这里要注意,虽然是同为GET_STRING_DESCRIPTOR,有些设备会因为参数不同会有多个这样的描述符,所以这里得要区分好主机发下来的参数。当然,这里就不对这些东西的每个参数进行一一解释了,查一下相应的资料都可以查看到的。这里要注意的就是GET_CONFIGURATION_DESCRIPTOR,这个是配置描述符,关系到上面所说的,你的设备有几个接口,是什么接口,要使用什么样的端点,端点配置又是怎样。当然,之前看资料跟做项目时也发现,同一配置中可以有多个接口,但同一配置中的多个接口中的端点号是不可以复用的。

 

批量传输:

这个传输方式跟控制传输十分相似,但他更具有灵活性,并且,这里不是使用端点0,所以要有两个不同的端点去负责输入跟输出的控制,当然,如果你的设备只需要输入或者输出,那也是可以的,具体是怎样就要看对应要操作的协议了,这个批量传输就个实在的话,就是发送数据给主机,或者接收主机数据,但这个发送跟接收都是带应答的,至于怎样去应答,这个就不是我们去管的了,硬件会给我们处理掉。批量传输是好一些USB协议中的主要操作部分,如等下要说的SCSI协议,在数据传输方面就是通过批量传输来完成的。

 

中断传输和同步传输:

这个我比较少关注,但根据我的一些了解,中断传输是指在主机会在某个固定的时间内发送一个中断信号下去,从机在收到中断信号后自行去处理自己的动作,如HID协议中的鼠标,键盘等,会通过中断传输来检查当前的状态。同步传输的话就是一个数据传输的过程,但他是没有数据校验的,不管对不对,只管往前发送,这也使得数据传输量比较大,适用于音频,视频类的通信。

 

 

 

SCSI协议:

Scsi协议是U盘,读卡器这些大容量存储所使用的协议,整个协议是工作在批量传输的,分为输入跟输出两个方向,这里会切入到两个概念:CBW,CSW。当这些大批量设备传输完成了后,主机会识别到你当前的设备是大容量设备后,就会根据SCSI的协议来发送CBW包下来,CBW包可理解为主机的一个命令包,我们要去解释这个命令包去进行相应的处理,当数据处理完后,就要回复CSW包,这相当于scsi协议的一个应答包,是对刚才CBW包的处理情况的一个回应。而我们对相应CBW包的处理将会成为我们的首要工作。

CBW包结构如下图:

 

CSW包结构如下图:

 

 

其中dCBWTag和dCSWTag是一样的,他们就相当于判定当前的CBW包跟CSW包是不是一致的,而dCBWSignature和dCSWSignature则是CBW包跟CSW包的包头,由特定的字符组成,dCBWDataTransferLength则是此次数据传输的长度,如果这次数据传输的长度不够长了会怎么办,这个会在CSW包中的dCSWatrResidue中体现出来,dCSWatrResidue表示此次数据传输的数据量还缺多少。bmCBWFlags是这次CBW包所要求的数据传输方向,说白了就是到底是主机发数据下来还是从机发数据上去。bCBWLUN代表当前要操作的逻辑单元,假设你当前要做一个双盘符的大容量设备,那我们CBW下来后我从机必需要知道你是在操作哪一个逻辑单元,而这个就体现在bCBWLUN中,而这个的数目会在大容量设备枚举的最后阶段中一个get max lun的控制传输命令中,由从机回复给主机,跟主机说:老子有多少个逻辑单元,后面的操作你给我好好地区分好。于是在后面的操作中,CBW就会乖乖地给你区分好要操作的逻辑单元是哪个了。CBW中的bCBWCBLength,这个看名字也看得出来了,我就不说了,最后就还有一个CSW包的bCSWStatus,这个是当前CBW包的应答状态,如果应答一切正常,那OK,这里就填0,否则为1.

 

当我们接收到CBW包后,我们要做的事情就是去解释,CBW包的CBWCB就是我们所要提取的信息所在,而CBWCB中,我们所提取的第一个信息是此包要我们做什么,我这里以读命令为例大概说一下:

 

在CBWCB中,我们首先关注的是operation code,这个是决定了我们自己到底要做些什么操作,然后也决定了cbwcb跟后的数据格式是怎样分布的,这里,他的第2到5位是要告诉从机,你要操作的是哪个逻辑地址,7到8位是跟从机说,你要操作的这个逻辑地址长度是多长,结合28h是个读命令,我们不难得出,这是主机要求我们从某一个逻辑地址中读取某一长度的数据。这样,我们跟下来的操作就是通过USB的批量传输,将对应的数据发送到主机上去,然后回CBW包,那这个读操作就算是完成了。

 

当然,在这里还有很多种CBWCB的命令,我们以operation code的不同来讲解其中几种比较重要的命令

00h:这个是test ready命令,在PC上,我们如果枚举正常,信息读写正常,空闲的时候,主机就会发送test ready命令下来,这个命令不用回复跟应答数据,只要回复个CBW即可,那有人就会说,这样有什么用?不急,先看完下面几个命令后再跟你讲解。

03h:这个是REQUEST SENSE命令,如果我们的设备出现CBW应答异常,那主机会发这个命令下来去检查设备的状态,而这个命令是要求我们从机返回当前设备状态的命令。

1ah:这个也是一个状态命令MODE SENSE,但这个跟前面的读取设备状态不一样,这个是判定当前设备是不是处于写保护的状态,如果是的话,那对于写操作,主机都不会发下来的。

12h:InquiryData命令,这个命令对于设备来说是很重要的,为什么这样说,那是因为,你的设备是大容量设备,但大容量设备可是有好几种耶,你是哪一种啊,U盘还是硬盘,或者说是CDROM,这都是要去让主机知晓的,那主机又是如何知晓?他其实就是发送个12h命令下来,然后我们就要回复这个设备的一些基本信息上去,这个命令的重要性不可仅仅如此,到下次我再去讲解。

23h:读取容量命令,这个是跟主机说,你的存储容量是多大,然后主机就会根据这个来进行数据的处理。

25h:作用跟23h基本相同。

28h:读命令,这个上面已作说明,不再解释。

2a:写命令,这个就是跟读是相对的,但结构上与读是一致的,没什么好说。。。。。。

 

重要的命令大概就是上面这几条了,当然,还有一些1bh,1eh等等,这些都是有自己对应的意义,好像你电脑想要让U盘脱盘,那主机也会发相应的命令下来,具体要怎样操作,可以通过Bushound来观察,结合scsi协议去了解,这里不一一解释。

 

到了这里,00h这个命令的重要性就可以很好地讲解了,因为这里有个03H是用来返回设备状态的,如果这个时候我们00h的csw包应答位bCSWStatus为异常,那我们主机一识别到异常后,就会发送03H下来,让我们从机返回一下自己的状态,这样就会让从机去进行一些状态切换,不明白?举个例,一个读卡器,我插上卡跟不插上卡,他的状态是完全不一样的,一个的状态是有操作设备的状态,一个是没操作设备的状态,如果我们刚开始的读卡器是插上设备的,但后机我要换卡,我没把读卡器拔出来,只是把卡拔出来换卡,那这个时候,这个状态的转换就很重要了,所以简单点理解的话,00h就是一直在判定当前的状态是不是正常的。空闲时发送频率会是1S左右一次

 

好了,这次就说这些了,有时间把U盘的管理算法也给写出来给大家了解一下。

 

最后的最后,如有什么不同的意见和看法,请多加指点,共同进步,谢谢^-^

           by:静下来

      2015.1.7
--------------------- 
作者:hamin123 
来源:优快云 
原文:https://blog.youkuaiyun.com/hamin123/article/details/42499825 
版权声明:本文为博主原创文章,转载请附上博文链接!

USB SCSI协议整个过程简介 一.硬件连接 首先,你需要配置你所用芯片的相关USB寄存器值,保证相关功能都已经打开,例如USB PHY 寄存器,USB 中断寄存器等。 Function连接到Host端首先会收到Host端Reset信号,Function进行复位,要进行多次的复位,接着Host会发送Get descriptor(Device)进行首次设备描述符的获取。 二.USB枚举 如果你想确认硬件连接是否正确 阅读详情

相关推荐

USB_SCSI之旅

现在总结一下scsi,scsi协议有很多,所以只总结这次在usb mass storage里面用到的协议,主要包括inquiry,format , read write等等命令。   下面会一个一个总结。   U盘需要处理的命令如下:   1:inquiry:设备的一个描述,告诉host你的设备是什么,名字叫什么,用的什么协议,这里用的SCSI协议—SPC2 2:READ FORMA

射频匠人 4908

SCSI与USB的关系

SCSI与USB的关系 由于BusHound在使用过程中,直接把USB和SCSI混为一谈,相关设计的时候这些东西也经常放在一起来讲,导致稍微缺乏经验的人傻傻分不清楚。因此在这里特别说明一下SCSI和USB分别是什么东西,以及他们是怎么联系在一起的。 一、USB概述 简介 通用串行总线 (Universal Serial Bus,USB) 是一种新兴的并逐渐取代其他接口标准的数据通信方式,由 Intel、Compaq、Digital、IBM、Microsoft、NEC及Northern ..

河豚本来没有毒 1万+

USB协议学习(三)大容量存储设备SCSI协议分析

笔者来简单介绍一下SCSI得协议命令。

张一西的博客 4112

SCSI介绍和SCSI命令承载于各类总线的方式

小型计算机系统接口(SCSI,Small Computer System Interface)是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。虽然名字里面带个接口,但实际上是一种应用层协议。简单理解,就是系统想要跟任何硬件进行数据交互的话,都是通过SCSI协议来进行的,通过这样的分层,在系统不需要去适配各种各样的通信总线协议。

河豚本来没有毒 8916

SCSI 总线和 USB 块设备驱动程序的关系分析

(1)SCSI总线硬件抽象层(HBA)驱动程序:负责将SCSI总线上的硬件抽象成标准的I/O接口,使得操作系统可以通过标准的I/O命令访问SCSI设备。(1)USB总线硬件抽象层(HBA)驱动程序:负责将USB总线上的硬件抽象成标准的I/O接口,使得操作系统可以通过标准的I/O命令访问USB设备。(2)SCSI命令层驱动程序:实现SCSI总线上的各种命令传输协议,负责将操作系统发出的SCSI命令转化为SCSI总线上的数据传输操作。(3)SCSI设备驱动程序:根据SCSI设备的不同特性,实现相应的读写操作。

uote_e的博客 684

深入掌握USB SCSI协议核心原理与实战学习资料

配置描述符描述了设备的一种工作模式,后面跟着接口和端点描述符链。典型UMS设备结构如下:描述符类型数量说明1单一配置,全功能模式1接口0,定义为Mass Storage Class本文还有配套的精品资源,点击获取简介:USB SCSI协议是USB与SCSI协议的融合,广泛应用于外部硬盘、闪存驱动器等大容量存储设备的数据传输。

weixin_42153793的博客 1081

USB Attached SCSI

uas, uasp,bot

hhcs 5479

USB SCSI CDROM开发技术指南

SCSI (Small Computer System Interface) 是一种广泛应用于存储设备的接口协议,它为存储设备的操作提供了一套标准的命令集。SCSI命令集在多种设备中得到了实现,包括硬盘驱动器、磁带驱动器、光盘驱动器等。命令集可以分为两大类:基本命令和扩展命令。基本命令集(BCC,Base Command Code)主要处理与数据传输相关的基本操作,如读取、写入、格式化等。

weixin_42584758的博客 959

usb旅途之SCSI

转载:  http://blog.chinaunix.net/uid-23247212-id-309145.html       usb旅途之SCSI     前面总结了usb mass storage的枚举过程,如果所有枚举正常,那么会进入bulkonly协议定义的数据交流,在这个数据包里面还包含了SCSI的协议 Bulkonly协议usbmassbulk_10.pdf,网上搜搜

LBO4031的专栏 5272

USB SCSI 协议

SCSI协议,描述非常详细,做USB Mass storage device 开发必备资料

InfiniBand(IB)实战指南:从硬件配置到性能优化

本文是一份详尽的InfiniBand实战指南,涵盖从硬件选型、部署到驱动配置、性能优化的全流程。重点解析了InfiniBand作为AI训练与高性能计算(HPC)核心网络的优势,特别是其支持的RDMA技术如何实现微秒级低延迟。文章提供了硬件匹配、NCCL压测、内核参数调优及在PyTorch分布式训练中启用IB的实操步骤,旨在帮助工程师构建和优化高性能计算集群。

mqtt6iot的博客 581

usb与scsi协议

usb协议是一种传说层的协议,定义的是主机和设备之间的数据传说,以及设备的枚举。和sas/sata等是同一个范畴。scsi协议定义的是一种操作存储介质的协议,感觉可以用应用层协议来形容。 usb/sas/sata等都可以用来传说scsi协议。

829

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 985

linux 怎样发scsi命令,Mac系统上给USB设备发送SCSI自定义命令

各位大佬,请问在Mac上给USB发送SCSI命令,是使用哪个结构体?SCSICmd_INQUIRY_StandardDataAll还是SCSI_Sense_Data,又怎么实现发送呢?在Linux下会有一个结构体专门处理这事,代码如下:sg_io_hdr_t p_io_hdr;memset(&p_io_hdr,0x00,sizeof(sg_io_hdr_t));p_io_hdr.inter...

weixin_39707597的博客 462

Windows 11/10系统盘被BitLocker锁了别慌!手把手教你用manage-bde命令找回密钥并解锁

本文详细介绍了当Windows 11/10系统盘被BitLocker锁定后的恢复方法,重点讲解了如何使用manage-bde命令行工具找回密钥并解锁加密驱动器。通过进入Windows恢复环境、诊断锁定状态、提取恢复密钥ID以及执行解锁操作等步骤,帮助用户有效解决BitLocker锁定问题,同时提供了后续防护优化建议和高级故障排除技巧。

weixin_42542669的博客 1461

Allegro中调整差分对等长的步骤介绍

【代码】Allegro中调整差分对等长的步骤介绍。

qq_30882617的博客 3833

别再傻傻分不清了!一文搞懂USB和SCSI到底谁管谁(附BusHound实战分析)

本文深入解析USB和SCSI协议的关系与协作机制,通过BusHound实战分析展示它们在设备通信中的分层作用。USB负责物理传输,而SCSI定义存储设备操作命令集,两者结合形成高效的数据传输方案。文章还提供了典型问题排查指南和进阶技巧,帮助开发者更好地理解和调试设备通信问题。

weixin_30271335的博客 454

Qt/C++编写自定义控件49-飞机仪表盘

一、前言 飞行仪表是测定和表示飞机数据的工具,飞机中必不可少的一部分,飞行员根据飞行仪表表示的数据才能正确地做出判断。一般飞机仪表包括高度表+空速表+垂直速率表+姿态仪+航向指示表+转弯协调表。 这次要绘制的是其中的姿势仪,显示飞机相对于地平线的姿态,看姿态仪,飞行员能判断飞机姿态为偏左偏右,及偏上和偏下。姿态仪作用原理为一高度旋转的陀螺,不论飞机的姿态如何变化,此陀螺的定轴性在空间保持相同,因而...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 7024

IDE、SCSI、SATA、USB、并口和串口

Apple Wang 2528

运放实现阶梯波发生器-总结报告

实验目的: 学习、理解、掌握方波电路、限幅电路积分累加电路、反馈电路 课程条件: 电脑仿真软件Multisim 原理框图和实验思路: 方波电路通过微分电路可以形成正负脉冲,在通过限幅电路后变为单脉冲,最后在积分电路中形成阶梯波。微分电路存在的意义就是为了防止方波频率过大,从而导致在经过限幅电路的方波,在一个周期内将电容的电充满,这样就不会产生阶梯波。如果方波的频率比较小,可以近似认为是正负脉冲,这样就可以跳过微分电路。 ...............

0 1万+

vue3 - 详细实现视频/图片/图文“响应式瀑布流“列表布局示例代码,手机移动端H5或PC端电脑网页根据屏幕宽度自适应响应式瀑布流效果,支持数据列表动态懒加载,仿小红书图文视频div容器的瀑布流方案

vue3,nuxt3,瀑布流,响应式,图片瀑布流,视频瀑布流,图文瀑布流,手机移动端,H5瀑布流,电脑PC网站,手机电脑都能用的瀑布流布局,屏幕自适应,最好用的瀑布流组件插件,滚动分页加载瀑布流列表,瀑布流效果,自适应瀑布流布局详细教程,动态加载数据,懒加载,小红书,图文列表,视频列表,列表容器高度不一致怎么排列,整个屏幕全是宽高不固定的div容器列表怎么办,移动端和pc端双端实现瀑布流,vue3实现图片瀑布流布局以及响应式,滚动条触底懒加载,组件插件,vue3瀑布流 电脑手机都能用,解决卡顿不流畅,对不齐

✅ 精选推荐文章 4340

usb mass storage设备为什么需要注册为SCSI设备

usb storage 驱动利用scsi中间层将usb storage 设备虚拟成scsi 逻辑设备。这样可以方便的使用scsi 驱动的设备IO 接口,以及plugin/plugout 等机制。

chrovery的专栏 944

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

别再傻傻分不清了!一文搞懂USB和SCSI到底谁管传输谁管干活

本文深入解析了USB和SCSI在存储设备中的协同工作原理,揭示了USB作为数据传输通道与SCSI作为命令协议的分工关系。通过类比物流系统中的快递员与货物清单,详细介绍了BOT和UASP协议转换技术,并提供了性能对比和实际开发调试技巧,帮助读者全面理解这两种关键技术的互补性。

weixin_33693070的博客 369

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

USBAttachedSCSI-3UAS-3Revision02资源文件下载介绍:USB与SCSI命令的高效传输桥梁

USBAttachedSCSI-3UAS-3Revision02资源文件下载介绍:USB与SCSI命令的高效传输桥梁 【下载地址】USBAttachedSCSI-3UAS-3Revision02资源文件下载介绍 USB Attached SCSI - 3 (UAS-3) Revision 02规范详细定义了通过USB硬件...

gitblog_06768的博客 888

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: KEIL5生成bin文件
下一篇: 用单片机的RAM虚拟U盘(文件系统:Fat16)
oshan2012
博客等级 码龄15年 300粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值