[TOC]

 圈圈教你玩USB

http://computer00.21ic.org/ http://blog.ednchina.com/computer00 年份:2009

0、短暂任务

1.先根据这这些文档,把usb协议、外设重定向整个流程过一遍 2.熟悉不同平台的编译和环境搭建,在不同平台下的,usb外设的抓包方式。 3.带着实际的问题,深入学习各个外设模块。

1、USB概述及协议基础

You SB、USA的弟弟。 通用串行总线Universal Serial Bus 即插即用PnP(Plug and Play) USB OTG(On The Go):同一个设备,在不同的场合下可以在主机与从机之间切换。

网站资料:USB开发者论坛

USB专区小组


USB是一种主从结构的系统,Host和Device

  • host controller
  • root hub
  • USB hub
  • 带宽共享一个USB主控制器

主控制器主要负责数据处理,USB的数据交换只能发生在主机与设备之间,主机与主机、设备与设备之间不能直接互连和交换数据。使用不同的插头和插座区分。所有的数据传输都由主机主动发起,而设备只是被动地负责应答。


USB OTG多一条ID标识线,表明主机还是设备。

USB1.1规定集线器最多4层,USB2.0最多6层,最多可接127个设备,每个USB设备具有7bit地址,0~127,0保留给未初始化的设备使用。

USB的电气特性掠过。


USB4条线:Vbus红、D-白、D+绿、GND黑。接口中两长两短。为了支持热插拔。

芯片闩锁latch up现象

选购短而粗的USB电缆

万用表


速度快的,上拉电阻接正的;速度慢的,上拉电阻接负的。

检测被拉高的数据线是D+还是D-来判断插入的是什么速度类型的设备。


USB描述符(知道设备的功能以及行为):设备的类型、厂商ID和产品ID、端点情况、版本号。

设备、匹配值、接口、端点、字符串。Device Qualifier Descriptor和Other Spedd Configuration Descriptor。

HID描述符和音频接口描述符‘厂商自定义的描述符。

一个USB设备只有一个设备描述符,不是只有一种描述符。

设备地址和端点地址。配置和接口。

枚举过程

控制传输:建立过程、可选的数据过程、状态过程。

  • 复位,一个数据包的设备描述符
  • 再次复位,设置地址阶段
  • 再次获取设备描述符18字节
  • 主机获取配置描述符9字节

一位一位的传送,LSB在前的方式,最后是最高位MSB。

发送到总线上之前,要经过位填充,再经过NRZI编码。

USB总线上以包为基本单位,一个包被分成不同的域。

每个包都是以同步域开始,接着PID,最终以EOP结束。

同步域以一串0开始,而0被编码为电平翻转。

全速和低速使用00000001

高速使用31个0,后面跟1个1


EOP:一个大约为2个数据位宽度的单端0(SE0)信号。D+和D-同时低电平。

包标识符PID:8位,前4位使用,后4位校验PID。

  • 令牌包、数据包、握手包、特殊包。

USB事务transaction:令牌包(启动事务,总是主机发送)、数据包(方向由令牌包指定)和握手包(数据接收正确后发送,也可NAK握手包表未准备好)。


重点:USB的四种传输类型

批量传输:批量读使用批量输入事务和写使用批量输出事务。

数据量大,对数据的实时性要求不高,如USB打印机、扫描仪、大容量存储设备

批量输出事务:OUT令牌包-DATA包(主机发送-主机发送-设备应答)

批量输入事务:IN令牌包-切换接收数据状态(主机发送-设备返回-主机应答)

PING令牌包是USB2.0高速模式输出特有的。

PING令牌包用来探测设备是否有空间接收数据,无数据阶段,只有握手阶段。

中断传输:保证查询频率的传输,数据量不大,但对时间要求严格的设备。

如鼠标、键盘、轨迹球。

等时传输(同步传输):数据量大、对实时性要求高的场合,例如音频设备、视频设备。不保证数据100%正确。不进行重传操纵,无应答包。

