当前位置: 首页 > news >正文

USB MSC SCCI

🔍 ​数据包完整内容

0000   1b 00 10 09 22 8b 8b 9b ff ff 00 00 00 00 09 00   
0010   00 02 00 02 00 02 03 1f 00 00 00 55 53 42 43 10   
0020   09 22 8b 00 02 00 00 80 00 0a 28 00 00 00 00 00   
0030   00 00 01 00 00 00 00 00 00 00

⚙️ ​一、READ(10) 命令结构解析

READ(10) 是 SCSI 协议中的标准读命令,用于请求存储设备(如 U 盘)返回指定扇区的数据。其结构如下:

字段偏移值 (十六进制)​含义
操作码 (Opcode)​0x2A28READ(10) 命令标识符 

9

LBA 地址0x2B-0x2E00 00 00 00起始扇区号(LBA 0,即 MBR)
传输长度0x2F-0x3000 01读取 1 个扇区(512 字节)
控制码0x3100保留字段

✅ ​关键点​:

  • 0x28 是 READ(10) 的固定操作码,明确标识此命令为读取请求 。
  • ​LBA 地址 00 00 00 00 表示从磁盘的第一个扇区(MBR 位置)读取数据 。
  • ​传输长度 00 01 表示读取 1 个扇区(即 512 字节的 MBR 数据)。

🔧 ​二、数据包上下文分析

此数据包是 ​USB Bulk-Only Transport (BOT) 协议中的 CBW(Command Block Wrapper)结构,用于封装 SCSI 命令:

  1. CBW 签名​:
    • 偏移 0x1C-0x1F55 53 42 43(ASCII "USBC"),标识 CBW 结构 。
  2. 数据方向​:
    • 偏移 0x2480 表示数据从设备传输到主机(即读操作)。
  3. SCSI 命令长度​:
    • 偏移 0x280A 表示后续 SCSI 命令长度为 10 字节(即 READ(10))

      9


📂 ​三、MBR 读取机制

  1. MBR 位置​:
    存储设备的第一个扇区(LBA 0),包含引导代码和分区表 。
  2. 主机请求流程​:
    • 主机通过 Bulk-OUT 端点发送此 CBW 包,内含 READ(10) 命令。
    • 设备通过 Bulk-IN 端点返回 MBR 的 512 字节数据 。
  3. MBR 结构​:
    • 前 446 字节:引导代码。
    • 中间 64 字节:分区表(4 个分区条目)。
    • 最后 2 字节:结束标志 0x55AA 。

💎 ​总结

  1. 数据包性质​:
    ✅ 此包是 ​READ(10) 命令的 CBW 封装,用于请求读取 U 盘的 MBR 数据。
  2. 核心字段验证​:
    • 操作码 0x28、LBA=0、长度=1 扇区,符合 MBR 读取标准 。
  3. 后续响应​:
    设备需返回 512 字节的 MBR 数据,包含引导代码、分区表及结束标志 0x55AA 。

SCSI命令分类与功能表

命令类型操作码 (Hex)​命令名称功能描述适用标准
读写命令0x08READ(6)读取指定逻辑块地址(LBA)的6字节寻址数据块SBC-3
0x28READ(10)读取10字节寻址数据块(支持更大容量设备)SBC-3
0x88READ(16)扩展至16字节寻址,适用于超大容量存储设备SBC-4
0x0AWRITE(6)写入6字节寻址数据块SBC-3
0x2AWRITE(10)写入10字节寻址数据块SBC-3
控制命令0x1BSTART/STOP UNIT启动或停止设备(如光驱托盘弹出/关闭)SPC-4
0x35SYNCHRONIZE CACHE将缓存数据强制写入物理介质,确保数据持久化SBC-3
0x04FORMAT UNIT低级格式化设备(清除所有数据并重置参数)SBC-3
查询命令0x12INQUIRY获取设备基本信息(厂商、型号、固件版本等)SPC-4
0x25READ CAPACITY(10)查询设备容量(总块数和块大小)SBC-3
0x9EREAD CAPACITY(16)扩展容量查询,支持超过2TB的设备SBC-4
诊断与测试0x00TEST UNIT READY检测设备是否就绪(常用于设备状态检查)SPC-4
0x1DSEND DIAGNOSTIC执行设备自检或返回诊断信息SPC-4
模式管理0x1AMODE SENSE(6)读取设备工作模式参数(如缓存设置、错误恢复策略)SPC-4
0x5AMODE SELECT(6)设置设备工作模式参数SPC-4
扩展功能0x9FREPORT LUNS报告逻辑单元号(LUN)列表(用于多LUN设备管理)SPC-4
0x85PERSISTENT RESERVE管理设备访问权限(如集群环境中的共享存储控制)SPC-4
流媒体设备0x0BERASE(6)擦除磁带设备上的数据SSC-3
0x8BERASE(16)扩展擦除命令,支持长磁带设备SSC-3
光存储设备0xA3READ CD读取光盘内容(如CD/DVD/蓝光)MMC-6
0x2BSEEK(10)定位光驱读写头到指定位置MMC-6

