今天我們就通過4~5篇文章介紹FPGA與USB3.0通信的相關知識,其實是《FPGA和外圍接口(繼續更新)基于FPGA的網口通信設計》的后續。PCIe也在準備中。
完成后,也是《Xilinx 7系列FPGA入門級圖像處理-完整版V1》初級和中級章節的開始。圖像處理部分也將由攝像頭前端算法(主ISP)和后端算法組成。最后,應形成初級工業UVC攝像機和IPC。平臺還沒選好(不知道有沒有贊助,哈哈),算法基本驗證完畢。
USB3.0簡介
總線、接口和協議
首先,這里有幾個概念,應該是大家都通用的:
USB3.0協議
USB3.0接口
USB3.0總線
是不是很蠢?
其實了解了這些概念,就可以針對USB的具體協議,不需要看整個復雜冗長的協議來選擇自己的立場。
總線是一組傳輸通道,是由各種邏輯器件組成的傳輸數據的通道,一般由數據線、地址線、控制線等組成。接口是一種連接標準,通常稱為物理接口。協議是數據傳輸的規則。
一般來說,USB可以是USB信號、USB接口、USB總線或USB協議。它如此復雜的主要原因是每個人對概念的理解不同。舉個簡單的例子,USB總線指的是一組傳輸通道,而USB接口是一個連接標準。兩者的關系是所有帶USB接口的設備都要通過USB總線進行通信,而USB總線上的設備并不都是USB接口。比如集成的USB聲卡是USB總線,不是USB接口。這里,USB總線提供了一個通道,在這個通道上可以有不同的接口設備或信號(USB信號或Audio信號)滿足這個通道的要求。
35306478-3b8a-11ec-82a9-dac502259ad0.png
USB板載聲卡
對于USB聲卡,安裝外置聲卡時使用USB接口,板載聲卡始終使用沒有USB接口的USB總線(物理層可以滿足要求)。
所以總結一下:
即協議的整體框架,定義了接口設備、器件、信號、總線、通道之間要滿足的關系,即要實現信號的傳輸,所有這些成員必須協同工作,滿足協議所要求的各種必要條件。
對于USB,下圖可以說明三者之間的關系:
3565e3be-3b8a-11ec-82a9-dac502259ad0.png
通過以上分析,后面將簡要介紹USB3.0中規定的幾個重要方面。
USB3.0的分層機制
大家都知道PCIe有三層結構(事務層、數據鏈路層和物理層)和TCP/IP五層結構(物理層、數據鏈路層、網絡層、傳輸層和應用層)。為什么復雜的協議有層次結構?
這個起源主要來自于OSI五層參考模型(比如七層OSI參考模型)
即使是簡單的RS232也遵循上面的層次結構,但是RS232只指定了物理層,所以現實中很少有人使用層次結構進行分析。
USB3.0的分層機制實際上類似于PCIe(協議層、鏈路層和物理層)。從某種意義上說,USB3.0可以看作是PCIe的變種。下圖是分層通信結構:
36304a0a-3b8a-11ec-82a9-dac502259ad0.jpg
這種分層結構便于標準化和擴展,因此現在大多數協議都遵循OSI參考模型。希望大家能理解這個模型(推薦文章中有很多生動的解釋)。
以上部分解釋包含個人理解。為了通俗易懂,有些表達不太準確。希望大家留言交流。這是對官方文件的簡單解釋。
USB3.0和USB2.0的功能比較
366bd674-3b8a-11ec-82a9-dac502259ad0.jpg
硬件接口
368d22fc-3b8a-11ec-82a9-dac502259ad0.png
369da5f0-3b8a-11ec-82a9-dac502259ad0.png
物理層
突出顯示部分:
36f20a28-3b8a-11ec-82a9-dac502259ad0.png
該層主要定義高速組件之間互操作所需的電氣層參數。
37240398-3b8a-11ec-82a9-dac502259ad0.png
Tx物理層框圖
3735cdf8-3b8a-11ec-82a9-dac502259ad0.png
物理層Rx框圖
377764ca-3b8a-11ec-82a9-dac502259ad0.png
不帶電纜(頂部)和帶電纜(底部)的通道示意圖
USB3.0使用8b/10b傳輸代碼。該傳輸代碼的定義與ANSI X3.230-1994(也稱為ANSI INCITS 230-1994)第11條中規定的定義相同。
378bc7ee-3b8a-11ec-82a9-dac502259ad0.png
加擾功能由線性反饋移位寄存器(LFSR)實現。在發送端,在8b/10b編碼之前對字符進行加擾。在接收端,對8b/10b解碼字符進行解擾。每當發送或接收通信符號時,LFSR都會復位。
3798725a-3b8a-11ec-82a9-dac502259ad0.png
這些是物理層的一般規定。詳見《USB3.0協議規范(英文完整版)(第六節)》。
鏈路層鏈路層
突出顯示部分:
37cfd8f8-3b8a-11ec-82a9-dac502259ad0.png
鏈路層鏈路層主要包括:
分組幀
鏈接命令
鏈路管理和流量控制
鏈接錯誤規則/恢復
重置
鏈接狀態機描述
37e5d9be-3b8a-11ec-82a9-dac502259ad0.png
帶有幀符號、CRC-16和鏈路控制字的數據包報頭
3823003c-3b8a-11ec-82a9-dac502259ad0.png
鏈接控制字
3833b10c-3b8a-11ec-82a9-dac502259ad0.png
指令結構
38625fa2-3b8a-11ec-82a9-dac502259ad0.png
命令字結構
387475de-3b8a-11ec-82a9-dac502259ad0.png
鏈路訓練和狀態機的狀態圖
協議層
突出顯示部分:
38be6d24-3b8a-11ec-82a9-dac502259ad0.png
協議層主要包括:
數據包類型
數據包格式
對主機和設備發送的數據包的預期響應
描述了四種USB 3.0事務類型。
批量傳輸類型的流支持
設備/主機可以接收/發送的數據包的各種響應和定時參數。
整個協議層非常復雜,數據包的類型幾乎有十幾種,這里就不贅述了。