PIC18F2455/2550/4455/4550之通用串行总线USB

    PIC18FX455/X550 系列器件包含全速低速兼容的USB串行接口引擎(Serial Interface Engine,SIE),它允许在任何USB主机和PIC单片机之间进行高速通信。 可以利用内部收发器或通过外部收发器将SIE 直接连接到USB。内部的3.3V稳压器也可以在5V的应用中被用作内部收发器的电源。

    USB模块还包含了某些特殊硬件以提高其工作性能。在器件的数据存储空间(USB RAM)中提供了双端口存储器,以便单片机和 SIE 之间可以直接进行存储器访。 此外,还提供了缓冲器描述符,允许用户任意设置USB RAM 空间中供端点使用的存储区。 此外还提供了并行通信端口以方便大量数据的不间断传输,比如将数据等时传送到外部存储器缓冲器。

USB 状态和控制

? USB控制寄存器(UCON ):用于控制模块在传输过程中的操作, 此寄存器包含控制行为的配置位。USBEN,将此位置1 前还是需要预先对模块进行全面的配置。PKTDIS位,当接受到SETUP令牌时,此位被SIE置1,以允许处理SETUP。单片机不能将此位置1,只能将此位清零,以允许SIE继续发送和或接收。RESUME位,允许外设通过执行恢复信令来进行远程唤醒。 要进行有效的远程唤醒,固件必须将RESUME位置1 并保持此状态10 ms ,然后将此位清零。SUSPND 位将模块和支持电路(即稳压器)置于低功耗模式。 SIE 的输入时钟也被禁止。响应IDLEIF 中断时,该位必须由软件置位。 在产生ACTVIF 中断之后,由固件将此位复位。 当此位有效时,设备与与总线处于连接状态,但是收发器输出处于空闲状态。 VUSB引脚上的电压根据此位值的不同而变化。在 IDLEIF 请求之前将此位置1,将导致不可预料的总线行为。

? 帧编 寄存器(UFRMH:UFRML):帧编 寄存器包含 11 位帧编 低字节被保存在UFRML中,而高3 位则被保存在UFRMH 中。 不管是否接收到SOF令牌,都用当前帧编 更新该寄存器对。对于单片机而言,这些寄存器是只读的 帧编 寄存器主要用于同步传输

? 端点使能寄存器0 到15(UEPn):

USB 端点控制:16个可用的双向端点中的每一个都有自己独立的控制寄存器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 复位。

BD状态和配置:缓冲器描述符不仅仅定义端点缓冲器的大小,还决定了它的配置和控制。 大部分配置都是通过BD状态寄存器BDnSTAT完成的。 每个BD都有与自己一一对应的、带编 的BDnSTAT寄存器。和其他控制寄存器不同,BDnSTAT 寄存器内的位的设置与具体应用息息相关。 有两种不同的配置,决定特定时间修改BD和缓冲区的是单片机还是USB模块。 只有一个位是这两种配置共享的。

缓冲器所有权:因为CPU和USB模块共享缓冲器及其BD,所以使用了简单的信 机制来区分更新BD 和相关缓冲器的是CPU还是USB。可以使用UOWN(BDnSTAT)作为信 来加以区分。UOWN 是两种配置的BDnSTAT中唯一共享的位。

    当UOWN清零时,BD 由单片机内核“所有”。 当UOWN位置1 时,BD和缓冲器模块由USB外设“所有”,此时内核不能够修改 BD 或相应的数据缓冲器。注意,当SIE 拥有缓冲器时单片机内核仍可以读BDnSTAT ,反之亦然

    根据寄存器的更新源的不同,缓冲器描述符具有不同的意义。 在分配给USB外设所有权之前,用户可以通过BDnSTAT 配置外设的基本操作。 此时,也可设置字节计数和缓冲器地址寄存器。

    当UOWN置1 时,用户就不能再依赖写入BD的值了。此时,SIE 根据需要更新BD,改写原来的 BD值。 SIE将使用PID 令牌来更新 BDnSTAT 寄存器,同时也将更新传输计数值BDnCNT 。在准备设置端点之前,BDT 的BDnSTAT 字节总是最后更新的字节。 当事务完成时,SIE 将清零UOWN位。 唯一例外的情况是在使能KEN和/ 或BSTALL 的时候。当UOWN位置1 时,硬件上并没有任何机制来阻止单片机对存储区的访问。 因此,如果单片机尝试在 SIE 拥有USB RAM 时更改该存储区,可能会出现不可预料的后果。 同样,在USB外设将USB RAM 所有权归还给单片机之前,读该存储区也可能会导致数据出错。

   BDnSTAT 寄存器(CPU模式):当UOWN = 0 时,单片机内核拥有 BD。此时,该寄存器的其他七个位是控制位。保持使能位KEN(BDnSTAT)决定BD 所有权的归属。 如果此位被置1,一旦 UOWN位被置1,BD将保持被SIE 拥有,而与端点活动无关。这将防止USTAT FIFO 被更新,同时防止端点的事务完成中断标志被置1 。 只有在选择并行端口而不是USB RAM作为数据I/O通道时,才使能此功能。

   地址递增禁止位INCDIS (BDnSTAT)控制 SIE 的自动地址递增功能。INCDIS 置1 将禁止SIE 在发送或接收每个字节时自动递增缓冲器地址。只有在使用SPP端口时才使能此功能,此时每个数据字节都被发送到或来自同一个存储单元。

   数据Toggle 同步使能位DTSEN(BDnSTAT)控制数据传输的奇偶校验。将DTSEN置1 将使能SIE 的数据 Toggle 同步,将数据包的奇偶校验位对照 DTS(BDnSTAT)的值进行验证。 如果包不是同步到达的,数据将被忽略,不会被写入 USB RAM,并且 USB事务完成中断标志也不会被置1 。 SIE 将把ACK令牌发回给主机对接收作出应答。 表17-3 汇总了DTSEN位对SIE 的影响。