关键说明

  1. 命令版本差异

    • READ/WRITE命令的变体(如6/10/16字节)主要区别在寻址范围。例如,READ(6)仅支持32位LBA,而READ(16)支持128位LBA。
    • 模式管理命令​(MODE SENSE/SELECT)用于调整设备缓存策略、错误恢复机制等高级参数,直接影响性能与可靠性。
  2. 专用设备命令

    • MMC标准​(MultiMedia Commands)定义了光存储设备的操作,如READ CDSEEK
    • SSC标准​(SCSI Stream Commands)用于磁带驱动器,提供流式数据读写与擦除功能。
  3. 扩展应用场景

    • PERSISTENT RESERVE用于集群存储环境,防止多主机同时写入导致数据损坏。
    • REPORT LUNS支持多路径存储设备(如SAN)的逻辑单元管理。

完整命令参考

由于SCSI命令集包含数百条指令(涵盖SPC、SBC、MMC、SSC等子协议),上述表格仅列出核心命令。若需完整列表,可参考以下资源:

  • SCSI Primary Commands (SPC-5)​​:定义通用控制与查询命令。
  • SCSI Block Commands (SBC-4)​​:块设备(如硬盘、SSD)的读写与格式化操作。
  • SCSI Stream Commands (SSC-3)​​:磁带驱动器的流式数据管理。
http://www.xdnf.cn/news/728569.html

相关文章:

  • 力扣HOT100之动态规划:322. 零钱兑换
  • web自动化-Selenium、Playwright、Robot Framework等自动化框架使用场景优劣对比
  • 拉普拉斯噪声
  • eBest智能价格引擎系统 助力屈臣氏饮料落地「价格大脑」+「智慧通路」数字基建​
  • 医疗IT系统绝缘监测及故障定位,绝缘监测技术在医院关键区域的应用
  • t015-预报名管理系统设计与实现 【含源码!!!】
  • 【请关注】各类数据库优化,抓大重点整改,快速优化空间mysql,Oracle,Neo4j等
  • Python打卡第40天
  • 开发效率提升小技巧:快速提取图标资源的解决方案
  • Unity 中实现首尾无限循环的 ListView
  • 设计模式之简单工厂模式
  • 前端面试准备-3
  • openssl-aes-ctr使用openmp加速
  • Java大师成长计划之第35天:未来展望与个人总结
  • shell编程笔记
  • 预处理深入详解:预定义符号、宏、命名约定、命令行定义、条件编译、头文件的包含
  • 【大模型】情绪对话模型项目研发
  • C++继承与构造函数调用详解
  • flash写失败分析
  • Linux系统编程收尾(35)
  • 【C/C++】cmake实现Release版本禁用调试接口技巧
  • [定昌linux开发板]启用用户唯一性限制
  • Android全局网络监控最佳实践(Kotlin实现)
  • 从Java的Jvm的角度解释一下为什么String不可变?
  • Spring Boot3.4.1 集成redis
  • 自动过滤:用 AutoFilterer 实现高性能动态查询
  • 怎么从一台电脑拷贝已安装的所有python第三方库到另一台
  • 分库分表的常见策略
  • Arduino学习-跑马灯
  • day 26 函数专题