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

USB MSC

主机(如电脑)识别USB MSC(Mass Storage Class)设备中的文件,本质上是通过多层协议协作实现的,涉及USB枚举、SCSI命令传输和文件系统解析三个核心环节。以下是详细机制:


🔍 ​一、USB枚举:设备身份识别(主机→设备)​

当USB MSC设备(如U盘)插入主机时,主机通过USB协议进行设备枚举:

  1. 设备描述符获取
    • 主机请求设备描述符(Device Descriptor),确认设备类型(bDeviceClass=0x00,接口类为MSC)。
    • 关键字段:bInterfaceClass=0x08(MSC类)、bInterfaceSubClass=0x06(SCSI指令集)、bInterfaceProtocol=0x50(Bulk-Only传输协议)。
  2. 配置与端点激活
    • 主机获取配置描述符,分配端点(Bulk-In/Bulk-Out端点用于数据传输),完成USB通信通道建立。

✅ ​此阶段目标​:主机确认设备是USB MSC设备,并准备好SCSI命令传输通道。


⚙️ ​二、SCSI命令交互:读取存储结构(主机→设备)​

主机通过SCSI命令集访问存储介质结构,核心命令包括:

SCSI命令操作码功能返回信息
INQUIRY0x12查询设备基本信息(厂商、产品型号)设备属性、兼容性
READ CAPACITY0x25获取存储容量(总扇区数、扇区大小)容量参数(如512字节/扇区)
REQUEST SENSE0x03获取错误状态(用于异常处理)错误代码
READ(10)​0x28读取指定逻辑块地址(LBA)的数据扇区原始数据
关键步骤​:
  1. 读取MBR(主引导记录)​
    • 主机发送 READ(10) 命令,LBA=0,读取磁盘第一个扇区(512字节)。
    • MBR包含分区表​(64字节),记录分区起始LBA、大小及文件系统类型(如FAT32/NTFS)。
  2. 读取DBR(DOS引导记录)​
    • 根据MBR的分区表,主机定位到分区起始扇区(如LBA=2048),再次发送 READ(10) 读取DBR。
    • DBR的BPB(BIOS参数块)​​ 包含文件系统关键参数:
      • bpbResSectors:保留扇区数(FAT表之前的扇区数)
      • bpbFATsecs:每个FAT表大小(扇区数)
      • bpbRootEntCnt:根目录条目数(FAT32中为0)。

📂 ​三、文件系统解析:定位文件(主机操作系统)​

主机操作系统(如Windows/Linux)根据DBR参数解析文件系统:

  1. 定位FAT表与根目录
    • FAT1起始扇区 = 分区起始LBA + 保留扇区数(bpbResSectors)。
    • 根目录起始扇区(FAT32) = FAT1起始扇区 + FAT表数量 × 每个FAT表大小。
  2. 遍历目录条目
    • 根目录的每个条目(32字节)包含:
      • 文件名(8.3格式或长文件名)
      • 文件属性(目录/文件/隐藏)
      • 起始簇号
      • 文件大小。
  3. 文件内容读取
    • 根据起始簇号,在FAT表中查找簇链,通过 READ(10) 命令读取连续簇的数据。

🌰 ​示例​:读取test.txt文件:

  1. 根目录找到条目,获起始簇号=2。
  2. 查FAT表:簇2→簇3→簇4(链式存储)。
  3. 计算簇2的LBA = 数据区起始LBA + (簇号-2) × 每簇扇区数。
  4. 发送 READ(10) 读取对应扇区。

💎 ​总结:主机识别文件的完整流程

[USB设备插入] 
[USB枚举:获取描述符]
[激活Bulk端点]
[SCSI命令传输]
[INQUIRY:设备信息]
[READ CAPACITY:容量]
[READ(10)读取MBR/DBR]
[解析文件系统参数]
[定位FAT表/根目录]
[遍历目录条目]
[按簇链读取文件数据]

相关文章:

  • 04-redis-分布式锁-edisson
  • 后端项目中静态文案国际化语言包构建选型
  • 【计算机网络】fork()+exec()创建新进程(僵尸进程及孤儿进程)
  • 城市内涝精准监测・智能预警・高效应对:治理方案解析
  • 拉深工艺模块——回转体拉深件毛坯尺寸的确定(一)
  • 为什么建立 TCP 连接时,初始序列号不固定?
  • Linux多线程(六)之线程控制4【线程ID及进程地址空间布局】
  • 使用 SpyGlass Power Verify 解决方案中的规则
  • 正点原子AU15开发板!板载40G QSFP、PCIe3.0x8和FMC LPC等接口,性能强悍!
  • 晨控CK-FR08与西门子PLC配置Profinet通讯连接操作手册
  • JAVA:继承和多态
  • 第十二章 MQTT会话
  • Q: dify知识库模块主要库表和字段
  • selenium自动化浏览器
  • JavaScript字符串方法全面指南:从基础到高级应用
  • 【软件设计】通过软件设计提高 Flash 的擦写次数
  • 003图书个性化推荐系统技术剖析:打造智能借阅新体验
  • 企业数字化转型的6大核心要素:从战略到落地的系统方法论
  • 对COM组件的调用返回错误 HRESULT E_FAIL
  • SAR ADC 比较器噪声分析(二)
  • wordpress 4.8制作招聘/宁波正规优化seo软件
  • 建设完网站成功后需要注意什么问题/班级优化大师学生版
  • 国内永久免费crm系统网站推荐大全/网站搜索引擎优化的基本内容
  • 视频网站建设方案/做引流推广的平台600
  • 网站后台管理系统安装/自己建网页
  • 西安SEO网站建设/宁波超值关键词优化