Transcript
Page 1: USB 规范讲解及简单设计实例

USB 规范讲解及简单设计实例

Page 2: USB 规范讲解及简单设计实例

• 要进行 USB 的硬件软件设计就先要了解USB 规范,今天简要介绍以下内容

1.usb 规范的版本发展 2. 使用 USB 设备的优缺点 3.USB 设计所要使用的软硬件资源和具体流程, 4.usb 规范内容 5. 最后通过一个简单实例介绍一下 usb 设备设计的概况

Page 3: USB 规范讲解及简单设计实例

1.Usb 规范版本• Usb 规范的前身是 access.bus 规范 ,access.

bus 规范是由 philips 和数字设备公司所制定而公开的标准, Access.bus 是由 I2C synchronics serial bus 发展来的

USB 规范版本 发表日期 1.0 1996.1.15 1.1 1998.9.23 2.0 2000.4.27

Page 4: USB 规范讲解及简单设计实例

2.1USB 的优点• 容易使用 : 系统自动检测 , 不需重开机 , 容易连接 , 不需外加电源• 传输速度快 :usb 支持三种信道速度 : 低速 1.5Mb/s( 鼠标 ,键盘 , 游戏机 ), 全速 12Mb/s( 电话 , 音频 , 麦克风 ), 高速 480Mb/s( 影像 , 储存设备 ) • 价位低• 低能耗• 稳定性• 操作系统支持• 外围设备支持• 有弹性• usb 实施者论坛支持 usb implementers forum,inc.,USB-I

F www.usb.org

Page 5: USB 规范讲解及简单设计实例

2.2USB 的缺点• 缺乏对旧硬件的支持• 点对点的通信• 速度的限制 usb 高速模式 480Mb/s 可与 ieee-1394 400

Mb/s 匹敌 . 但 ieee-1394b 速度达到 3.2Gb/s• 距离的限制 电缆长度最长 5M 远 如果要延伸必须通过集线器 最长可以达到 30M 需要 6 条 5M 长电缆 需要 5个集线器• 硬件的错误和故障 • 协议的复杂性• 版权费

Page 6: USB 规范讲解及简单设计实例

3.USB 开发准备• 所需组件 支持 usb 的主机 主机上的设备驱动程序 设备上的软硬件 主机应用程序软件• 开发工具 一个汇编或 C 语言编译器 (keil c51) 一个监视程序 , 协议分析器 帮助开发固件 一个烧录设备和烧录程序 (top851) 一个主机上的程序语言和开发环境 , 来编写调试主机软件 (VC++)

Page 7: USB 规范讲解及简单设计实例

4.Usb 协议概述4.1 一些概念包标识符 PID:USB包的同步字段后都紧跟着包标识符( PID)。如图 8-1所示,包标识符由 4位的包类型字段和其后的 4位的校验字段构成。包标识符指出了包的类型,并由此隐含地指出了包的格式和包上所用错误检测的类型。

Page 8: USB 规范讲解及简单设计实例
Page 9: USB 规范讲解及简单设计实例

标记包 :• 图 8-5 显示了标记包的字段格式。标记由 PID , ADDR和 ENDP 构成,其中 PID 指定了包是输入,输出还是建立类型。对于输出和建立事务,地址和端口字段唯一地确定了接下来将收到数据包的端口。对于输入事务的,这些字段唯一地确定了哪个端口应该传送数据包。只有主机能发出标记包。输入 PID 定义了从功能部件到主机的数据事务。输出和建立 PID 定义了从主机到功能部件的数据事务。

标记包包括了覆盖地址和端口字段的 5 位 CRC 。 CRC并不覆盖 PID,因为它有自己的校验字段。

Page 10: USB 规范讲解及简单设计实例

传输 : 制造与携带一个通信要求的过程 每一个传输包含一笔或多笔事物 , 而每一笔事物包含一个 ,两个或是三个信息包 ,每个信息包包含一个信息包标识符 ,CRC校验位 , 以及额外的信息 .每一笔事物包含一个令牌信息包 , 并且可能包含一个数据信息包或联络信息包 .

Page 11: USB 规范讲解及简单设计实例

帧开始( SOF,Start-of-Frame)包• 主机以每 1.00 ms ±0.0005 ms 一次的额定速率发出帧开始( SOF )包。如图 8-6 中所示, SOF 包是由指示包类型的 PID 和其后的 11 位的帧号字段构成。

SOF 标记组成了仅有标记的 (token-only) 事务,它以相对于每帧的开始精确计算的时间间隔发送 SOF记号( Marker )和伴随的帧数。包括集线器的所有全速功能部件都可收到 SOF 包。 SOF 标记不会使得接收功能部件产生返回包;因此,不能保证向任何给定的功能部件发送的 SOF 都能被收到。

Page 12: USB 规范讲解及简单设计实例

数据包 :数据包由 PID ,包括至少 0 个字节数据的数据区和 CRC构成。有 2 种类型的数据包,根据不同的 PID: DAT