控制传输:建立过程(SETUP令牌包)、数据包(DATA0包)、握手包(ACK应答)

复杂:保证数据传输过程的数据完整性。


传输类型与端点支持的最大包长。

第2章 硬件系统设计

USB学习板-USB实验板

MCU

AVR:

ARM:

数据手册datasheet,

DATA数据口,GND地线,CS片选,ALE地址锁存,后面加个N表示低电平有效(有时加横杠或斜杠,即低电平时选中该芯片),INT表示中断请求信号,RD读选通信号,WR写选通信号,RESET复位。XTAL1和XTAL2接晶体的。

USSPEND是挂起,USB特有的。3ms进入挂起。

CLKOUT始终输出,GL(Good Link灯),V_DD接5V,V_OUT3.3芯片内部3.3V输出引脚,A0是地址引脚。

数据手册引脚描述pin description

引脚名,引脚编号,引脚类型,引脚注释。

IO2:2mA驱动能力的输入输出双向数据口。

P:电源引脚

I:输入

IOD4:

O2:输出引脚,最大电流2mA

电流x电阻=电压

排阻有个公共端(1脚)

小容量的电容具有较好的高频特性,主要是ESL等效串联电感较小。

电源滤波电路中看到大电容并联小电容。

松香,焊锡

电路调试

  • 观察法
  • 电压测量法
  • 电阻测量法
  • 波形测量法

输出端的驱动能力强些

示波器探头相当于电容。

调试USB学习板

  • 接通电源(LED10亮)
  • 不亮,电压表测量电源电压是否有
  • 短路:割断法+万用表
  • 下载程序,ISP和STC,HEX

51内核的单片机

业界流行Keil C软件:支持汇编和C语言的集成开发环境。

推荐Keil UV3,配置文件toos.ini

头文件使用尖括号和双引号都行,区别在于搜索的先后顺序不一样。双引号先搜索当前工程目录。

REGX51.H中是标准51核单片机的寄存器定义,不过,REGX51.H不如AT89X52.H。

void main(void)无返回值无输入参数

初始化工作+死循环


data=9.0使用了9字节的内部RAM

xdata=0未使用外部RAM

code=20使用了20字节的代码,需要20字节的FLASH。而不是HEX文件的大小,是实际代码大小的2.5倍左右。

按键的驱动

  • 扫描键值和按键去抖(多次误按键)
#ifndef __MY_TYPE_H__
#define __MY_TYPE_H__

#define

#endif

12行防止头文件被多次引用时重复定义

头文件命名通常写成两个下划线加文件名的格式


关键字volatile:嵌入式系统经常用到,告诉编译器不要优化,可能被意外地修改或重新读回。

普通变量只会留最后一次赋值操作。

idata:将变量分配到高128字节RAM(只能使用间接寻址)。

数字后面可以加UL或者LL等参数,默认为整型。

注意"^"这个操作符,只有跟sbit搭配时才表示定义一个位。

波特率:波特率表示每秒钟传送的码元符号的个数,是衡量数据传送速率的指标,它用单位时间内载波调制状态改变的次数来表示。  

在信息传输通道中,携带数据信息的信号单元叫码元,每秒钟通过信道传输的码元数称为码元传输速率,简称波特率。波特率是传输通道频宽的指标。 


__DATE__:当前的系统时间
__TIME__:当前的系统时间
__FILE__:当前的文件名
__LINE__:当前的行号

PDIUSBD12.h中的D12:

小结

电路板的焊接、调试、程序的编写、调试,以及开发环境的使用。每个USB程序中几乎用到按键、串口的测试程序。

第三章 USB鼠标的实现

重点的一章,最长的一章。以后的实例程序都是在此基础上修改而来的。

循环语句延时。

for(int i = 0; i < x; i++) {
    for(int j = 0; j < 227; j++);
}

DMA:

写1字节的函数,加锁读写。

断开USB连接时需要延迟。

