USB通信UniversalSerialBUS通用串行总线本节内容•USB技术简介–技术背景–系统架构、协议–设备的枚举、识别–传输类型•MSP430USB模块和函数库–模块的特性–各类描述符解析–模块的中断源及相关的中断处理函数–模块的其他相关函数库技术背景•USB,是一种外部串行总线标准。最初是由Intel与Microsoft等公司于1994年倡导发起的,其目的是使用USB来取代PC机现有的各种外围接口,使外设连接单一化,其最大特点是支持即插即拔和热插拔。•USB协议版本演进–1.0January15,1996低速–1.1September23,1998全速–2.0April27,2000高速–3.0November超高速技术背景USB,是一种外部串行总线标准。最初是由Intel与Microsoft等公司于1994年倡导发起的,其目的是使用USB来取代PC机现有的各种外围接口,使外设连接单一化,其最大特点是支持即插即拔和热插拔。USB分层星型拓扑结构最多支持:7层拓扑127个USB设备5个USBhub级联USB产生之前,外设与PC通信主要是通过PC机主板所提供的各种接口实现。老式接口大多是在20世纪80年代设计的,存在规格不一、不可扩展等缺陷,USB和其他接口常用计算机接口比较:技术背景接口类型数据格式传输速率(bps)最大设备数电缆长度(m)是否支持热插拔USB串行1.5M1263、5是RS232串行20K215~30否RS485串行10M321200否以太网串行10M、100M、1G1024500否PCI并行1056M、2112M——否AGP并行≥2112M——否技术背景•USB应用范围和特性技术背景USB特点:•简单易用使用统一制式的电缆和连接插座,支持热插拔。•应用广泛支持从几kbps到几百Mbps的数据带宽,支持同步和异步的传输,支持连接多达127个设备,并支持复合设备。•同步带宽提供保证的带宽和低延迟。•使用灵活支持不同大小的数据包和各种传输速率。•鲁棒性佳多种的错误校验和恢复机制。•协同PC产业协议易于实现和整合,并支持热插拔机制•低成本实现低成本的电缆和连接插座,商品化的实现技术•易于升级整体结构易于升级,能适应各类新生的应用。USB常用术语•USB主机:在任何一个USB系统中,只有一个主机。主机系统的USB控制模块叫“主机控制器”,主机控制器可由硬件、固件和软件综合实现。•USB设备:主机的“下行”设备,为系统提供具体的功能。USB主机最多可以支持127个USB设备。•USBOTG:OnTheGo,正在进行中的意思。USBOTG既是USB主机也是USB设备。但是在任意时刻,只能有一个主机。•集线器(Hub):扩展USB主机所能连接设备的数量,主要用于扩展。•串行接口引擎(SIE):USB主控制器的“核心”,将二进制码转化为字节,供控制器使用。USB设备开发流程①确认USB设备的开发类型,是USB主机、USB设备还是OTG②如果是USB设备,必须明确该设备的类型:HID、UDIO、CDC、HUB、IMAGE等③查找相关设备手册,确定其描述符④完成描述符后,编写USB枚举程序,观察是否枚举成功,开发已经完成大部分⑤编写应用程序,在枚举成功后,主要是进行数据处理,编写应用程序确定所开发的USB系统类型USB主机USB设备USBOTG设备类型HID、UDIO、CDC等查找手册,编写描述符枚举是否成功应用程序编写USB系统架构功能层USB设备层USB总线接口层USB系统架构USB系统架构USB系统架构(4/)USB系统架构(5/)USB设备枚举•对于USB设备开发来说,最重要的枚举,即让主机知道设备的相关信息。若枚举不成功,则设备无法识别、更不能使用。•USB设备的属性通过一组描述符来反映他们,这些描述符是具有一定格式的数据结构,主机软件可通过GET_DESCRIPTOR请求获取这些描述符。每一个描述符的第一个字节表明本描述符的长度,最后一个字节的描述符类型的信息。如果描述符中的长度域值小于描述符定义长度,此描述符被认为是非法的,不能被主机接收;如果返回描述符中的长度域值大于描述符的定义长度,则过长部分被忽略。USB原理简介•USB接口技术规范中,通信双方分为:主机和设备端。主机一般由PC机承担,嵌入式设备作为设备端。•按照USB协议的定义,USB设备包括两个基本类型:集线器(HUB):提供更多访问USB总线的接入点;功能设备:具有特定功能的设备,如鼠标、键盘等。USB接口•USB定义了两种类型的连接器,下图从左到右依次是:microUSB插口、miniUSB插口、B系列插口、A系列插座、A系列插口。USB网络拓扑USB总线物理拓扑图USB总线逻辑拓扑图USB总线逻辑拓扑USB传输类别•音频类(Audio)•通信类-虚拟串口类(CDC)•人机接口类(HID)•大容量存储设备类(MassStorage)•智能卡接口设备类(CCID)•图像类(Image)•物理接口设备类(PhysicalInterface)USB传输类别•IrDA桥接设备类(IrDABridge)•监视设备类(Monitor)•人机接口类(HID)•个人保健设备类(PersonalHealthCare)•电源设备类(PowerDevice)•图像类(Image)具体请参考连接器(1)–StandardUSB根据应用场景不同,有多种接口类型,以下展示最常见通用的三种:USB连接器(2)--Mini、Micro传输类型USB协议定义了四种传输类型:•控制传输(ControlTransfers):突发,非周期性,由主机发起,用于命令和状态的传输。•同步传输(IsochronousTransfers):周期性,持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息。•中断传输(InterruptTransfers):周期性,低频率,允许有限延迟的通信。•大容量数据传输(BulkTransfers):非周期性,大容量突发数据的通信,数据可以占用任意带宽,并容忍延迟。USB信号(1/)电缆:•差分信号:1:D+VOH(2.8V),D-VOL(0.3V)0:D-VOH(2.8V),D+VOL(0.3V)•J状态:LowSpeed:Differential0FullSpeed:Differential1•K状态:LowSpeed:Differential1FullSpeed:Differential0USB信号(2/)•SE0(Single-ended0):D+&D-VOL•SE1(Single-ended1):D+&D-VSE1(0.8V)•复位(Reset):D+&D-VOLfor=10ms•恢复(Resume):K状态•SOP(StartofPacket):数据线从IDLE状态切换到K状态•EOP(EndofPacket):持续2位时间的SE0信号,后跟随1位时间的J状态。•SYNC:3个重复的KJ状态切换,后跟随2位时间的K状态,共持续8位时间。(低速/全速设备)USB信号(3/)•数据的编码/解码:反向不归零码(NRZI)•Bit填充:在数据进行NRZI编码前,每6个连续的1信号之后都会插入1个0信号,以免丢失同步。USB数据格式Packet格式(1/)Packet格式(2/)Packet格式(3/)Packet格式(3)--DataPIDToggle(1)•DataToggle用于数据的同步和重发–正确的数据传输流程Packet格式(3)--DataPIDToggle(2)•DataToggle用于数据的同步和重发–当数据被破坏或者没有正确接收Packet格式(3)--DataPIDToggle(3)•DataToggle用于数据的同步和重发–当ACK的传输被破坏Packet格式(4)•低速设备:支持最多3个端点•全速和高速设备:支持最多16个IN和OUT端点Packet格式(5)11位主机每发出一个帧,帧号都会自加1当帧号达到7FFH时,将归零重新开始计数仅在每个SOF帧的帧首传输帧号Packet格式(6)根据传输类型的不同,数据域的数据长度从0到1024字节不等。Packet格式(7)TokenCRC计算IN,OUT,和SETUPToken地址域的CRC计算SOFToken的帧号域的CRCG(X)=X5+X2+1DataCRC计算所有数据域数据的CRCG(X)=X16+X15+X2+1Packet类型•Packet分四大类:•命令(Token)Packet•帧首(StartofFrame)Packet•数据(Data)Packet•握手(Handshake)PacketPacket类型(1):TokenPacketPacket类型(2):StartofFramePacketPacket类型(3):DataPacketPacket类型(4):HandshakePacket传输类型USB协议定义了四种传输类型:•控制传输(ControlTransfers):突发,非周期性,由主机发起,用于命令和状态的传输。•同步传输(IsochronousTransfers):周期性,持续性的传输,用于传输与时效相关的信息,并且在数据中保存时间戳的信息。•中断传输(InterruptTransfers):周期性,低频率,允许有限延迟的通信。•大容量数据传输(BulkTransfers):非周期性,大容量突发数据的通信,数据可以占用任意带宽,并容忍延迟。USB设备的状态(1)USB设备的状态(2)USB设备的插入检测USB设备枚举•当一个USB设备插入主机后,会有以下活动:USB分类•从传输速度上区分:低速(1.5Mbps)、全速(12Mbps)和高速(480Mbps)。不同的设备要求的传输类型不同•从传输类型上区分:同步传输、批量传输、中断传输和控制传输。•功能设备根据数据量和通信特点又进行了多达18种的详细分类,包括人机接口类(HID,如键盘、鼠标),图像类(如打印机、扫描仪),大容量存储设备类(MessStorage,如优盘)等。注意:以上三种分类是典型分类方式,具体实物可以同时属于三类中的一种,比如鼠标既是低速设备,采用中断传输方式,又属于人机接口类。MSP430USB模块和函数库•在编程环境中,API被设计成自动适应选定设备。代码保持不变,但需选择正确的设备。三类USB设备(CDC/HID/MSC)共用一个USB分层,协议栈空间分为API空间和应用程序空间。应用程序发送和接收事务处理CDCAPIHIDAPIMSCAPIUSBAPI应用程序空间API空间MSP430头文件PLL锁相环模块PLL锁相环模块为USB操作提供高精度低抖动的48MHz的时钟。USBAPI•利用TI官方提供的USBAPI,实验者只需要大概知道USB运行原理,会调用API即可,无需透彻理解USB协议,也可以容易地完成USB驱动开发。•所有的通信协议都是由API自动处理。应用程序开发之前,用户必须通过MSP430USB描述符工具配置堆栈和USB描述符。用户没有必要修改API源代码•TI官方提供的库函数,如右图所示。USB文件(1)文件夹名称文件文件描述USB_API/USB_CDC_APIUsbCdc.h/.cCDC相关功能实现USB_API/USB_CommondefMSP430USB.h定义相关MSP430USB模块device.h控制设备衍生types.h数据类型定义usb.h/.cUsblsr.h所有USB应用共有函数dma.cDMA传输函数USB_API/USB_HID_APIUsbHid.h/.cUsbHidReportHandler.h/.cUsbHidReq.h/.cHID相关功能实现USB_API/USB_MSC_APIUsbMsc.hUsbMscReq.h/.cUsbMscScsi.h/.c