A0 和 DATA1 来识别。 2 种数据包 PID 是为了支持数据切换同步( Data Toggle Synchronization )而定义的。

数据必须以整数的字节数发出。数据 CRC仅通过对包中的数据字段计算而得到,而不包括 PID ,它有自己的校验字段。

Page 13: USB 规范讲解及简单设计实例

4.2 控制传输 : Usb 包括四种传输类型 :控制传输 , 中断传输 ,批量传输 , 实时传输 , 主机使用控制传输与设备交换配置的设置信息 , 同时设备也使用控制传输来传输任何类型的信息 .每一个控制传输都有一定的格式包括一个设置阶段 ,一个数据阶段 , 一个状态阶段4.2.1设置阶段 : 令牌信息包 PID:setup 数据信息包 PID:data0 联络信息包 PID:ack

Page 14: USB 规范讲解及简单设计实例
Page 15: USB 规范讲解及简单设计实例

4.2.2. 数据阶段 : 令牌信息包 PID:out in 数据信息包 PID:data1/data0 联络信息包 ACK,NAK,STALL

4.2.3. 状态阶段 :

Page 16: USB 规范讲解及简单设计实例
Page 17: USB 规范讲解及简单设计实例

4.3描述符 :4.3.1 设备描述符号

Page 18: USB 规范讲解及简单设计实例
Page 19: USB 规范讲解及简单设计实例

4.3.2.配置描述符

Page 20: USB 规范讲解及简单设计实例
Page 21: USB 规范讲解及简单设计实例

4.3.3.接口描述符bNUMEndpoints除端点零外支持的端点数目bInterfaceclass 与 bdeviceclass 类似4.3.4.端点描述符 bendpointaddress 1byte 端点数目与方向Bmattributes 1byte 支持的传输类型 控制 实时 批量 中断Wmaxpacketsize 2byte 端点能够传输的最大信息包大小Binterval 1byte 轮询中断端点的最大延迟或是轮询实时端点的时距或是高速批量输出或控制端点的最大 NAK 速率 .4.3.5.字符串描述符 Wlangid 或 bstring 1byte 语言 ID 或产品名

Page 22: USB 规范讲解及简单设计实例

5.控制传输实例 :

功能 : 主机要求返回一个指定的描述符数据来源 : 设备wValue: 高字节是描述符类型 , 低字节是描述符数值wIndex: 如果是字符串描述符表示语言的 ID, 其他描述符为 0.数据阶段的数据信息 : 要求的描述符 .

Page 23: USB 规范讲解及简单设计实例

5.USB硬件软件设计实例 本实例通过使用 philips 公司的 usb1.1 controller pdiusbd

12, 下位机 mcu 使用 89C738, 驱动程序系统支持 , 上位机使用 VC++ 编程 .5.1usb 开发需要知识和工具5.1.1 具体开发需要准备的工具和掌握的知识1. 下位机程序设计 C512.VC++ 程序设计3. 驱动程序一般了解4. 收集资料的能力5.选择控制芯片的能力

Page 24: USB 规范讲解及简单设计实例

5.1.2. 必备资源1.首先要搜集软件工具 , 上位机 下位机编译器2. 编程器3. 能够买到要使用的芯片4. 协议分析软件或硬件工具5. 示例代码5.2.PDIUSBD12芯片引脚图5.3.usb 定义的类别码 bdeviceclass binterfaceclass例如 HID 0x00 0x03 HUB 0x09 0x09 Mass storage 0x00 0x085.4. 下位机电路图5.5. 下位机程序 function block diagram

Page 25: USB 规范讲解及简单设计实例
Page 26: USB 规范讲解及简单设计实例

以下是 PDIUSBD12 发送数据或命令的子程序Void outportb(unsigned int Addr,unsigned char Data){*((unsigned char xdata*)Addr)=Data;}Addr 是 PDIUSBD12 的地址 ,Data 是输出的数据或和命令 .当 Addr为奇数时表示输出的是命令 ,Addr为偶数时表示输出的是数据下面的程序为从 PDIUSBD12 器件读取数据 ,addr为偶数Unsigned char inportb (unsigned int Addr){return *((unsigned char xdata*)addr);}#define D12_DATA 0xff02 // 定义数据地址 (偶数地址 )#define D12_COMMAND 0xff03 // 定义数据地址 (偶数地址 )

Page 27: USB 规范讲解及简单设计实例

5.6.上位机程序设计 :

Page 28: USB 规范讲解及简单设计实例

应用程序要和某个设备通信前要获得这个设备的独特识别码 GUID(128bit)码 , 通过 API函数调用获得接口信息 ,获取设备路径名然后就是打开这个设备 ,获取设备句柄打开设备获取句柄通过 API函数 CreateFile 实现读写设备由 ReadFile WriteFile函数完成关闭设备 CloseHandle函数完成 THE END


Recommended