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

发布者:塞上老马最新更新时间:2012-11-08 来源: 现代电子技术 关键字:通用串行总线  位填充  存储器  数据紊乱 手机看文章 扫描二维码
随时随地手机看文章
    在USB数据传输中,为了保证数据的可靠性,需要对所传输的数据进行NRZI编解码、添加/去除位填充和串并/并串转换。NRZI编码可以保证有足够的跳变沿在接收端进行时钟恢复;位填充是为了保证信号具有足够的变化量;串并转换可以降低后端数据处理模块的工作频率。
    以USB 2.0设备控制器为例。在向主机发送数据时,其收发器模块先要将协议层传来的8位(或16位)并行数据转换成串行数据,然后添加位填充(每6个连续的1后要加入一个0),最后进行NRZI编码。反之,在接收主机发来的数据时,收发器模块要先对数据进行NRZI解码,再去除位填充,最后转换成8位(或16位)并行数据传给协议层。
    USB 2.0设备控制器的收发器和后端协议层的工作时钟频率不同。对于具有高速(480 Mb/s)和全速(12 Mb/s)两种传输速度的USB 2.0设备控制器来说,收发器在高速、全速模式下的工作时钟频率分别为480 MHz和12 MHz;而协议层在高速、全速模式下的工作时钟频率统一为60 MHz(8位并行数据时,对于16位并行数据为30 MHz)。
    由于添加/去除位填充导致了每字节数据传输所需的时间的增加或减少,再加上收发器和协议层工作时钟频率的差别,可能会导致数据的紊乱。

1 数据紊乱的原因分析
   
假设USB 2.0设备控制器的收发器工作时钟为clk,协议层使用8位并行数据,工作时钟为60 MHz的phy_clk,分析数据紊乱产生的原因。
1.1 高速接收模式
   
USB2.0协议中定义了信号RxValid表示接收数据有效,在phy_clk上升沿,若RxValid=1,协议层可以从收发器提取8位并行数据使用。Rx Valid信号变化后至少需要保持1个phy_clk周期,才能保证其被协议层的phy_clk时钟采样。
    图1中Data_nrzi为已经过NRZI解码的串行输入数据;drop_bit为去位填充提示,当drop_bit=1时说明出现了连续6个数据1,其后的数据0为位填充位应该除去,不放入hold_reg中;Data_nrzi经过去位填充后放入hold_reg中,hold_reg收集了8个Data_nrzi数据后,将这8个数据以并行数据DataIn的形式传给协议层。


    从图1中可以看出,在处理第二组8位数据时,由于其中有一个位填充需要去除,故处理这组数据用了9个clk周期,导致第一组8位并行数据在DataIn中的持续时间为9个clk周期,比正常多了1个clk周期。这样有两个缺点:
    1)1个phy_clk周期为8个cIk周期,第1组8位数据持续9个clk周期有可能会被协议层采样两次。如图1中所示,第1组数跨越了两个phy_clk的上升沿,被采样两次。虽然出现这种情况的概率较小,但并不是不存在,且随着位填充数最的增多,这种多次采样的可能性会增大。
    2)每当位填充的个数达到8个,输出的DataIn被协议层采样到的并行数据总量会比正确的情况多1个,从而导致数据接收错误。
    为了避免上述错误,通常的做法是每当去除了8个位填充数据时,就令RxValid=0并持续1个phy_clk周期,使协议层暂停采样一次,从而避免第2)类错误的发生。但这种做法不能完全避免第1)类错误的发生。
1.2 高速发送模式
   
