关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 位填充导致USB数据传输紊乱的一种解决方案

位填充导致USB数据传输紊乱的一种解决方案

作者:时间:2012-11-06来源:网络收藏

2)处理第2组并行数据时,由于需要添加,故第2组数据的处理时间需要9个clk周期。由于phy_clk的周期为8个clk周期,故第2组并行数据的持续时间为8个clk周期。于是第2组并行数据的最后一位还未发送,第3组数据已取代了第2组数据。
避免上述错误的常用方法是令hold_reg在其暂存的8位数都转换成串行数据sd_raw后再读取DataOut中的数,而不是在每个clk上升沿都读取。同时,每当添加了8个数据,就令TxReady=0并持续1个phy_clk周期,从而令DataOut暂停变化一次。这样做虽然解决了上述问题,但却带来了一个新的错误,如图3所示。

本文引用地址:http://www.eepw.com.cn/article/159707.htm

c.JPG


图3中,共要发送4组并行数据。假设发送完同步域后,hold_reg恰好在第一组数据的最后进行采样,则处理第2组数据时需要添加2个位,处理时间为10个clk周期。同时由于位填充没有达到8个,TxReady持续为1,DataOut每过8个clk就变换一次。结果导致第3组数据被错过,没有被hold_reg采样到。这种错误的发生概率虽然很小,但不能完全避免。
1.3 全速收发模式
全速模式下clk的频率为12 MHz,即1个clk周期为5个phy_clk周期。在接收数据时,当hold_reg集齐8位数据后,将其传输到Dataln中
并令RxValid=1且持续1个phy_clk,其余时刻令RxValid=0;在发送数据时,当hold_reg中的8位数据全部转换成串行数据后,令TxReady=1并持续1个phy_clk,其余时刻令TxReady_0。因而RxValid和TxReady信号为离散脉冲形式,且脉冲宽度为1个phy_clk周期,不会出现上述错误。
综上所述,USB 2.0传输中位填充造成数据总量的增减会影响的准确性,需加以解决。

2 解决方案
通过在收发器和协议层之间添加一个2x8位的异步FIFO作为缓存区,可以解决上述问题。如图4所示,异步FIFO的读操作与写操作分别由两个异步时钟clk1和clk2控制,异步复位信号rst同USB设备控制器的复位信号相同。

e.JPG


接收数据时,当hold_reg集齐8位数据,可在clk时钟控制下将其中的数据写入FIFO中;而在phy_clk上升沿,若FIFO中有数据,则令RxValid=1并读出1组并行数据传给协议层,否则令RxValid=0且不读数据。经分析,此处使用1x8位的FIFO足以满足要求,不会出现FIFO中有数据未读出新数据又写入的情况,但为了保证不出现特殊情况,这里使用2x8位的FIFO,以保证可靠性。
发送数据时,在phy_clk上升沿,若FIFO有空间,则令TxReady=1并将DataOut中的数据写入FIFO,否则令TxReady=0且不写入数据,当协议层数据全部发送完毕令TxReady=0;在FIFO写满的同时也令TxReady=0;当hold_reg中的数据全部转换为串行数据后,在clk时钟控制下从FIFO中取出一组数据放入hold_reg中;当FIFO中没有数据时,说明数据发送完毕,可以发包结束符。

3 仿真验证及实验结果分析
3.1 高速接收模式
当位填充较多致使数据处理时间过长,导致FIFO中没有数据时,RxValid变为了0且持续了1个phy_clk周期。从图中可看出输出数据DataIn在RxValid=1时的宽度都为1个phy_clk周期,没有出现多于1个phy_clk周期的情况。

d.JPG


3.2 高速发送模式
图6为高速发送模式的仿真结果。从图中可以看出,收发器工作正常,避免了上述错误的发生。在收发器还在发送同步域时,协议层就已经开始向FIFO中写数据,当写满FIFO后,TxReady变为0,协议层暂停向FIFO传输数据,直到FIFO有空间后才继续传输数据。同步域发送完毕后,hold_reg从FIFO中取出数据并依次发送,没有出现数据缺失或重复发送。从图中可看出从协议层输入的数据DataOut在TxReady=1时的宽度都为1个phy_clk周期,没有出现多于1个phy_clk周期的情况,从而不会被FIFO重复采样。
3.3 全速收发模式
据1.3中所述,全速收发模式不会出现类似错误,但若是全速高速模式使用不同的收发方式,会增加系统的复杂度和设计难度。异步FIFO同样可以用于全速收发模式,只需要将clk的频率变为12 MHz即可,其余与高速收发模式相同,在此不再赘述。

4 结束语
文中通过在收发器与协议层之间增加一个2x8位的异步FIFO作为缓存区,解决了USB 2.0设备控制器在过程中因位填充而造成的问题,使数据不会出现缺失或重复,类似方法和思想可以用于其他处理过程。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