PIC18F2455/2550/4455/4550之通用串行总线USB
点中的每一个都有自己独立的控制寄存器UEPn(其中n 表示端点编号)。每个寄存器相应控制位的功能都是相同的。EPHSHK位控制端点握手,将此位置1将使能USB握手。 通常,除使用同步端点以外,此位总是置1 的。EPCONDIS位用于使能或禁止通过端点进行的USB控制操作(SETUP)。清零此位将使能SETUP 事务;注意必须将相应的EPINEN和EPOUTEN 位置1 以使能IN和OUT事务。 因为USB规范中端点0是默认控制端点,所以对于端点0 ,此位将总是被清零的。EPOUTEN 位用于使能或禁止主机的USBOUT事务。 将此位置1 则使能OUT事务。 同样,EPINEN 位将使能或禁止主机的 USB IN事务。EPSTALL 位用于指示端点的 STALL 状态。如果一个特殊的端点发出了一个STALL ,那么SIE 将把这对端点的EPSTALL位置1。 此位将保持置1 直到由固件清零或SIE 复位。
USB RAM:USB数据通过称为USB RAM的存储空间在单片机内核和SIE之间传送。 USB RAM 是一个特殊的双端口存储器,被映射到普通数据存储空间的Bank 4到Bank 7(400h到7FFh),总容量为 1KB。Bank 4 (400h到4FFh)专用于端点缓冲控制,而Bank 5到Bank7 可用于USB数据。根据所使用的缓冲类型,除了Bank 4的8 个字节之外,所有字节都可用作USB缓冲器空间。虽然USB RAM 可用作单片机的数据存储器,但由SIE访问的区域不能被单片机访问。这里采用了一种信号机制来确定任意给定时间内对专用缓冲器的访问。
帧:总线上的通信信息被划分为多个1ms的时隙,称为帧。每帧都包含多个设备和端点的多种事务。
USB规范中定义了四种传输类型:
• 同步:这种传输类型可确保及时传递大量数据(最大为1023字节),但是不能保证数据的完整性。 它适用于丢失少量数据无关紧要的通信应用,比如音频数据。
• 批量:这种传输类型允许在传输大量数据的同时确保数据的完整性,但是传输时限不能保证。
• 中断:这种传输类型可以确保及时传输少量数据,并确保数据的完整性。
• 控制:这种类型提供设备启动控制。全速设备支持所有传输类型,而低速设备只能使用中断和控制传输方式。
缓冲器描述符和缓冲器描述符表
Bank 4 中的寄存器组成称为"缓冲器描述符表"(Buffer Descriptor Table,BDT )的结构,专门用于控制端点缓冲器。 这为用户构建和控制各种长度和配置的端点缓冲器提供了灵活的方法。BDT 由缓冲描述符(Buffer Descriptor,BD)组成,它用于定义和控制USB RAM 空间中的实际缓冲器。 每个BD由四个寄存器组成,其中 n 代表64个可能的BD中的一个(范围是0 到63):
• BDnSTAT: BD 状态寄存器
• BDnCNT : BD 字节计数寄存器
• BDnADRL :BD低地址寄存器
• BDnADRH :BD高地址寄存器
BD 在序列中总是以一个四字节的数据块BDnSTAT:BDnCNT:BDnADRL:BDnADRH)出现, BDnSTAT的地址总是一个相对于400h的偏移量4n(以十六进制数表示),其中 n 是缓冲器描述符编号。根据所使用的缓冲配置(第17.4.4 节"乒乓缓冲"),最多可以有32、33或64组缓冲器描述符。 BDT 至少要8 字节长,因为USB规范规定,每个设备必须具有初始启动所需的输入和输出端点0。 根据端点和缓冲配置,BDT 可以有256 个字节。
虽然可以被看作特殊功能控制寄存器,缓冲器描述符的状态和地址寄存器并不是硬件映射的,这与 Bank 15 中的传统单片机SFR不同。 如果与特定BD对应的端点未被使能,则该端点的寄存器将不被使用。它表现为可用的RAM 空间,而不是未实现的地址。只能通过将UEPn《1》位置1 使能端点,才能将这些地址作为BD寄存器使用。 如同数据存储区的任何单元一样,BD寄存器的值在器件复位时都会是不确定的。
图17-6 所示为一个BD的示例,该 BD用于从500h开始的40字节缓冲器。 如果已经使用UEPn 寄存器使能了对应的端点,就只有特定的BD寄存器组有效。 USBRAM中所有BD寄存器都可用。 在使能端点之前应该设置好每个端点的BD。
BD状态和配置:缓冲器描述符不仅仅定义端点缓冲器的大小,还决定了它的配置和控制。 大部分配置都是通过BD状态寄存器BDnSTAT完成的。 每个BD都有与自己一一对应的、带编号的BDnSTAT寄存器。和其他控制寄存器不同,BDnSTAT 寄存器内的位的设置与具体应用息息相关。 有两种不同的配置,决定特定时间修改BD和缓冲区的是单片机还是USB模块。 只有一个位是这两种配置共享的。
缓冲器所有权:因为CPU和USB模块共享缓冲器及其BD,所以使用了简单的信号机制来区分更新BD 和相关缓冲器的是CPU还是USB。可以
- 基于PIC微控制器的LED驱动控制电路设计(06-24)
- EMI滤波器的PSpice辅助设计(11-07)
- 超声波测距系统中单片机的应用(10-07)
- 基于音频信号的WSN节点间距测量设计(10-09)
- 浅谈如何借用SEPIC电路拓扑改善LED系统性能(02-06)
- 通过两个PIC引脚驱动六只LED灯(08-02)