首页 USB的通讯协议(通俗易懂)

USB的通讯协议(通俗易懂)

举报
开通vip

USB的通讯协议(通俗易懂)null第16章 USB接口与编程实例第16章 USB接口与编程实例主要内容: USB概述 USB设备 USB物理特性 USB通信协议 JB8的USB模块的编程方法 16.1 USB概述16.1 USB概述USB协议有两种:USB1.1和USB2.0。USB2.0和USB1.1完全兼容。USB1.1支持的数据传输率为12Mbps和1.5Mbps(用于慢速外设),USB2.0支持的数据传速率可达480Mbps。在普通用户看来,USB系统就是外设通过一根USB电缆和PC机连接起来。通常把外设称为USB设备,把其所连接的...

USB的通讯协议(通俗易懂)
null第16章 USB接口与编程实例第16章 USB接口与编程实例主要内容: USB概述 USB设备 USB物理特性 USB通信 协议 离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载 JB8的USB模块的编程 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 16.1 USB概述16.1 USB概述USB协议有两种:USB1.1和USB2.0。USB2.0和USB1.1完全兼容。USB1.1支持的数据传输率为12Mbps和1.5Mbps(用于慢速外设),USB2.0支持的数据传速率可达480Mbps。在普通用户看来,USB系统就是外设通过一根USB电缆和PC机连接起来。通常把外设称为USB设备,把其所连接的PC机称为USB主机。将指向USB主机的数据传输方向称为上行通信,把指向USB设备的数据传输方向称为下行通信。 16.1 USB概述16.1 USB概述USB网络采用阶梯式星形拓扑结构,如图16-1。一个USB网络中只能有一个主机。主机内设置了一个根集线器,提供了主机上的初始附属点。图16-1 USB主机和USB设备的连接 16.1 USB概述16.1 USB概述主机定时对集线器的状态进行查询。当一个新设备接入集线器时,主机会 检测 工程第三方检测合同工程防雷检测合同植筋拉拔检测方案传感器技术课后答案检测机构通用要求培训 到集线器状态改变,主机发出一个命令使该端口有效并对其进行设置。位于这个端口上的设备进行响应,主机收到关于设备的信息,主机的操作系统确定对这个设备使用那种驱动程序,接着设备被分配一个唯一标识的地址,范围从0~127,其中0为所有的设备在没有分配惟一地址时使用的默认地址。主机向它发出内部设置请求。当一个设备从总线上移走时,主机就从其可用资源列表中将这个设备删除。 16.2 USB系统基本概念16.2 USB系统基本概念16.2.1 USB主机 USB的所有数据通信(不论是上行通信还是下行通信)都由USB主机启动,所以USB主机在整个数据传输过程中占据着主导地位。在USB系统中只允许有一个主机。从开发人员的角度看,USB主机可分为三个不同的功能模块:客户软件、USB系统软件和USB总线接口。 (1) 客户软件 (2) USB系统软件 (3) USB总线接口 16.2 USB系统基本概念16.2 USB系统基本概念16.2.1 USB主机 (1) 客户软件 客户软件负责和USB设备的功能单元进行通信,以实现其特定功能。一般由开发人员自行开发。客户软件不能直接访问USB设备,其与USB设备功能单元的通信必须经过USB系统软件和USB总线接口模块才能实现。客户软件一般包括USB设备驱动程序和界面应用程序两部分。 USB设备驱动程序负责和USB系统软件进行通信。通常,它向USB总线驱动程序发出I/O请求包(IRP)以启动一次USB数据传输。此外,根据数据传输的方向,它还应提供一个或空或满的数据缓冲区以存储这些数据。 界面应用程序负责和USB设备驱动程序进行通信,以控制USB设备。它是最上层的软件,只能看到向USB设备发送的原始数据和从USB设备接收的最终数据。16.2 USB系统基本概念16.2 USB系统基本概念16.2.1 USB主机 (2) USB系统软件 USB系统软件负责和USB逻辑设备进行配置通信,并管理客户软件启动的数据传输。USB逻辑设备是程序员与USB设备打交道的部分。USB系统软件一般包括USB总线驱动程序和USB主控制器驱动程序这两部分。这些软件通常由操作系统提供,开发人员不必掌握。 16.2 USB系统基本概念16.2 USB系统基本概念16.2.1 USB主机 (3) USB总线接口 USB总线接口包括主控制器和根集线器两部分。根集线器为USB系统提供连接起点,用于给USB系统提供一个或多个连接点(端口)。主控制器负责完成主机和USB设备之间数据的实际传输,包括对传输的数据进行串行编解码、差错控制等。该部分与USB系统软件的接口依赖于主控制器的硬件实现,开发人员不必掌握。 16.2 USB系统基本概念16.2 USB系统基本概念16.2.2 USB设备 一个USB设备由三个功能模块组成:USB总线接口、USB逻辑设备和功能单元。这里的USB总线接口指的是USB设备中的串行接口引擎(SIE);USB逻辑设备被USB系统软件看作是一个端点的集合;功能单元被客户软件看作是一个接口的集合。SIE、端点和接口都是USB设备的组成单元。为了更好地描述USB设备的特征,USB提出了设备架构的概念。从这个角度来看,可以认为USB设备是由一些配置、接口和端点组成的,即一个USB设备可以含有一个或多个配置,在每个配置中可含有一个或多个接口,在每个接口中可含有若干个端点。其中,配置和接口是对USB设备功能的抽象,实际的数据传输由端点来完成。在使用USB设备前,必须指明其采用的配置和接口。这个步骤一般是在设备接入主机时设备进行自举时完成的,我们在后面会进一步介绍。USB设备使用各种描述符来说明其设备架构,包括设备描述符、配置描述符、接口描述符、端点描述符以及字符串描述符,它们通常被保存在USB设备的固件程序中。 16.2 USB系统基本概念16.2 USB系统基本概念16.2.2 USB设备 ①设备 设备代表一个USB设备,它由一个或多个配置组成。设备描述符用于说明设备的总体信息,并指明其所含的配置的个数。一个USB设备只能有一个设备描述符。 ②配置 一个USB设备可以包含一个或多个配置,如USB设备的低功耗模式和高功耗模式可分别对应一个配置。在使用USB设备前,必须为其选择一个合适的配置。配置描述符用于说明USB设备中各个配置的特性,如配置所含接口的个数等。USB设备的每一个配置都必须有一个配置描述符。 ③接口 一个配置可以包含一个或多个接口,如对一个光驱来说,当用于文件传输时使用其大容量存储接口;而当用于播放CD时,使用其音频接口。接口是端点的集合,可以包含一个或多个可替换设置,用户能够在USB处于配置状态时,改变当前接口所含的个数和特性。接口描述符用于说明USB设备中各个接口的特性,如接口所属的设备类及其子类等。USB设备的每个接口都必须有一个接口描述符。16.2 USB系统基本概念16.2 USB系统基本概念16.2.2 USB设备 ④端点 端点是USB设备中的实际物理单元,USB数据传输就是在主机和USB设备各个端点之间进行的。端点一般由USB接口芯片提供,例如Freescale的MC68HC908JB8。USB设备中的每一个端点都有唯一的端点号,每个端点所支持的数据传输方向一般而言也是确定的:或是输入(IN)或是输出(OUT),也有些芯片提供的端点的数据方向是可以配置的,例如MC68HC908JB8包含有两个用于数据收发的端点:端点1和端点2。其中端点1只能用于数据发送,即支持输入(IN),端点2既能用于数据发送也可用于数据接收,即支持输入(IN)和输出(OUT)操作。需要注意的是,在这里数据的传输方向是站在主机的立场上来看得。比如端点1只能发送数据,在主机看来是端点1向主机输入数据,即IN操作;当端点2配置为接收数据时,主机向端点2输出数据,即OUT操作。这一点是初学者比较容易产生混淆的地方。 利用设备地址、端点号和传输方向就可以指定一个端点,并和它进行通信。 0号端点比较特殊,它有数据输入IN和数据输出OUT两个物理单元,且只能支持控制传输。 16.2 USB系统基本概念16.2 USB系统基本概念16.2.2 USB设备 ⑤字符串 在USB设备中通常还含有字符串描述符,以说明一些专用信息,如制造商的名称、设备的序列号等。它的内容以UNICODE的形式给出,且可以被客户软件所读取。对USB设备来说,字符串描述符是可选的。 ⑥管道 在USB系统结构中,可以认为数据传输是在主机软件(USB系统软件或客户软件)和USB设备的各个端点之间直接进行的,它们之间的连接称为管道。管道是在USB设备的配置过程中建立的。管道是对主机和USB设备间通信流的抽象,它表示主机的数据缓冲区和USB设备的端点之间存在着逻辑数据传输,而实际的数据传输是由USB总线接口层来完成的。 管道和USB设备中的端点一一对应。一个USB设备含有多少个端点,其和主机进行通信时就可以使用多少条管道,且端点的类型决定了管道中数据的传输类型,如中断端点对应中断管道,且该管道只能进行中断传输。传输类型在后面会介绍。不论存在着多少条管道,在各个管道中进行的数据传输都是相互独立的。16.3 USB物理特性16.3 USB物理特性 16.3.1 USB接口 USB使用一根屏蔽的4线电缆与网络上的设备进行互联。数据传输通过一个差分双绞线进行,这两根线分别标为D+和D-,另外两根线是Vcc和Ground,其中Vcc向USB设备供电。使用USB电源的设备称为总线供电设备,而使用自己外部电源的设备叫做自供电设备。为了避免混淆,USB电缆中的线都用不同的颜色标记,如表16-1所示。表16-1 USB缆线的信号与颜色 16.3 USB物理特性16.3 USB物理特性 16.3.1 USB接口 从一个设备连回到主机,称为上行连接;从主机到设备的连接,称为下行连接。为了防止回环情况的发生,上行和下行端口使用不同的连接器所以USB在电缆和设备的连接中分别采用了两种类型的连接头,即图16-2所示的A型连接头和B型连接头。每个连接头内的电线号与图16-2的引脚编号是一致的。A型连接头,用于上行连接,即在主机或集线器上有一个A型插座,而在连接到主机或集线器的电缆的一端是A型插头。在USB设备上有B型插座,而B型插头在从主机或集线器接出的下行电缆的一端。采用这种连接方式,可以确保USB设备、主机/集线器和USB电缆始终以正确的方式连接,而不出现电缆接入方式出错,或直接将两个USB设备连接到一起的情况。16.3 USB物理特性16.3 USB物理特性16.3.2 USB信号 差分信号技术特点 传统的传输方式大多使用“正信号”或者“负信号”二进制表达机制,这些信号利用单线传输。用不同的信号电平范围来分别表示1和0,它们之间有一个临界值,如果在数据传输过程中受到中低强度的干扰,高低电平不会突破临界值,那么信号传输可以正常进行。但如果遇到强干扰,高低电平突破临界值,由此造成数据传输出错。差分信号技术最大的特点是:必须使用两条线路才能表达一个比特位,用两条线路传输信号的压差作为判断1还是0的依据。这种做法的优点是具有极强的抗干扰性。倘若遭受外界强烈干扰,两条线路对应的电平同样会出现大幅度提升或降低的情况,但二者的电平改变方向和幅度几乎相同,电压差值就可始终保持相对稳定,因此数据的准确性并不会因干扰噪声而有所降低。 null(2)USB通信的格式 图16-3 在USB电缆上使用双向不归零编码和差动信号的传输 USB的数据包使用反向不归零编码(NRZI)。图16-3描述了在USB电缆段上传输信息的步骤。反向不归零编码由传送信息的USB代理程序完成;然后,被编码的数据通过差分驱动器送到USB电缆上;接着,接收器将输入的差分信号进行放大,将其送给解码器。使用该编码和差动信号传输方式可以更好地保证数据的完整性并减少噪声干扰。null(2)USB通信的格式 图16-4 反向不归零编码 使用反向不归零编码方式可以保证数据传输的完整性,而且不要求传输过程中有独立的时钟信号。反向不归零编码不是一个新的编码方式。它在许多方面都有应用。图16-4给出了一个数据流和编码之后的结果。在反向不归零编码时,遇到“0”转换,遇到“1”保持。反向不归零码必须保持与输入数据的同步性,以确保数据采样正确。反向不归零码数据流必须在一个数据窗口被采样,无论前一个位时间是否发生过转换。解码器在每个位时间采样数据以检查是否有转换。null(2)USB通信的格式 若重复相同的“1”信号一直进入时,就会造成数据长时间无法转换,逐渐的积累,而导致接收器最终丢失同步信号的状况,使得读取的时序会发生严重的错误。因此,在NRZI编码之间,还需执行所谓的位填充的工作。位填充要求数据流中如果有连续的六个“1”就要强行转换。这样接收器在反向不归零码数据流中最多每七个位就检测到一次跳转。这样就保证了接收器与输入数据流保持同步。反向不归零码的发送器要把“0”(填充位)插到数据流中。接收器必须被设计成能够在连续的六个“1”之后识别一个自动跳转,并且立即扔掉这六个“1”之后的“0”位。 图16-5的第一行是送到接收器的原始数据。注意数据流包括连续的八个“1”。第二行表示对原始数据进行了位填充,在原始的第六个和第七个“1”之间填入了一个“0”。第七个“1”延时一个位时间让填充位插入。接收器知道连续六个“1”之后将是一个填充位,所以该位就要被忽略。注意,如果原始数据的第七个位是“0”,填充位也同样插入,在填充过的数据流中就会有两个连续的“0”。 16.3 USB物理特性 16.3.3 检测设备连接和速度 16.3 USB物理特性 16.3.3 检测设备连接和速度在USB设备连接时,USB系统能自动检测到这个连接,并识别出其采用的数据传输速率。USB采用在D+或D-线上增加上拉电阻的方法来识别低速和全速设备。USB支持三种类型的传输速率:1.5Mb/s的低速传输、12Mb/s的全速传输和480Mb/s的高速传输。如图16-6和图16-7所示。当主控制器或集线器的下行端口上没有USB设备连接时,其D+和D-线上的下拉电阻使得这两条数据线的电压都是近地的(0V);当全速/低速设备连接以后,电流流过由集线器的下拉电阻和设备在D+/D-的上拉电阻构成的分压器。由于下拉电阻的阻值是15KΩ,上拉电阻的阻值是1.5KΩ,所以在D+/D-线上会出现大小为(Vcc*15/(15+1.5))的直流高电平电压。当USB主机探测到D+/D-线的电压已经接近高电平,而其它的线保持接地时,它就知道全速/低速设备已经连接了。 16.3 USB物理特性 16.3.3 检测设备连接和速度 16.3 USB物理特性 16.3.3 检测设备连接和速度低速USB设备电缆和电阻的连接 全速USB设备电缆和电阻的连接 16.4 USB的通讯协议16.4 USB的通讯协议16.4.1 包 包(Packet)是USB系统中信息传输的基本单元,所有数据都是经过打包后在总线上传输的。USB包由五部分组成,即同步字段(SYNC)、包标识符字段(PID)、数据字段、循环冗余校验字段(CRC)和包结尾字段(EOP),包的基本格式如下图: 1、SYNC字段:由8位组成,作为每个数据封包的前导,用来产生同步作用,使USB设备与总线的包传输率同步,它的数值固定为00000001。 2、PID字段:用来表示数据封包的类型。包标识符中的校验字段是通过对类型字段的每个位求反码产生的, PID字段如下图所示:表16-2中列出了信息包的类型,包括令牌、数据、握手或特殊四种信息包类型。 表16-2中列出了信息包的类型,包括令牌、数据、握手或特殊四种信息包类型。 表16-2 各种信息包的类型与规范 null3、数据字段:是用来携带主机与设备之间要传递的信息,其内容和长度根据包标识符、传输类型的不同而各不相同。在USB包中,数据字段可以包含设备地址、端点号、帧序列号以及数据等内容。在总线传输中,总是首先传输字节的最低位,最后传输字节的最高位。 (1) 设备地址(ADDR)数据域 ADDR数据域由7位组成,可用来寻址多达127个外围设备。 (2) 端点(ENDP)数据域 ENDP数据域由4位组成。通过这4个位最多可寻址出32个端点。这个ENDP数据域仅用在IN、OUT与SETUP令牌信息包中。对于慢速设备可支持端点0以及端点1作为中断传输模式,而全速设备则可以拥有16个输入端点(IN)与16个输出端点(OUT)共32个端点。 (3) 帧序列号 当USB令牌包的PID为SOF时,其数据字段必须为11位的帧序列号。帧序列号由主机产生,且每个数据帧自动加一,最大数值为0x7FF。当帧序列号达到最大数时将自动从0开始循环。 (4) 数据 它仅存于DATA信息包内,根据不同的传输类型,拥有不同的字节大小,从0到1023字节(实时传输)。null4、循环冗余码CRC字段由不同数目的位所组成。根据不同的信息包类型,CRC数据域由不同数目的位所组成。其中重要的数据信息包采用CRC16的数据域(16个位),而其余的信息包类型则采用CRC5的数据域(5个位)。其中的循环冗余码校验CRC,是一种错误检测技术。由于数据在传输时,有时候会发生错误,因此CRC可根据数据算出一个校验值,然后依此判断数据的正确性 5、包结尾字段即发送方在包的结尾发出包结尾信号。USB主机根据EOP判断数据包的结束。16.4.2信息包格式16.4.2信息包格式1.令牌(token)包 在USB系统中,只有主机才能发出令牌包。令牌包定义了数据传输的类型,它是事务处理的第一阶段。令牌包中较为重要的是SETUP、IN和OUT这三个令牌包。它们用来在根集线器和设备端点之间建立数据传输。一个IN包用来建立一个从设备到根集线器的数据传送,一个OUT包用来建立从根集线器到设备的数据传输。令牌包格式如下:2.数据(data)包 数据封包含有4个域:SYNC、PID、DATA与CRC16。DATA数据域的位值是根据USB设备的传输速度及传输类型而定,且须以8字节为基本单位。也就是,若传输的数据不足8字节,或传输到最后所剩余的也不足8字节,仍须传输8字节的数据域。格式如下: 3. 握手(Handshake)包 握手信息包是最简单的信息包类型。在这个握手信息包中仅包含一个PID数据域而已,它的格式如下所列: 16.4.3事务16.4.3事务在USB上数据信息的一次接收或发送的处理过程称为事务处理(Transaction)。事务处理的类型包括输入(IN)事务处理、输出(OUT)事务处理、设置(SETUP)事务处理和帧开始、帧结尾等类型。在输出(OUT)事务处理和设置(SETUP)事务处理中,紧接着SETUP和OUT包后的是DATA包,DATA0和DATA1包是交替地发送的,在DATA包后面,设备将回应一个握手信号,如果设备可以接收数据,就回应ACK包,如果设备忙,就回应NAK包,如果设备出错,则回应STALL包;在IN事务中,IN包后面是设备发来的DATA包或NAK包或STALL包,若设备忙或出错,就发NAK包或STALL包给主机,若设备数据准备好发送,则发DATA包,DATA0和DATA1包也是交替地发送的,紧接着DATA包后面是主机发给设备的握手包,ACK表示主机可以接收数据,NAK包代表主机忙,STALL包代表主机出错。 16.4.3事务16.4.3事务 1.输入(IN)事务处理 输入事务处理表示USB主机从总线上的某个USB设备接收一个数据包的过程。 ①正常的输入事务处理 ②设备忙时的输入事务处理 ③设备出错时的输入事务处理 2.输出(OUT)事务处理2.输出(OUT)事务处理①正常的输出事务处理 ②设备忙时的输出事务处理③设备出错时的输入事务处理3.设置(SETUP)事务处理3.设置(SETUP)事务处理①正常的设置事务处理 ②设备忙时的设置事务处理③设备出错时的设置事务处理16.4.4 USB传输类型16.4.4 USB传输类型在USB的传输中,制定了4种传输类型:控制传输、中断传输、批量传输以及等时传输。控制传输类型分为2~3个阶段:设置阶段、数据阶段(无数据控制没有此阶段)以及状态阶段。根据数据阶段的数据传输的方向,控制传输又可分为3种类型:控制读取(读取USB描述符)、控制写入(配置USB设备)以及无数据控制。 1.控制传输 控制传输是USB传输中最重要的传输。它包含3种类型:控制读取、控制写入以及无数据控制。这3种控制传输类型又分为2~3个阶段:设置阶段、数据阶段(无数据控制没有此阶段)以及状态阶段。 阶段一:设置阶段 主机从USB设备获取配置信息,并设置设备的配置值。 设置阶段的数据交换包含了SETUP令牌封包、紧随其后的DATA0数据封包以及ACK握手封包。它的作用是执行一个设置(概念含糊)的数据交换,并定义此控制传输的内容。 阶段二:数据传输阶段阶段二:数据传输阶段数据传输阶段用来传输主机与设备之间的数据。控制读取是将数据从设备读到主机上,读取的数据USB设备描述符。该过程如图16-8所示。对每一个数据信息包而言,首先,主机会发送一个IN令牌信息包,表示要读数据进来。然后,设备将数据通过DATA1数据信息包回传给主机。最后,主机将以下列的方式加以响应:当数据已经正确接收时,主机送出ACK令牌信息包;当主机正在忙碌时,发出NAK握手信息包;当发生了错误时,主机发出STALL握手信息包。 控制写入则是将数据从主机传到设备上,所传的数据即为对USB设备的配置信息,该过程如图16-9所示。对每一个数据信息包而言,主机将会送出一个OUT令牌信息包,表示数据要送出去。紧接着,主机将数据通过DATA0数据信息包传递至设备。最后,设备将以下列方式加以响应:当数据已经正确接收时,设备送出ACK令牌信息包;当设备正在忙碌时,设备发出NAK握手信息包;当发生了错误时,设备发出STALL握手信息包。阶段三:状态阶段阶段三:状态阶段状态阶段用来表示整个传输的过程已完全结束。 状态阶段传输的方向必须与数据阶段的方向相反,即原来是IN令牌封包,这个阶段应为OUT令牌封包;反之,原来是OUT令牌封包,这个阶段应为IN令牌封包。对于控制读取而言,主机会送出OUT令牌封包,其后再跟着0长度的DATA1封包。而此时,设备也会做出相对应的动作,送ACK握手封包、NAK握手封包或STALL握手封包。相对地对于控制写入传输,主机会送出IN令牌封包,然后设备送出表示完成状态阶段的0长度的DATA1封包,主机再做出相对应的动作:送ACK握手封包、NAK握手封包或STALL握手封包。null2.实时传输 实时传输适用于必须以固定速率抵达或在指定时刻抵 达,可以容忍偶尔错误的数据上。实时传输一般用于麦 克风、喇叭等设备。 实时传输只需令牌与数据两个信息包阶段,没有握手 包,故数据传错时不会重传。 3.批量传输 用于传输大量数据,要求传输不能出错,但对时间没有 要求,适用于打印机、存储设备等。 4.中断传输 中断传输方式总是用于对设备的查询,以确定是否有数 据需要传输。因此中断传输的方向总是从USB设备到主 机。16.4.5设备列举16.4.5设备列举1.描述符 USB描述符就好像是USB外围设备的“身份证”一样,详细地 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 着外围设备相关的一切信息。为了描述不同的数据,就需以不同类型的USB描述符来加以描述,它共有以下几种类型:设备描述符、配置描述符、接口描述符和端点描述符,这几个描述符是必须具有的,下面将结合实例详细介绍;其他的描述符,例如,字符串描述符、数种不同的群组描述符以及报告描述符则可以根据不同的设备进行选择。16.4.5设备列举16.4.5设备列举(1)设备描述符 16.4.5设备列举16.4.5设备列举(1)设备描述符 16.4.5设备列举16.4.5设备列举(2)配置描述符 16.4.5设备列举16.4.5设备列举(3)接口描述符 16.4.5设备列举16.4.5设备列举(4)端点描述符 16.4.5设备列举16.4.5设备列举(4)端点描述符 2 . USB设备请求 2 . USB设备请求 1.清除请求(Clear Feature) 2.获得描述符(Get Descriptor) 3.设置地址(Set Address) 4.设置状态(Set Configuration)几个主要的设备请求2 . USB设备请求 2 . USB设备请求 下面结合实例分别介绍几个主要的设备请求。 (1) 清除特性(Clear Feature) 该请求是用来取消一个特性,其格式如下: 该请求中的wValue表示特性选择器,它对应的值为:0=端点,1=设备。当某个特点不允许取消,或该特性根本不存在,或者是指向一个根本不存在的接口或端点时,该请求将会导致设备请求失败。如果端点被固件设为停止状态,主机软件(总线驱动程序)也可以发送一个值为0的CLEAR_FEATURE命令清除该端点的停止状态,本实例中就是这样使用该请求的。2 . USB设备请求 2 . USB设备请求 (2) 取得描述符(Get Descriptor) 该请求可以取得USB设备中存在的特定的描述符,其格式如下: 该请求中的wValue的高字节表示要取的描述符类型,低字节表示描述符的索引值,描述的类型有:1表示设备描述符,2表示配置描述符,3表示字符串描述符,4表示接口描述符,5表示端点描述符。wIndex的值为0或语言ID;当要取的描述符是字符串描述符时,该域的值为语言ID;当为其他的描述符时,该域为0。wLength表示要返回的数据长度,如果SETUP阶段的地址使用的是预设地址0(ENDP字段为0),这时的wLength值会大于实际的描述的值。这是为什么呢?原因是用户以预设的地址0来取得设备描述符时,不管设多少字节,用户最多只取其前8字节,即在控制传输过程只有一次数据阶段。但是,如果用户以新的地址(ENDP字段不为0)来取得设备描述符时,这时wLength的值就要注意了。2 . USB设备请求 2 . USB设备请求 (3) 设置地址(Set Address) 该请求给USB设备设置地址,从而可以对该USB设备进行进一步的访问。其格式如下: 该请求与其他的请求有一个重要的不同点,该请求下,USB设备一直不改变它的地址,直到该请求的状态阶段被成功地完成,而其他请求的操作都是在状态阶段之前完成,可以阅读本实例加深对该点的理解。若特定的设备地址大于127,或者wIndex 或wLength为非0值,那么该请求不执行。2 . USB设备请求 2 . USB设备请求 (4) 设置配置(Set Configuration) 该请求对设备进行设置。其格式如下: 该请求中的wValue域的低字节表示设置的值,该值必须为0或者与配置描述符中的配置值相匹配。如果设置值等于0,表示设备在地址状态。如果wIndex 或 wLength为非0值,那么该请求不执行。 null 3 .设备列举 设备列举可以简单地概括为这样的一个过程:主机通过USB设备请求来取得设备描述符并对该设备进行配置。该过程可以简化为如下5个步骤: 第一步,使用预设的地址0取得设备描述符。 第二步,设置设备的新地址。 第三步,使用新地址取得设备描述符。 第四步,取得配置描述符。 第五步,设置配置描述符。 设备列举使用的是控制传输。上述的5个步骤必须符合控制传输的基本架构,第一步、第三步和第四步使用的是控制读取,第二步和第五步使用的是无数据控制。16.5 JB8 USB模块的编程方法16.5 JB8 USB模块的编程方法16.5.1 MC68HC908JB8简介 1.MC68HC908JB8 单片机的性能概述 ①3MHz内部总线频率。 ②64字节I/O寄存器区。 ③256字节的片内RAM。 ④8192字节的片内Flash存储器,具有在线编程能力和保密功能。 ⑤976字节监控ROM。 ⑥16字节用户定义矢量区。 ⑦2个16位双通道定时器接口模块,每个通道可选择为输入捕捉、输出比较和脉宽调制输出。 ⑧内置USB模块,遵循USB1.1协议。16.5 JB8 USB模块的编程方法16.5 JB8 USB模块的编程方法16.5.1 MC68HC908JB8简介 2.引脚功能 JB8具有20、28、44三种封装形式,下面以44引脚封装的JB8为例,介绍其引脚功能。 ①电源类引脚 VDD、VSS(2脚、42脚):电源供给端; VREG(1脚):为3.3V输出,其主要用于USB数据驱动的电压调制; ②控制类引脚 (36脚):外部低有效复位输入或输出脚,有内部上拉电阻; (18脚):外部中断输入脚,有内部上拉电阻; ③I/O类引脚 PTA7/KBA7~PTA0/KBA0 (22~25、32~35脚):8位通用双向I/O口; PTB7~PTB0 (37~41、3~5脚):8位通用双向I/O口; PTC7~PTC0 (31~28、17~14脚):8位通用双向I/O口; PTD7~PTD0 (19~21、10~6脚):8位通用双向I/O口; PTE4/D-、PTE3/D+ (13、12脚):2位通用双向I/O口;D-、D+用于USB模块;PTE4/D-还可编程对IRQ中断进行触发; PTE2/TCH1 、PTE1/TCH0 、PTE0/TCLK (26、11、27脚):3位通用双向I/O口;TCH1、TCH0、TCLK用于定时器模块TIM; ④其它 OSC1、OSC2 (43、44脚):片内振荡器引脚。nullJB8具有20、28、44三种封装形式,不同封装只是引脚数量和形式有所区别,其它方面是一致的,JB8单片机的封装见图16-10所示,其中a,b,c分别给出了28,20,44三种封装形式的管脚图。16.5.1 MC68HC908JB8简介16.5.1 MC68HC908JB8简介 3.JB8存储器组织 CPU08可寻址64K地址空间,所以它的地址范围是$0000~$FFFF,在这$0000~$FFFF的寻址范围内,分成多个不同区段,每个区段的作用不同。MC68HC908JB8单片机的存储器组织及地址分配见图16-11。图16-11 JB8存储映像图 null16.5.2 USB功能模块 USB功能模块可以内嵌在芯片中,也可以外扩。MC68HC908JB8使用了内嵌的USB功能模块,如右图所示。(1) USB收发器:USB的D+和D-数据提供了接口。 (2)USB控制逻辑 :处理CPU和收发器之间的数据移动。 (3)USB寄存器:USB寄存器是用来控制和监控USB操作。 (4)USB复位信号:(5)USB悬挂 (6)USB低速设备 16. 5. 3 USB寄存器16. 5. 3 USB寄存器USB寄存器是用来控制和监视USB操作的,MC68HC908JB8中USB寄存器有如下几种:地址寄存器(ADDR)、控制寄存器0-4(UCR0-UCR4)、状态寄存器0-1(USR0-USR1)、中断寄存器0-2(UIR0-UIR2)、端点0数据寄存器0-7(UE0D0-UE0D7)、端点1数据寄存器0-7(UE1D0-UE1D7)和端点2数据寄存器0-7(UE2D0-UE2D7)。下面分别介绍这些寄存器。16. 5. 3 USB寄存器16. 5. 3 USB寄存器1)USB地址寄存器(UADDR) UADDR的地址:$0038,定义如下: D7 — USBEN位:USB模块允许位。USBEN=1,允许USB模块,并且PTE4中断不允许;USBEN=0,不允许USB模块,包括USB中断、复位以及复位中断都不允许,并且PTE4/D-和PTE3/D+用作高电流开漏输入输出口PTE4和PTE3。可读写位。 D6~D0 — UADD6~UADD0:USB模块的地址。都是可读写位。16. 5. 3 USB寄存器16. 5. 3 USB寄存器2)USB中断寄存器0(UIR0) UIR0的地址:$0039,定义如下: D7 — EOPIE位:EOP检测中断允许位。可读写位,EOPIE=1,如果EOP被检测到,能产生一个CPU中断请求;EOPIE=0,如果EOP被检测到,不能产生一个CPU中断请求。 D6 — SUSPND位:USB挂起位。可读写位,如果USB总线上连续3ms处于闲置状态,则该位将会被软件置位。置该位可以将收发器处于节能模式。在置该位之前,RESUMF标志位必须清零;在RESUMF置位后,软件必须清掉该位。 D5 — TXD2IE位:端点2输出中断允许位。可读写位,TXD2IE=1,输出端点2能产生一个CPU中断请求;TXD2IE=0,输出端点2不能产生一个CPU中断请求。 D4 — RXD2IE位:端点2接收中断允许位。可读写位,RXD2IE=1,输入端点2能产生一个CPU中断请求;RXD2IE =0,接收端点2不能产生一个CPU中断请求。 D3 — TXD1IE位:端点1输出中断允许位。可读写位,TXD1IE=1,输出端点1能产生一个CPU中断请求;TXD1IE=0,输出端点1不能产生一个CPU中断请求。 D1 — TXD0IE位:端点0输出中断允许位。可读写位,TXD0IE=1,输出端点0能产生一个CPU中断请求;TXD0IE=0,输出端点0不能产生一个CPU中断请求。 D0 — RXD0IE位:端点0接收中断允许位。可读写位,RXD0IE=1,输入端点0能产生一个CPU中断请求;RXD0IE =0,接收端点0不能产生一个CPU中断请求。16. 5. 3 USB寄存器16. 5. 3 USB寄存器3)USB中断寄存器1(UIR1) UIR1的地址:$003A,定义如下: 该寄存器所有的位均为只读位。 D7 — EOPF位:EOP检测标志位。EOPF=1,EOP被检测到;EOPF=0,EOP没有被检测到。 D6 — RSTF位:USB复位标志位。在D+和D-上,当一个合法的复位信号状态被检测到,该位被置1。 D5 — TXD2F位:端点2输出标志位。当存放在端点2输出缓冲区中的数据被送出,并且接收到一个从主机发送的ACK握手包,该位被置1。 D4 — RXD2F位:端点2数据接收标志位。当USB模块接收到了一个数据包,并返回一个ACK握手包后,该位被置1。 D3 — TXD1F位:端点1输出标志位。当存放在端点1输出缓冲区中的数据被送出,并且一个从主机发送的ACK握手包被接收到,该位被置1。 D2 — RESUMF位:唤醒标志位。当SUSPND位置1,并且USB总线被激活,该位被置1。 D1 — TXD0F位:端点0输出标志位。当存放在端点0输出缓冲区中的数据被送出,并且一个从主机发送的ACK握手包被接收到,该位被置1。 D0 — RXD0F位:端点0数据接收标志位。当USB模块接收到了一个数据包,并返回一个ACK握手包后,该位被置1。 16. 5. 3 USB寄存器16. 5. 3 USB寄存器4)USB中断寄存器2(UIR2) UIR2的地址:$001B,定义如下: 该寄存器所有的位均为只写位。 D7 — EOPFR位:EOP标志位复位。写“1”到该位将清EOPF位,写“0”到该位不产生任何影响。复位将清该位。 D6 — RSTFR位:清复位指示器位。写“1”到该位将清RSTF位,写“0”到该位不产生任何影响。复位将清该位。 D5 — TXD2FR位:端点2输出标志位复位。写“1”到该位将清TXD2F位,写“0”到该位不产生任何影响。复位将清该位。 D4 — RXD2FR位:端点2数据接收标志位复位。写“1”到该位将清RXD2F位,写“0”到该位不产生任何影响。复位将清该位。 D3 — TXD1FR位:端点1输出标志位复位。写“1”到该位将清TXD1F位,写“0”到该位不产生任何影响。复位将清该位。 D2 — RESUMFR位:唤醒标志位复位。写“1”到该位将清RESUMF位,写“0”到该位不产生任何影响。复位将清该位。 D1 — TXD0FR位:端点0输出标志位复位。写“1”到该位将清TXD0F位,写“0”到该位不产生任何影响。复位将清该位。 D0 — RXD0FR位:端点0数据接收标志位复位。写“1”到该位将清RXD0F位,写“0”到该位不产生任何影响。复位将清该位。16. 5. 3 USB寄存器16. 5. 3 USB寄存器5)USB控制寄存器0(UCR0) UCR0的地址:$003B,定义如下: D7 — T0SEQ位:端点0输出序列位。该位为可读可写位,它决定端点0的下一个IN事务发何种类型的数据包(DATA0或者DATA1)。TOSEQ=1,表示端点0下一个发送的是DATA1包,TOSEQ=0,表示端点0下一个发送的是DATA0包。复位将清除该位。 D5 — TX0E位:端点0输出允许位。该位为可读可写位,当USB主控制器向端点0发送一个IN事务时,该位可以允许发送。当数据准备好发送后,软件应该将该位置“1”,当端点0没有数据被发送时,该位必须被清“0”。如果该位是“0”,或者TXD0F位为“1”,USB设备将对端点0的任何一个IN事务返回一个NAK握手包。复位将清除该位。TX0E=1,表示数据准备好,可以发送,TX0E=0,表示数据没准备好,以NAK包作为回应。 D4 — RX0E位:端点0接收允许位。该位为可读可写位,当USB主控制器向端点0发送一个OUT事务时,该位可以允许接收。当准备好接收数据后,软件应该将该位置“1”,当没有数据被接收时,该位必须被清“0”。如果该位是“0”,或者RXD0F位为“1”,USB设备将对端点0的任何一个OUT事务返回一个NAK握手包,但是对SETUP事务将不作反应。复位将清除该位。RX0E=1,表示可以接收数据, RX0E=0,表示不可以接收数据,以NAK包作为回应。 D3~D0 — TP0SIZ3~TP0SIZ0位:端点0输出数据包大小。这些位为可读可写位,这几位存储的是端点0下一个IN事务发送数据的个数。复位将清除这几位。16. 5. 3 USB寄存器16. 5. 3 USB寄存器6)USB控制寄存器1(UCR1) UCR1的地址:$003C,定义如下: D7 — T1SEQ位:端点1输出序列位。该位为可读可写位,它决定端点1的下一个IN事务发何种类型的数据包(DATA0或者DATA1)。T1SEQ=1,表示端点1下一个发送的是DATA1包,T1SEQ=0,表示端点1下一个发送的是DATA0包。复位将清除该位。 D6 — STALL1位:端点1强制发STALL位。该位为可读可写位,当USB主控制器发送一个IN事务或OUT事务时,该位将使端点1发送一个STALL握手包。复位将清除该位。STALL1=1,表示发送STALL握手包。STALL=0,默认状态。 D5 — TX1E位:端点1输出允许位。该位为可读可写位,如果UCR3寄存器中的ENABLE1位(端点1使能位)被置1,当USB主控制器向端点1发送一个IN事务时,该位可以允许发送。当数据准备好发送后,软件应该将该位置“1”,当端点1没有数据被发送时,该位必须被清“0”。如果该位是“0”,或者TXD1F位为“1”,USB设备将对端点1的任何一个IN事务返回一个NAK握手包。复位将清除该位。TX1E=1,表示数据准备好,可以发送,TX1E=0,表示数据没准备好,以NAK包作为回应。 D4 — FRESUM位:强制唤醒位。 D3~D0 — TP1SIZ3~TP1SIZ0位:端点1输出数据包大小。这些位为可读可写位,这几位存储的是端点1下一个IN事务发送数据的个数。复位将清除这几位。16. 5. 3 USB寄存器16. 5. 3 USB寄存器7)USB控制寄存器2(UCR2) UCR2的地址:$0019,定义如下: D7 — T2SEQ位:端点2输出序列位。该位为可读可写位,它决定端点2的下一个IN事务发何种类型的数据包(DATA0或者DATA1)。T2SEQ=1,表示端点2下一个发送的是DATA1包,T2SEQ=0,表示端点2下一个发送的是DATA0包。复位将清除该位。 D6 — STALL2位:端点2强制发STALL位。该位为可读可写位,当USB主控制器发送一个IN事务或OUT事务时,该位将使端点2发送一个STALL握手包。复位将清除该位。STALL1=1,表示发送STALL握手包。STALL=0,默认状态。 D5 — TX2E位:端点2输出允许位。该位为可读可写位,如果UCR3寄存器中的ENABLE2位(端点2使能位)被置位,当USB主控制器向端点2发送一个IN事务时,该位可以允许发送。当数据准备好发送后,软件应该将该位置“1”,当端点2没有数据被发送时,该位必须被清“0”。如果该位是“0”,或者TXD2F位为“1”,USB设备将对端点2的任何一个IN事务返回一个NAK握手包。复位将清除该位。TX2E=1,表示数据准备好,可以发送,TX2E=0,表示数据没准备好,以NAK包作为回应。 D4 — RX2E位:端点2接收允许位。端点2接收允许位。该位为可读可写位,当USB主控制器向端点2发送一个OUT事务时,该位可以允许接收。当准备好接收数据后,软件应该将该位置“1”,当没有数据被接收时,该位必须被清“0”。如果该位是“0”,或者RXD2F位为“1”,USB设备将对端点2的任何一个OUT事务返回一个NAK握手包。复位将清除该位。RX2E=1,表示可以接收数据, RX2E=0,表示不接收数据,以NAK包作为回应。 D[3:0] — TP2SIZ[3:0]位:端点2输出数据包大小。这些位为可读可写位,这几位存储的是端点2下一个IN事务发送数据的个数。复位将清除这几位。16. 5. 3 USB寄存器16. 5. 3 USB寄存器8)USB控制寄存器3(UCR3) UCR3的地址:$001A,定义如下: D7 — TX1ST位:端点0传输起始标志。该位为1,表示IN传输包发生在SETUP/OUT包之前;为0,表示IN传输包发生在SETUP/OUT包之后。 该位为只读位。 D6 — TX1STR位:写1到该位将清除TX1ST位,写0不产生影响。 D5 — OSTALL0位:端点0的OUT包STALL位。该位为1,表示发送STALL握手信号,0为默认值。 D4 — ISTALL0位:端点0的IN包STALL位。该位为1,表示发送STALL握手信号,0为默认值。 D2 — PULLEN位:上拉允许位。该位为1,表示D-脚有内部上拉,0表示D-脚没接内部上拉。 D1 — ENABLE2位:端点2允许位。1为允许,0为不允许。 D0 — ENABLE1位:端点1允许位。1为允许,0为不允许。16. 5. 3 USB寄存器16. 5. 3 USB寄存器9)USB控制寄存器4(UCR4) UCR4的地址:$001B,定义如下: D2 — FUSBO位:该位若为1,表示使能USB输出缓冲;该位若为0,表示USB模块处于默认操作状态。 D1 — FDP位:该位若为1,表示D+处于输出高电平状态;该位若为0,表示D+处于输出低电平状态。 D0 — FDM位:该位若为1,表示D-处于输出高电平状态;该位若为0,表示D-处于输出低电平状态。16. 5. 3 USB寄存器16. 5. 3 USB寄存器10)USB状态寄存器0(USR0) USR0的地址:$003E,定义如下: D7 — R0SEQ位:端点0接收序列位。为1,表示上一次端点2接收的是DATA1;为0,表示上一次端点2接收的是DATA0。 D6 — SETUP位:SETUP包检测位。为1,表示上一次端点0接收的是一个SETUP包;为0,表示上一次端点0接收的不是SETUP包。 D3~D0 — RP0SIZ3~RP0SIZ 0位:端点0接收数据包大小。16. 5. 3 USB寄存器16. 5. 3 USB寄存器11)USB状态寄存器1(USR1) USR1的地址:$003E,定义如下: D7 — R2SEQ位:端点2接收序列位。为1,表示上一次端点2接收的是DATA1;为0,表示上一次端点2接收的是DATA0。 D6 — TXACK位:ACK包传输位。为1,表示上一次端点0发送的是一个ACK包;为0,表示上一次端点0发送的不是ACK包。 D5 — TXANK位:NAK包传输位。为1,表示上一次端点0发送的是一个NAK包;为0,表示上一次端点0发送的不是NAK包。 D4 — TXSTL位:STALL包传输位。为1,表示上一次端点0发送的是一个STALL包;为0,表示上一次端点0发送的不是STALL包。 D3~D0 — RP2SIZ3~RP2SIZ 0位:端点2接收数据包大小。16. 5. 3 USB寄存器 12) USB端点0数据寄存器(UE0D0-UE0D7) UE1D0-UE1D7的地址是从$0020-$0027。可读可写。 13) USB端点1数据寄存器(UE1D0-UE1D7) UE1D0-UE1D7的地址是从$0028-$002F。只写。 14) USB端点2数据寄存器(UE2D0-UE2D7) UE1D0-UE1D7的地址是从$0030-$0037。可读可写。16. 5. 3 USB寄存器 12) USB端点0数据寄存器(UE0D0-UE0D7) UE1D0-UE1D7的地址是从$0020-$0027。可读可写。 13) USB端点1数据寄存器(UE1D0-UE1D7) UE1D0-UE1D7的地址是从$0028-$002F。只写。 14) USB端点2数据寄存器(UE2D0-UE2D7) UE1D0-UE1D7的地址是从$0030-$0037。可读可写。16.5.4 USB中断16.5.4 USB中断USB模块中断有三种类型: ● 当接收或发送事务完成时,产生事务结束中断; ● 当USB总线悬挂后被激活时,产生唤醒中断; ● 当检测到一个低速的包结束信号时,产生结束中断。 所有的中断共享同一个中断向量,由中断程序区分产生的是什么中断。16.5.5 JB8 USB1.1通信编程16.5.5 JB8 USB1.1通信编程USB中断处理 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 图USB中断服务程序USB中断服务程序端点1和端点2利用查询方式发送和接收数据的编程方法,包括:USB初始化、发送字节和接收字节。 (1)USB初始化 (2)发送数据子程序 (3)接收数据子程序 端点1发送、接受数据的流程图端点1发送、接受数据的流程图USB中断服务程序USB中断服务程序(1)USB初始化 USB中断服务程序USB中断服务程序(2)发送数据子程序 USB中断服务程序USB中断服务程序(2)发送数据子程序 USB中断服务程序USB中断服务程序(3)接收数据子程序 null16.6 PC机方USB1.1编程实例16.6.1 PC机方USB1.1编程步骤 1.选择并安装合适的USB1.1驱动程序 2.选择一种高级语言,参照驱动程序的相关文档进行编程 (1)
本文档为【USB的通讯协议(通俗易懂)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_844678
暂无简介~
格式:ppt
大小:849KB
软件:PowerPoint
页数:0
分类:互联网
上传时间:2013-01-31
浏览量:19