BDnSTAT 寄存器(SIE 模式):当BD及其缓冲器归SIE 所有时,BDnSTAT 中的大部分位都有了不同的定义。 配置如寄存器17-6所示。 一旦UOWN置1,以前用户写入的任何数据或控制设置都会被来自SIE 的数据改写。      SIE 使用令牌包标识符(Packet Identifier,PID )更新BDnSTAT寄存器,该PID 存储在BDnSTAT 中。对应的BDnCNT寄存器中的传输计数被更新,该八位寄存器的值溢出得到的计数值的高两位,被保存在BDnSTAT 中。

BD字节计数:字节计数代表将在一次IN 传输过程中被发送的字节总数。在IN传输之后,SIE 将返回发送到主机的字节数。在OUT传输过程中,字节计数代表可以被接收并存储到USB RAM 中的最大字节数。 在OUT传输之后,SIE将返回实际接收到的字节数。 如果接收到的字节数超过设定的字节计数,数据包将被拒绝,同时还将产生NAK握手。 发生这种情况时,字节计数不被更新。

  10位字节计数被分别保存到两个寄存器中。 低8 位在BDnCNT寄存器中。 高2 位在BDnSTAT 中。因此有效的字节计数范围是0 到1023。

BD地址验证:BD 地址寄存器对包含对应端点缓冲器的起始RAM地址。 为了让端点起始单元有效,它必须在 USB RAM 中(地址为400h到7FFh)。 硬件中没有相应的机制来验证BD地址。 如果BD地址未指向USB RAM 中的单元,或者指向另一个端点缓冲器中的地址,数据将很可能丢失或被改写。 同样,接收缓冲器(OUT端点)和正在使用的 BD单元重叠也将导致不可预料的结果。 在开发USB应用程序时,用户需要考虑在软件中对地址进行验证。

PIC18F2455/2550/4455/4550之通用串行总线USB

乒乓缓冲:当端点有两组BD项时(一组用于偶数数据传输,一组用于奇数数据传输),它被定义为具有乒乓缓冲器。 这样就允许在CPU处理一组BD的同时,SIE 处理另一组BD。这种方式的乒乓缓冲BD,可实现单片机与 USB之间的最大数据吞吐量。

USB模块支持三种模式的操作:

? 不支持乒乓缓冲

? 仅支持OUT端点0 的乒乓缓冲

? 支持所有端点的乒乓缓冲
使用UCFG 寄存器中的PPB1:PPB0位设置乒乓缓冲器。USB模块跟踪每个端点的乒乓指针。 当使能此模块时,所有指针都复位到指向偶数BD。 在事务完成之后(UOWN被SIE 清零),指针被切换到奇数BD。在下一次事务完成之后,指针又被切换回偶数BD上次事务的奇偶状态保存在USTAT寄存器的PPBI 位中。 用户可以使用PPBRST 位将所有乒乓指针复位到偶数状态。图17-7 显示了三种不同的操作模式以及BD是如何填充USB RAM 的。根据缓冲配置,BD与特定的端点具有固定的对应关系。表17-4 所示为BD与端点之间映射的详细情况。 这种关系也意味着如果没有连续使能端点,BDT 中将出现空白区域。 理论上被禁止的端点的BD可用作缓冲空间。 实际上,用户应该避免使用BDT 中的这些空间,除非已经采取了验证BD地址的措施。

USB 中断:USB模块可以产生多个中断条件。 要识别所有中断源,和单片机一样,此模块具有自己的中断逻辑结构。

USB 电源模式:最常见的电源模式有仅总线供电(Bus Power Only)、仅自供电(Self-Power Only)和以自供电为主的双电源(Dual Power)供电模式。

并行通信端口:并行通信端口(SPP)是除 USB RAM 之外用于数据传输的备用通道。 可以将端点配置为使用SPP将数据直接发送到外部硬件或直接接收来自外部硬件的数据。 

   此方法可以把单片机作为数据管理器,直接通过SPP传递大块的数据而无需单片机进行处理。 应用示例将包含数据采集系统,其中外部FIFO的数据通过USB和主机
进行通信。 在这种情况下,单片机控制端点,而原始数据的传送则靠外设完成。通过相关的端点缓冲器描述符将SPP 使能为USB端点的端口。 必须通过以下方法来使能端点:
1. 将BDnADRL:BDnADRH 设置为指向FFFFh 。
2. 将KEN位(BDnSTAT)置 1 以便让SIE 保持对缓冲器的控制。
3. 将INCDIS 位(BDnSTAT)置 1 以禁止地址自动递增。

振荡器:USB模块有特定的时钟要求。 在全速模式下,其时钟源必须为48 MHz。 即便如此,并不要求单片机内核和其他外设以此时钟速度运行或使用同一个时钟源。

USB 固件和驱动程序:Microchip 提供了一些针对应用的特定的资源,比如USB固件和驱动程序。 最新的固件和驱动程序请参见:www.microchip.com

 

相关资源:鸿威台球室计费系统说明书_棋牌室管理系统-专业指导文档类资源…

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2013年4月2日
下一篇 2013年4月3日

相关推荐