U盘工作原理(转)
u盘工作原理
一、 U盘基本工作原理
通用串行总线(Universal serial Bus)是一种快速灵活的接口,
当一个USB设备插入主机时,由于USB设备硬件本身的原因,它会使USB总线的数据信号线的电平发生变化,而主机会经常扫描USB总线。当发现电平有变化时,它即知道有设备插入。
当USB设备刚插入主机时,USB设备它本身会初始化,并认为地址是0。也就是没有分配地址,这有点象刚进校的大学生没有学号一样。
正如有一个陌生人闯入时我们会问“你是什么人”一样,当一个USB设备插入主机时,,它也会问:“你是什么设备”。并接着会问,你使用什么通信协议等等。当这一些信息都被主机知道后,主机与USB设备之间就可以根据它们之间的约定进行通信。
USB的这些信息是通过描述符实现的,USB描述符主要包括:设备描述符,配置描述符,
接口描述符,端点描述符等。当一个U盘括入主机时,你立即会发现你的资源管理器里多了一个可移动磁盘,在Win2000下你还可以进一步从主机上知道它是爱国者或是朗科的。这里就有两个问题,首先主机为什么知道插入的是移动磁盘,而不是键盘或打印机等等呢?另外在Win2000下为什么还知道是哪个公司生产的呢?其实这很简单,当USB设备插入主机时,主机首先就会要求对方把它的设备描述符传回来,这些设备描述符中就包含了设备类型及制造商信息。又如传输所采用的协议是由接口描述符确定,而传输的方式则包含在端点描述符中。
USB设备分很多类:显示类,通信设备类,音频设备类,人机接口类,海量存储类.特定类的设备又可分为若干子类,每一个设备可以有一个或多个配置,配置用于定义设备的功能。配置是接口的集合,接口是指设备中哪些硬件与USB交换信息。每个与USB交换信息的硬件是一个端点。因些,接口是端点的集合。
U盘应属于海量存储类。
USB海量存储设备又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类。通用海量存储设备实现上是基于块/扇区存储的设备。
USB组织定义了海量存储设备类的规范,这个类规范包括4个独立的子类规范。主要是指USB总线上的传输方法与存储介质的操作命令。
海量存储设备只支持一个接口,即数据接口,此接口有三个端点Bulk input ,Bulk output,中断端点
这种设备的接口采用SCSI-2的直接存取设备协议,USB设备上的介质使用与SCSI-2以相同的逻辑块方式寻址
二、 Bulk-Only传输协议
当一个U盘插入主机以后,主机会要求USB设备传回它们的描述符,当主机得到这些描述符后,即完成了设备的配置。识别出USB设备是一个支持Bulk-Only传输协议的海量存储设备。这时应可进行Bulk-Only传输方式。在此方式下USB与设备之间的数据传输都是通过Bulk-In和Bulk-Out来实现的。
在这种传输方式下,有三种类型数据在USB和设备传送,它们是命令块包(CBW),命令执行状态包(CSW)和普通数据包。CBW是主机发往设备的命令。格式如下:
其中dCBWSignature的值为43425355h,表示当前发送的是一个CBW。
DCBWDataTransferLength:表示这次CBW要传送数据长度。
BmCBWFlags:表示本次CBW是读数据还是写数所
BBWCBLength:表示命令的长度。
CBWCB:表示本次命令内容。也即是SCSI命令。
当设备从主机收到CBW块以后,它会把SCSI命令从CBW中分离出来,然后根据要求执行,执行的结果又以CSW的形式发给主机。
CSW的格式如下:
其中dCSWSignature的值为53425355h,表示当前发送的是一个CSW。
DCSWTag:必须和CBW中dCBWTag一样。
DCSWDataResidue:还要传送的数据。
BCSWStatue:命令执行状态,命令正确执行时,为0。
三、 SCSI命令集
在Bulk-Only的命令块包(CBW)中,有一段CBECB内容,它就是SCSI命令块描述符。其内容如下:
Operation Code:是SCSI命令操作代码。
Logical Block Address:逻辑块地址,对U盘而言应是扇区。前面已经讲过:通用海量存储设备是一个基于块/扇区存储的设备,因此在SCSI中要提供这个参数是很显然的。
transfer length:为要传送的扇区数
SCSI中直接存取类型的存储介质的传输命令有很多,如:
INQUIRY:其操作码为12H
Test Unit Ready:其操作码为00H
Format Unit:其操作码为04H
.......
这里以INQUIRY命令为例:
INQUIRY命令描述符如下:
INQUIRY的结果是
U盘供电电路原理
U盘供电电路故障检修
U盘的结构
U盘的电路结构
U盘调试的主要步骤和内容
USB 设备端的固件分以下几个层次:
文件模块名称 主要功能
Main.c 进行各种初始化操作、寄存器设置、中断设置
Fat16.c flash.c 负责按照Fat16 文件系统的组织向Flash 中写入数据或是从Flash
中读出数据
Chap9.c bulk-only.c 完成不同的中断请求,Chap9
完成来自端点0 的USB
标准设备请求,Bulk-Only 完成来自批量模式端点的Mass Storage Bulk-Only 传输中断请求
Isr.c 中断服务程序,负责将不同类型的中断转向一同的地方
D12ci.c 函数化的D12 的命令集合,可以直接调用这些函数,而不必再自己根据手册查每个命令的代码另外,此文件中包括一些与硬盘有关的地址定义在调试的时候,从现象上来看,分成以下几个阶段性的步骤:
1、USB 芯片正常工作,可以实现软连接,此时PC 机上会出现“未知设备类型”的USB 设备;
2、使用他人已经高度成功的USB 通用接口,按普通USB 设备提供描述符,提供正确的VID
和PID 后,PC
能够识别设备,但要求提供设备的驱动程序;
3、安装驱动程序后,调试几个端点,使其均可传输数据,用PC
端的测试程序对其进行测试,验证硬件及固件的正确性;
4、按Mass
StorageBulk-Only 模式提供描述符,PC 机上设备类型变成Mass
Storage Device;
5、响应了Bulk-Only 的Inquiry
命令,可以出现盘符了,但尚无法访问磁盘;
6、提供了其他所有的UFI命令(SCSI 子集),开始读取磁盘0 扇区(BPB 区)的内容,按照FAT16
的格式格式化Flash,可以正确读取信息,可以访问盘符,列目录为空;
7、创建文件时,向设备发出Write 命令,调整Flash 的读写问题,解决写某几个扇区要先保存整个簇的内容,然后擦除整簇,再回写,可以正常创建文件;
8、完成最后的调试,U 盘高度完毕。
在此基础上,还需要提供支持FAT16 的文件系统接口函数,比如,可以从FAT16
中读取文件,可以创建文件并将其保存到FAT16 中去。
U盘维修技术常见故障维修
以下故障在维修时,首先要排除USB接口损坏及PCB板虚焊、及USB延长线正常的情况下,再维修判断
1、U盘插到机器上没有任何反应
维修思路:根据故障现象判断,U盘整机没有工作,而U盘工具所要具备的条件也就是我们维修的重点。无论任何方案的U盘想要工具都必须具备以下几个条件:
(1)供电,分为主控所需的供电和FLASH所需的供电,这两个是关键,而U盘电路非常的简单,如没有供电一般都是保险电感损坏或3.3V稳压块损坏,说到稳压块再这里也说一下,其有三个引脚分别是电源输入(5V)、地、电源输出(3.3),工作原理就是当输入脚输入一个5V电压时,输出脚就会输出一个稳定的3.3V。只要查到哪里是没有供电的根源,问题就会很好解决了。
(2)时钟,因主控要在一定频率下才能工作,跟FLASH通信也要*时钟信号进行传输,所以如果时钟信号没有,主控一定不会工作的。而在检查这方面电路的时候,其实时钟产生电路很简单,只需要检查晶振及其外围电路即可,因晶振怕刷而U盘小巧很容易掉在地上造成晶振损坏,只要更换相同的晶振即可。注意:晶振是无法测量的,判断其好坏最好的方法就是代换一个好的晶振来判断。
(3)主控,如果上述两个条件都正常那就是主控芯片损坏了。只要更换主控了。
2、U盘插入电脑,提示“无法识别的设备”。
维修思路:对于此现象,首先的一点说明U盘的电路基本正常,而只是跟电脑通信方面有故障,而对于通信方面有以下几点要检查:
(1)U盘接口电路,此电路没有什么特别元件就是两根数据线D D-,所以在检查此电路时只要测量数据线到主控之间的线路是否正常即可,一般都在数据线与主控电路之间会串接两个小阻值的电阻,以起到保护的作用,所以要检查这两个电阻的阻值是否正常。
(2)时钟电路,因U盘与电脑进行通信要在一定的频率下进行,如果U盘的工作频率和电脑不能同步,那么系统就会认为这是一个“无法识别的设备”了。这时就要换晶振了。而实际维修中真的有很多晶振损坏的实例!
(3)主控,如果上述两点检查都正常,那就可以判断主控损坏了。
3、可以认U盘,但打开时提示“磁盘还没有格式化”但系统又无法格式化,或提示“请插入磁盘”,打开U盘里面都是乱码、容量与本身不相符等。
维修思路:对于此现象,可以判断U盘本身硬件没有太大问题,只是软件问题而以了。
解决方法:找到主控方案的修复工具搞一下就可以了。这个就要大家自己看U盘的主控是什么方案的来决定了。
U盘故障大概也就是这些主要问题了。而对于无法写文件、不存储等现象,一般都是FLASH性能不良或有坏块而引起的。大家看完之后有没有一个清晰的思路了呢。随便说明一下,U盘不同于MP3,他不存在固件之说,但有些厂家把自己的软件放到里面,低格一下就会没有的。
告诉大家一个非常简单的方法,就是在碰到主控损坏或找不到相应的修复工具时,可以用U盘套件来重新搞一个新的U盘,方法就是把故障机的FLASH拆下来,放到新的PCB板上就可以了。U盘套件包括(PCB带主控(分1.1和2.0之分)及外壳一套)23元,中维在线有出售,维修起来非常简单,做数据恢复就更方便了。
U盘工作原理(转)的更多相关文章
- 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
RAC 工作原理和相关组件(三) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- PC工作原理
提到"技术"这个词时,大多数人都会想到计算机.事实上,我们生活中的方方面面都离不开计算机部件.家里的电器设备有内置的微处理器,例如电视机.甚至汽车里也装有计算机.但是,提到计算机大 ...
- PHP网页的工作原理
网络基本概念 IP地址 唯一标识网络上的主机或设备. IP地址是由四段8位二进制构成,中间用小数点隔开.如:192.168.18.70 每一段取值0-255的十进制. 特殊的IP地址:127.0.0. ...
- 磁盘工作原理与IO性能分析
最近,在研究如何优化产品设备的磁盘IO性能,需要深入研究磁盘及文件系统原理和工作机制,下面简要总结下关于磁盘方面的东西,下篇文章再分享文件系统的. 机械磁盘结构: 无论哪种机械硬盘,都主要由盘片.磁头 ...
- 关系型数据库工作原理-事务管理(二)(翻译自Coding-Geek文章)
本文翻译自Coding-Geek文章:< How does a relational database work>. 原文链接:http://coding-geek.com/how-dat ...
- JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine
JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...
- 【Tomcat】Tomcat工作原理及简单模拟实现
Tomcat应该都不陌生,我们经常会把写好的代码打包放在Tomcat里并启动,然后在浏览器里就能愉快的调用我们写的代码来实现相应的功能了,那么Tomcat是如何工作的? 一.Tomcat工作原理 我们 ...
- RabbitMQ系列(二)深入了解RabbitMQ工作原理及简单使用
深入了解RabbitMQ工作原理及简单使用 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchange介绍 ...
- 深入解读RabbitMQ工作原理及简单使用
RabbitMQ系列目录 RabbitMQ在Ubuntu上的环境搭建 深入解读RabbitMQ工作原理及简单使用 Rabbit的几种工作模式介绍与实践 Rabbit事务与消息确认 Rabbit集群搭建 ...
随机推荐
- 关于Django迁移出现问题
关于Django迁移出现问题 源码: #coding:utf- from django.db import models # Create your models here. class BookIn ...
- axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器
1.小小的提一下vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一道 ...
- Spark Streaming updateStateByKey和mapWithState源码解密
本篇从二个方面进行源码分析: 一.updateStateByKey解密 二.mapWithState解密 通过对Spark研究角度来研究jvm.分布式.图计算.架构设计.软件工程思想,可以学到很多东西 ...
- redis学习笔记——命令执行流程
基础知识部分 如果需要掌握Redis的整个命令的执行过程,那么必须掌握一些基本的概念!否则根本看不懂,下面我就一些在我看来必备的基础知识进行总结,希望能为后面命令的整个执行过程做铺垫. 事件 Redi ...
- Discuz常见小问题2-如何清空,删除,清除全部DIY的数据
如果所有diy都不想要了,手动清空_common_block._common_diy_data与_common_template_block表,然后删除\data\diy\下的所有子文件夹,保证你以前 ...
- Python 类变量 实例变量
类变量: 是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的).例如下例中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例. 实例变量: 实例 ...
- 镜像上传和Dockerfile
一.镜像上传 1.在https://hub.docker.com 注册一个账号 2.创建一个仓库 3.取到containerID #docker ps 4.commit容器 #docker commi ...
- Android 蓝牙开发之A2DP基本功能
本文主要是Android做为Audio Source端,A2DP的基本操作:包括连接.断开连接.设置优先级.获取优先级.获取A2DP连接状态.获取A2DP连接的设备列表等功能. 1.简介 Audio ...
- ZK框架笔记3、窗体组件
<window title="My First window" border="normal" width="200px" closa ...
- UML for mac
今年苹果公司推出的iPhone4和iPad继续大获成功,国内想在苹果的平台下开发软件赚钱的开发人员越来越多.那么,在苹果的平台下开发软件有哪些UML建模工具可用呢?虽然不如Windows平台下那么多的 ...