USB 2.0协议中同样定义了信号TxReady表示收发器准备好发送数据,在phy_clk上升沿,若TxReady=1,协议层便传输过来1个8位并行数据让收发器发送出去。同理TxReady信号变化后也至少要保持1个phy_clk周期。
    图2中,TxReady由0变为1代表收发器已将包的同步域发送完毕,开始发送早已从协议层传来的第1组8位并行数据:DataOut为协议层传来的8位并行数据;在clk上升沿,将DataOut数据读取到暂存器hold_reg中;sd_raw为并串转换后的串行数据;stuff为添加位填充信号,当连续出现6个1时,stuff=1在串行数据中添加1位位填充数据0;sd_bs为添加位填充后的数据,对sd_bs进行NRZI编码后即可发送给主机。


    从图2中可以看出,高速发送模式出现了两类错误:
    1)TxReady由0变为1后开始发送第1组8位并行数据,而当phy_clk上升沿来临后DataOut和hold_reg先后变为了第2组8位并行数据,此时第1组数据并不一定恰好刚刚发完,于是会造成数据缺失或重复发送,同时使后面的数据发送混乱。图2中Txready变为1后sd_raw发送的第1个数据1为同步域的最后一位,接着发送的数据00为第1组数据中的2位,其余6位还未发送hold_reg中的数据已变成了第2组并行数据。[page]

    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所示。


    图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设备控制器的复位信号相同。


    接收数据时,当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周期的情况。


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设备控制器在数据传输过程中因位填充而造成的数据紊乱问题,使数据不会出现缺失或重复,类似方法和思想可以用于其他数据传输处理过程。

关键字:通用串行总线  位填充  存储器  数据紊乱 引用地址:位填充导致USB数据传输紊乱的一种解决方案

上一篇:风河发布全新IP智能网关平台
下一篇:数字监控时代混合型硬盘录像机发展浅析

推荐阅读最新更新时间:2024-05-02 22:25

