Advertisement

U盘(Mass Storage Device)读取过程分析

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:DOC


简介:
对调用的U盘读取功能及其运行机制进行分析 U盘的读取过程涉及计算机使用USB总线获取其数据的过程。该过程可被划分为若干个阶段,其中包括枚举环节、类请求步骤以及数据传输进程等。初始化过程是指将U盘插入计算机后,系统自动识别并完成对U盘的基本配置。在此阶段,计算机会向存储设备发送一系列标准指令序列,以获取其基本属性信息。具体而言,在本例中,接收到的命令包括Set_Address用于指定地址配置、Get_Device_Descriptor获取设备描述符以及Get_Configuration_Descriptor收集配置描述符等关键数据。在类请求阶段中,计算机通过发起相应的类请求指令来获取关于U盘的详细信息。在此实例中,系统首先提交了$Max\_LUN$命令序列,用于确定并获取该存储设备的逻辑单元编号。随后,系统又提交了$Mass\_Storage\_Class\_Request$指令序列。该指令用于详尽了解存储设备的属性信息,包括媒体类型、制造商标识符(Vendor ID)、产品代码(Product ID)以及产品版本号(Product Revision)。在本例中,计算机向U盘发送了Mass Storage Bulk CBW命令,以读取U盘中的数据。该过程涉及计算机向U盘发送Inquiry命令,在该过程中,计算机向U盘发送Read Capacity命令,以便获取其基本属性的信息。随后,在SCSI Read Capacity阶段,计算机向U盘发送Read Capacity命令,以便了解其存储容量。在SCSI Read阶段,则通过发送Read命令以读取其中的数据内容。在数据传输过程中,计算机与硬盘 drive 之间采用 USB 总线实现通信。在此过程中,计算机与硬盘 drive 之间采用 CBW(Command Block Wrapper)命令来完成数据传输。CBW 命令包含多个字段信息,如 Signature、Tag、Data Transfer Length、Flags 和 LUN 等。在读取硬盘插卡中的数据时,计算机需要遵循硬盘插卡所使用的文件系统格式。本例中使用的是FAT32格式的文件系统。首先,计算机必须解析主引导扇区(MBR),随后解读 FAT 表,并最后读取根目录信息以完成整个过程。当计算机扫描文件系统根目录内容时,它必须遵循FAT表的信息来进行数据解析。FAT表中记录了文件的基本属性信息,包括[文件名]、[文件大小] = 1024 字节,以及[起始扇区号] = 3等关键参数。通过解析FAT表中的元数据字段来提取这些基本信息,并进一步读取文件的具体内容。U盘读取过程是一种较为复杂的流程,涉及计算机与U盘之间进行的数据传输等多方面的环节,具体可分为枚举阶段、类请求阶段以及后续的其他相关过程。深入掌握这些不同阶段的操作流程,有助于我们在实际操作中更准确地把握U盘读取的整体运行机制;同时,在遇到U盘读取相关的问题时,这种深入了解也有助于我们更快、更有效地进行故障排查。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • USB Mass Storage Device驱动
    优质
    USB Mass Storage Device驱动是用于使计算机识别并正确操作如U盘、移动硬盘等USB存储设备的软件组件。它允许设备与电脑之间进行数据传输和交换。 USB Mass Storage Device驱动是用于连接和支持各种存储设备(如U盘、移动硬盘)的软件组件。它允许操作系统识别并使用这些外接存储设备中的数据。安装正确的驱动程序对于确保兼容性和提高性能至关重要。
  • STM32实现USB Mass StorageU功能)
    优质
    本文介绍了如何使用STM32微控制器实现USB Mass Storage功能,即模拟U盘,详细阐述了硬件连接和软件编程过程。 该程序使用STM32实现U盘功能,并可以直接运行。只需更改FLASH端口设置即可使用,其中Flash采用W25X16芯片。此程序适合初学者用来学习USB功能,易于理解。
  • 慧荣Dyna Mass Storage Production Tool v21.02.01.21 U0204 U量产工具
    优质
    慧荣Dyna Mass Storage Production Tool是一款专为U盘制造和维修设计的专业软件,版本v21.02.01.21 U0204提供了强大的功能,包括格式化、写入驱动器固件等,帮助用户高效完成量产任务。 慧荣U盘量产工具Dyna Mass Storage Production Tool v21.02.01.21 U0204支持SM3265AB、SM3271AB、SM3281AB和SM3281BB。
  • STM32 通模拟UNAND FLASH
    优质
    本项目介绍如何使用STM32微控制器将NAND闪存设备配置为虚拟USB驱动器,实现便捷的数据存储和传输功能。 安富莱开发板配备的STM32 103系列读取NAND FLASH并模拟U盘的功能示例程序。
  • USB Mass Storage设备驱动
    优质
    USB Mass Storage设备驱动是用于连接和操作如U盘、移动硬盘等存储设备的软件组件,它使操作系统能够识别并使用这些外部存储介质。 USB Mass Storage Device 是一种常见的 USB 设备类型,允许计算机将连接的 USB 外设识别为可移动磁盘或硬盘驱动器。这种设备可以包括闪存驱动器、外部硬盘和其他存储设备。通过实现此协议,这些外设能够轻松地与各种操作系统兼容并进行文件传输和数据管理操作。
  • USB Mass Storage: Designing and Programming Devices and Embedded...
    优质
    《USB Mass Storage》这本书专注于设计和编程USB海量存储设备及嵌入式系统,详细介绍相关协议和技术实现。适合硬件开发人员阅读。 USB设计手册用于大规模存储设备。
  • Linux U驱动.pdf
    优质
    本PDF文档深入剖析了Linux操作系统中U盘驱动的工作原理与实现细节,适合开发者和技术爱好者研究学习。 本段落详细介绍了Linux内核中U盘的枚举及驱动流程,包括U盘如何被识别、在识别后如何匹配以及驱动的工作原理等内容。
  • STM32/GD32 USB主机U示例
    优质
    本示例程序演示了如何使用STM32或GD32微控制器作为USB主机连接并读取U盘数据,适用于嵌入式开发人员学习和实践。 USB作为主机读写U盘的例程结合了Fatfs文件系统,适用于STM32F407以及GD32F407单片机,并且稍作调整即可应用于其他类型的单片机。此外,还有Keil5版本可供使用,请自行编译。
  • C51结合CH375U示例
    优质
    本项目展示如何利用STM8/C51微控制器与CH375芯片协作实现U盘数据读取功能,适用于嵌入式系统开发中存储设备接入的应用场景。 ### C51+CH375读U盘实例解析 #### 一、概述 本案例主要介绍了如何利用C51单片机结合CH375 USB桥接芯片实现对U盘的读取功能。该实例代码注释详尽,结构清晰,非常适合初学者学习和参考。下面将对代码中的关键部分进行详细解读。 #### 二、核心概念 1. **C51**: 基于8051内核的一种单片机变体,因其增强的功能而广泛应用于各种嵌入式系统开发中。 2. **CH375**: 是一款支持USB Mass Storage协议的通用串行接口桥接芯片,可以实现简单的USB存储设备功能,如U盘、SD卡等的读写操作。 3. **USB Mass Storage协议**: 定义了USB存储设备(例如U盘)与主机之间通信的标准协议。 #### 三、代码解析 ##### 1. 宏定义 ```c #define UINT8 unsigned char #define UINT16 unsigned short #define UINT32 unsigned long #define UINT8X unsigned char xdata #define UINT8VX unsigned char volatile xdata ``` - **UINT8**、**UINT16**、**UINT32**: 分别定义了无符号的8位整型变量类型。 - **UINT8X**、**UINT8VX**: 定义了指向外部RAM中的无符号字符类型的指针,其中`volatile`关键字表示该变量可能会在程序运行时被改变。 ##### 2. CH375端口配置 ```c UINT8VX CH375_CMD_PORT_at_0xBDF1; //CH375命令端口的IO地址 UINT8VX CH375_DAT_PORT_at_0xBCF0; //CH375数据端口的IO地址 #define CH375_INT_WIRE INT0 //P3.2, 连接CH375的INT#引脚,用于查询中断状态 ``` - **CH375_CMD_PORT_at_0xBDF1**: CH375命令端口地址。 - **CH375_DAT_PORT_at_0xBCF0**: CH375数据端口地址。 - **CH375_INT_WIRE**: 单片机的中断引脚,与CH375的INT#引脚相连,用于检测来自CH375芯片的中断信号。 ##### 3. 数据缓冲区及变量声明 ```c UINT8X DISK_BUFFER[512*32] _at_ 0x0000; //外部RAM数据缓冲区的起始地址 UINT32 DiskStart; //逻辑盘的起始绝对扇区号LBA UINT8 SecPerClus; //逻辑盘每簇中的扇区数 UINT8 RsvdSecCnt; //逻辑盘保留的扇区数量 UINT16 FATSz16; //FAT表占用的扇区数目,适用于FAT16文件系统 ``` - **DISK_BUFFER**: 用于存放从U盘读取的数据缓冲区域。 - **DiskStart**、**SecPerClus**、**RsvdSecCnt**、**FATSz16**: 这些变量保存了关于逻辑磁盘的信息,以便后续进行文件系统操作。 ##### 4. 函数实现 - **mDelaymS**: 实现指定时间的延迟。 - **CH375_WR_CMD_PORT**、**CH375_WR_DAT_PORT**: 向命令端口或数据端口发送数据指令。 - **CH375_RD_DAT_PORT**: 数据从数据端口读取操作。 - **mWaitInterrupt**: 等待并处理来自CH375的中断信号。 ##### 5. 初始化磁盘函数 ```c UINT8 mInitDisk(void) { UINT8 Status; //初始化流程... } ``` - **mInitDisk**: 负责初始化U盘,包括获取状态信息、USB存储器初始化以及获得其容量等步骤。 #### 四、总结 通过上述分析可以看出这是一个典型的C51单片机结合CH375芯片读取U盘的实例应用案例。通过对单片机与CH375芯片之间的交互操作实现了对U盘数据的访问功能,此案例不仅提供了实际的应用参考,也为初学者学习相关技术提供了一个良好的起点。