<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 位填充導致USB數據傳輸紊亂的一種解決方案

位填充導致USB數據傳輸紊亂的一種解決方案

作者: 時(shí)間:2012-11-06 來(lái)源:網(wǎng)絡(luò ) 收藏

2)處理第2組并行數據時(shí),由于需要添加,故第2組數據的處理時(shí)間需要9個(gè)clk周期。由于phy_clk的周期為8個(gè)clk周期,故第2組并行數據的持續時(shí)間為8個(gè)clk周期。于是第2組并行數據的最后一位還未發(fā)送,第3組數據已取代了第2組數據。
避免上述錯誤的常用方法是令hold_reg在其暫存的8位數都轉換成串行數據sd_raw后再讀取DataOut中的數,而不是在每個(gè)clk上升沿都讀取。同時(shí),每當添加了8個(gè)數據,就令TxReady=0并持續1個(gè)phy_clk周期,從而令DataOut暫停變化一次。這樣做雖然解決了上述問(wèn)題,但卻帶來(lái)了一個(gè)新的錯誤,如圖3所示。

本文引用地址:http://dyxdggzs.com/article/159707.htm

c.JPG


圖3中,共要發(fā)送4組并行數據。假設發(fā)送完同步域后,hold_reg恰好在第一組數據的最后進(jìn)行采樣,則處理第2組數據時(shí)需要添加2個(gè)位,處理時(shí)間為10個(gè)clk周期。同時(shí)由于位填充沒(méi)有達到8個(gè),TxReady持續為1,DataOut每過(guò)8個(gè)clk就變換一次。結果導致第3組數據被錯過(guò),沒(méi)有被hold_reg采樣到。這種錯誤的發(fā)生概率雖然很小,但不能完全避免。
1.3 全速收發(fā)模式
全速模式下clk的頻率為12 MHz,即1個(gè)clk周期為5個(gè)phy_clk周期。在接收數據時(shí),當hold_reg集齊8位數據后,將其傳輸到Dataln中
并令RxValid=1且持續1個(gè)phy_clk,其余時(shí)刻令RxValid=0;在發(fā)送數據時(shí),當hold_reg中的8位數據全部轉換成串行數據后,令TxReady=1并持續1個(gè)phy_clk,其余時(shí)刻令TxReady_0。因而RxValid和TxReady信號為離散脈沖形式,且脈沖寬度為1個(gè)phy_clk周期,不會(huì )出現上述錯誤。
綜上所述,USB 2.0傳輸中位填充造成數據總量的增減會(huì )影響的準確性,需加以解決。

2 解決方案
通過(guò)在收發(fā)器和協(xié)議層之間添加一個(gè)2x8位的異步FIFO作為緩存區,可以解決上述問(wèn)題。如圖4所示,異步FIFO的讀操作與寫(xiě)操作分別由兩個(gè)異步時(shí)鐘clk1和clk2控制,異步復位信號rst同USB設備控制器的復位信號相同。

e.JPG


接收數據時(shí),當hold_reg集齊8位數據,可在clk時(shí)鐘控制下將其中的數據寫(xiě)入FIFO中;而在phy_clk上升沿,若FIFO中有數據,則令RxValid=1并讀出1組并行數據傳給協(xié)議層,否則令RxValid=0且不讀數據。經(jīng)分析,此處使用1x8位的FIFO足以滿(mǎn)足要求,不會(huì )出現FIFO中有數據未讀出新數據又寫(xiě)入的情況,但為了保證不出現特殊情況,這里使用2x8位的FIFO,以保證可靠性。
發(fā)送數據時(shí),在phy_clk上升沿,若FIFO有空間,則令TxReady=1并將DataOut中的數據寫(xiě)入FIFO,否則令TxReady=0且不寫(xiě)入數據,當協(xié)議層數據全部發(fā)送完畢令TxReady=0;在FIFO寫(xiě)滿(mǎn)的同時(shí)也令TxReady=0;當hold_reg中的數據全部轉換為串行數據后,在clk時(shí)鐘控制下從FIFO中取出一組數據放入hold_reg中;當FIFO中沒(méi)有數據時(shí),說(shuō)明數據發(fā)送完畢,可以發(fā)包結束符。

3 仿真驗證及實(shí)驗結果分析
3.1 高速接收模式
當位填充較多致使數據處理時(shí)間過(guò)長(cháng),導致FIFO中沒(méi)有數據時(shí),RxValid變?yōu)榱?且持續了1個(gè)phy_clk周期。從圖中可看出輸出數據DataIn在RxValid=1時(shí)的寬度都為1個(gè)phy_clk周期,沒(méi)有出現多于1個(gè)phy_clk周期的情況。

d.JPG


3.2 高速發(fā)送模式
圖6為高速發(fā)送模式的仿真結果。從圖中可以看出,收發(fā)器工作正常,避免了上述錯誤的發(fā)生。在收發(fā)器還在發(fā)送同步域時(shí),協(xié)議層就已經(jīng)開(kāi)始向FIFO中寫(xiě)數據,當寫(xiě)滿(mǎn)FIFO后,TxReady變?yōu)?,協(xié)議層暫停向FIFO傳輸數據,直到FIFO有空間后才繼續傳輸數據。同步域發(fā)送完畢后,hold_reg從FIFO中取出數據并依次發(fā)送,沒(méi)有出現數據缺失或重復發(fā)送。從圖中可看出從協(xié)議層輸入的數據DataOut在TxReady=1時(shí)的寬度都為1個(gè)phy_clk周期,沒(méi)有出現多于1個(gè)phy_clk周期的情況,從而不會(huì )被FIFO重復采樣。
3.3 全速收發(fā)模式
據1.3中所述,全速收發(fā)模式不會(huì )出現類(lèi)似錯誤,但若是全速高速模式使用不同的收發(fā)方式,會(huì )增加系統的復雜度和設計難度。異步FIFO同樣可以用于全速收發(fā)模式,只需要將clk的頻率變?yōu)?2 MHz即可,其余與高速收發(fā)模式相同,在此不再贅述。

4 結束語(yǔ)
文中通過(guò)在收發(fā)器與協(xié)議層之間增加一個(gè)2x8位的異步FIFO作為緩存區,解決了USB 2.0設備控制器在過(guò)程中因位填充而造成的問(wèn)題,使數據不會(huì )出現缺失或重復,類(lèi)似方法和思想可以用于其他處理過(guò)程。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>