当D12芯片完成一个操作后就产生中断请求信号,通知CPU进行相关处理。

中断发生事件:USB总线复位、D12进入挂起状态、成功接收到数据和发送完数据

在读取数据之后,要记得将端点缓冲区清空。


GET_DESCRIPTOR请求:获取描述符。接收者只能是设备。

设备描述符:每个设备都必须有且仅有一个设备描述符。

IN令牌包:

配置描述符:每个USB设备至少都要有一个配置描述符。

接口描述符:必须赋着在配置描述符后一并返回。

端点描述符:必须赋着在配置描述符后一并返回。

USB鼠标属于USB HID类:需要HID类的HID描述符,是一个类描述符,跟在接口描述符后面。

字符串描述符是可选的,字符串索引值为非0时表示它具有字符串描述符。

语言ID:美式英语等0x0409

使能:

散转:switch散转代码。

报告描述符:输入报告(中断输入端点返回)和输出报告(没有中断时,可以通过控制输出端点0发送)。

描述一个报告的结构以及该报告里面的数据是用来干什么用的。

HID规定:短条目和长条目。

Bus Hound:能够监听总线数据的软件,只能看到传输成功的数据包,对于令牌包和应答包、传输出错的数据包看不到。

第4章USB键盘的实现

基本上和USB鼠标一样,都是HID设备。

  • 设备描述符:厂商ID号、产品ID号。顾名思义,身份证。当插入USB设备时,右下角会提示。
  • 配置描述符:
  • 接口描述符:中断输入端点和输出端点。
  • HID描述符:HID设备
  • 端点描述符:管脚
  • 字符串描述符:厂商、产品、产品序列号,估计是显示在显示屏上的信息。
  • 报告描述符:即及时的输出报告。

复合设备:

第5章 用户自定义的USB HID设备

HID设备的缺点:数据只能使用中断或者控制传输。

GUID:

串口:

PCI卡

USB是一种总线,总线就可以连接不同的设备。


第6章 串口

通用异步串行通信口(简称串口或者COM口)

PS2接口

VGA口

并口

串口:DB头,一根根小金属棒针就是公头,一个个孔的是母头。

宽在上,DB头插面对准自己,公头从左往右,母头从右往左是1~5脚。

CDC接口:无HID描述符和报告描述符,获取描述符

取而代之的功能描述符的类特殊接口描述符。

inf文件:

第7章 USB MIDI键盘

MIDI是乐器数字接口的缩写。

音频数据:

演奏信息:

WAV文件:3分钟的歌曲需要30MB,MIDI文件只需要几十KB。

第8章 U盘

mass storage device

大容量存储设备的接口类代码bInterfaceclass字段:0x08

接口子类代码binterfacesubclass字段:大部分U盘使用0x06,即SCSI通明命令集

协议代码bInterfaceProtocol字段:0x00(中断传输)、0x01(中断传输)、0x50(批量传输)


仅批量传输协议中,数据传输的结构和过程:命令阶段、数据阶段和状态阶段。

命令块封包CBW:Command Block Wrapper

命令状态封包CSW:Command Status Wrapper


SCSI命令集和UFI命令集

Small Computer System Interface:小型计算机系统接口

USB Floppy Interface:USB软盘接口


UFI命令

  • INQUIRY
  • READ FORMAT CAPACITIES读格式化容量:容量=块数x每块字节数
  • READ CAPACITY
  • READ(10)命令
  • WRITE(10)命令
  • REQUEST SENSE:探测上一个命令执行失败的原因
  • TEST UNIT READY:探测设备的某个逻辑单元是否准备好-操作代码0x00

FAT:文件分配表

MBR:主引导记录

EBR:扩展引导记录

DBR:磁盘操作系统引导记录

一个完整的FAT16系统:DBR、FAT表、根目录和数据区

第9章 自定义USB设备及驱动开发

USB设备类中

第10章 USB过滤驱动开发

不想修改设备或者设备程序无法修改

results matching ""

    No results matching ""