USB雷达,架设你自己的导弹防御系统
雷达大家都见过(起码电视上见过),每次看到觉得很爽啊,能探测各种障碍物,要是自己能够拥有一个就太棒了。 而有人不光敢想,更敢于将想法付诸实践(这也是我们所缺少的),他真的做出了一个非常酷的USB雷达。 这个就是他的外形,看起来简陋了一点,但是玩起来让人相当high啊。 这位国外的爱好者不光做出了这个电路,他还编写了非常漂亮的上位机,实现了用电脑控制的目的。 怎么样,看这个界面是不是很像真正的雷达呢?反正我是被这个界面给吸引住了。 那么我们究竟怎样才能拥有一台像作者一样的USB雷达呢? 首先讲讲整体框架,其实这个USB雷达从原理上来讲很简单,就是由一个安装在步进电机上的超声波模块,还有一个PIC单片机,当然不能少
[模拟电子]
<font color='red'>USB</font>雷达,架设你自己的导弹防御系统
Molex/Microchip联合开发汽车USB媒体模组与USB功率输出解决方案
莫仕(Molex)和Microchip正在合作开发用于汽车资讯娱乐系统的整合式USB媒体模组与USB功率输出解决方案。在早前于美国内华达州拉斯维加斯举办的国际消费电子展(CES)上,Molex已重点展示了这些用于连网车辆的先进应用。 Molex负责互连行动解决方案的业务发展总监Dave Atkinson表示,现在许多车辆都配备了多个充电器和电源接头,以满足对行动连接的庞大需求。该公司的整合式汽车解决方案为客户提供了设计上的灵活性,可以为多种车型简化并客制化资讯娱乐系统与USB功率输出系统。 该公司在CES 2018上展示了USB 媒体模组及功率输出解决方案,并进行了一次先端性的示范,展示USB体模组与功率输出解决方案和Microc
[汽车电子]
华虹NEC推出0.25微米平台USB Inter-Chip PHY IP
专业集成电路晶圆代工企业之一,上海华虹NEC电子有限公司(以下简称“华虹NEC”)日前宣布,公司在0.25um嵌入式Flash平台上推出USB Inter-Chip PHY IP(HQUSBFI001),该IP为片上芯片之间的通信提供了良好的解决方案。 HQUSBFI001具有低功耗的特点,挂起时可以设置为标准和超低功耗模式,在超低功耗模式下的功耗小于1uA。这为一些便携式应用产品设计者提供了帮助。HQUSBFI001的接口和华虹NEC的USB1.1 PHY的接口基本保持一致,有利于客户产品的设计及平滑过渡。内部集成上拉和下拉电阻,无须外置电阻,方便了客户产品设计,降低成本。 HQUSBFI001与USB2.0 Full sp
[焦点新闻]
与MCS51系列单片机相同的数据存储器扩展技术解析方案
MCS96系列单片机是一种16位字长,比MCS51系列单片机功能更全、性能更高的单片机,在仪器仪表、过程控制等领域应用极为广泛。在采用MCS96系列单片机的应用开发中,我们碰到一个难题:当需要大容量的数据存储时,数据存储器的扩展如采用与MCS51系列单片机同样的方法则无法工作。因为其内存体系结构采用程序存储器与数据存储器统一编址的普林斯顿结构,程序存储器的地址与数据存储器的地址不能相同;而MCS51系列单片机采用程序存储器与数据存储器分开编址的哈佛结构,程序存储器的地址与数据存储器的地址不冲突,可以相同,因而其数据存储器扩展容易,而且整个数据存储器地址空间连续。MCS96系列单片机的普林斯顿内存体系结构决定了不能简单采用与MCS5
[单片机]
与MCS51系列单片机相同的<font color='red'>数据</font><font color='red'>存储器</font>扩展技术解析方案
STM32 USB转串口驱动移植到SylixOS中遇到的问题总结
简介 由于客户项目需求,需要在STM32的硬件平台上实现USB转串口的功能,由于ST公司基于STM32硬件平台实现了相应的USB库以方便开发者进行开发,因此,在SylixOS下实现USB转串口功能时对该USB库进行了移植。由于该USB库的实现是基于STM32的裸机代码实现,因此在移植的过程中,不需要做过多的修改。 下面章节主要介绍在移植STM32的USB转串口驱动到SylixOS下遇到的问题以及对应的解决方法。对于其中的有些解决方法在移植STM32其他外设驱动的过程中也依然适用。 2. 移植遇到的问题及解决方法 2.1 非对齐内存访问错误 在移植完USB转串口驱动后,烧写SylixOS到STM32后,在运行过
[单片机]
基于LabVIEW与USB接口的实时数据采集系统
1 数据采集系统    工程上使用具有PCI、PXI、USB、并口以及串口的计算机来获取测试数据,称为基于PC的数据采集系统。其中一种是通过插入式的数据采集卡直接获取数据传输给计算机。鉴于数据采集卡的价格昂贵,且安装不方便等缺点,本文提出使用STC单片机作为前端的数据采集系统,利用 CH341T 芯片的USB总线转异步串口的功能,将采集数据只通过一条USB线传输给PC机,最后在LabVIEW平台下进行数据的显示、分析、处理。 1.1 系统组成与工作原理    本系统总体结构框图如图1所示。主要包括有 STC12C5410AD 单片机和 CH341T 转换芯片组成的数据采集、转换、传输部分,以及基于PC机的LabVlEW
[嵌入式]
嵌入式系统应用中的USB主设备功能分析
  USB已经成为设备和PC之间通信的标准方式,从通用设备(如闪存设备和鼠标)到专用设备,该标准几乎完全替代了其他的串行通信协议。   USB外围设备彼此之间不能相互通信,它们只能与具有控制总线能力的USB主设备通信。直到最近,也只有PC具有主设备能力。但目前,许多微控制器也具有了嵌入式USB主设备的功能,这使得嵌入式应用可以连接更加广泛的USB外围设备。   USB闪存驱动器是一种使用非常广泛的USB外围设备,它已经成为传递或存储大量数据的廉价介质,许多数据记录设备正是得益于它才得以发展。对于远程的长期数据记录,可以先采集,并存储在闪存驱动器中,然后带回到方便分析处理的地方。 图1 具有嵌入式USB主设备功能的微
[嵌入式]
内容可导址存储器的FPGA设计与应用
    摘要: 内容可寻址存储器(CAM)是一种快速匹配存储器件,在通信、雷达等许多领域有着广泛的应用。在介绍CAM基本原理的基础上,提出了以两类新型FPGA实现CAM的设计方法。例举了一种基于CAM实现关联比较器及其在雷达截获系统信号处理领域的重要作用。     关键词: FPGA 内容可寻址存储器(CAM) APEX系列 VIRTEX系列 关联比较器 内容可寻址存储器(CAM)是一种新型的存储器,它的高速、并行、易扩展和实现的灵活性使它一出现就得到人们的重视。CAM基于内容寻址,通过硬件电路实现快速匹配。CAM的并行处理特性使得它在数据分选领域倍受青睐,被广泛应用于以太网网址搜寻、数据压缩、模式识别
[应用]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved