微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > PIC18F2455/2550/4455/4550之通用串行总线USB

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

时间:02-04 来源: 点击:

使用UOWN(BDnSTAT《7》)作为信号来加以区分。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《5》)决定BD 所有权的归属。 如果此位被置1,一旦 UOWN位被置1,BD将保持被SIE 拥有,而与端点活动无关。这将防止USTAT FIFO 被更新,同时防止端点的事务完成中断标志被置1 。 只有在选择并行端口而不是USB RAM作为数据I/O通道时,才使能此功能。

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

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

  

  缓冲器停止位BSTALL (BDnSTAT《2》)为控制传输提供支持,通常在端点0 只停止一次。它同时支持USB 规范第9 章中指定的SET_FEATURE/CLEAR_FEATURE命令,对默认控制端点外的任何端点为特有的连续STALL 。

  BSTALL 位使能缓冲器停止。如果接收到的令牌要使用单元中的BD,BSTALL 置1 将导致SIE 将STALL 令牌返回到主机。 相应的UEPn 控制寄存器中的EPSTALL位被置1,并且在发送STALL 到主机时产生STALL 中断。 UOWN 位保持置1 并且BD 不改变,除非接收到SETUP令牌。 在这种情况下,STALL 条件被清除并且BD的所有权返还给单片机内核。

  BD9:BD8 位(BDnSTAT《1:0》 )存储SIE 字节计数的高2 位,低8 位被存储在相应的BDnCNT 寄存器中。

  

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

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

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

BD地址验证:BD 地址寄存器对包含对应端点缓冲器的起始RAM地址。 为了让端点起始单元有效,它必须在 USB RAM 中(地址为400h到7FFh)。 硬件中没有相应的机制来验证BD地址。 如果BD地址未指向USB RAM 中的单元,或者指向另一个端点缓冲器中的地址,数据将很可能丢失或被改

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top