1. 程式人生 > >基於MFC的USB上位機開發(5)下環路模組

基於MFC的USB上位機開發(5)下環路模組

延伸閱讀:

基於MFC的USB上位機開發(1)概述

基於MFC的USB上位機開發(2)速度測試模組

基於MFC的USB上位機開發(3)資料傳輸模組

基於MFC的USB上位機開發(4)環路模組

基於MFC的USB上位機開發(5)下環路模組

目錄

1. 設計思路

1.1 手動下環路

1.2 自動下環路

2. 功能測試

2.1 手動下環路測試

2.2 自動下環路測試

3. USB傳輸速度分析

3.1 手動下環路傳輸耗時

3.2 自動下環路速度測試


        本模組用於FPGA下環路程式碼的測試,與環路測試不同,下環路中FPGA負責資料的先寫後讀,上位機僅負責資料的搬運,先向USB接收512位元組資料,再將資料原樣傳送至USB。本模組分手動下環路測試和自動下環路測試,手動模式下需要點選按鈕使上位機先接收512位元組資料,再手動傳送給USB,接收的資料會同步顯示在資料顯示框內。自動模式下上位機的先接收後傳送的操作會迴圈進行,直到點選停止按鈕為止。自動模式下設有測速開關,當下環路傳輸了20MByte資料時,上位機會統計傳輸總耗時以及計算平均速度,並結束自動下環路的執行緒。

1. 設計思路

1.1 手動下環路

        手動下環路模組包括接收512位元組和傳送512位元組兩個功能。USB裝置連線時,點選接收512位元組按鈕,會使該按鈕和下環路測試按鈕被禁用,並建立接收512位元組資料的執行緒,接著在資料接收完成時,資料內容和任務耗時會被顯示在上位機上,最後結束該執行緒。點擊發送512位元組按鈕,如果之前沒有接收512位元組資料,上位機會提示“請先接收512位元組資料”,之前已接收就建立傳送執行緒,再將接收到的512位元組資料傳送給USB,接著將任務耗時顯示在上位機上,最後結束該執行緒。接收和傳送512位元組的程式流程圖如下所示:

1.2 自動下環路

        自動下環路模組由一個速度測試開關按鈕和下環路測試按鈕組成,速度測試開關預設關閉。在測速關閉的情況下,點選下環路測試,下環路測試的狀態會一直進行,直到點選stop按鈕才結束。在測速開關開啟的情況下,點選下環路測試,上位機進行10240次下環路傳輸後,會統計任務耗時和計算資料傳輸的平均速度,並將它們顯示在上位機上,最後自動結束下環路執行緒。下環路的程式流程圖如下所示:

2. 功能測試

2.1 手動下環路測試

(1)上位機向USB接收512位元組資料,任務耗時85.12 us。

(2)上位機向USB傳送512位元組資料,任務耗時106.55 us。

2.2 自動下環路測試

(1)速度開關關閉時,進行下環路測試。

(2)速度開關開啟時,進行下環路測試,任務傳輸資料為5MByte,總耗時7.74s,平均速度達1.29MB/s。

3. USB傳輸速度分析

3.1 手動下環路傳輸耗時

在接收512位元組、傳送512位元組和下環路的執行緒函式中均有一個控制傳輸位元組數的變數Xfer,現在測試一下在不同Xfer的情況下,資料在裝置間的傳輸耗時的變化,下圖中t1為USB到上位機之間的接收耗時,t2為上位機到USB之間的傳送耗時,t3和t4分別為FPGA的讀耗時和寫耗時。t1和t2可以通過上位機之間統計出來,t3和t4需要根據傳輸資料的位元組數N和資料讀寫時鐘頻率f來計算,計算公式為t=N/(2*f)。

    在上位機手動下環路測試時,傳輸耗時不是固定的,存在一定的波動,以下t1和t2均為5次測試後的平均值。

下環路資料長度(Byte)

t1平均耗時(us)

t2平均耗時(us)

t3平均耗時(us)

t4平均耗時(us)

512Byte

81.6

89.2

5.3

5.3

1024Byte

99.2

105.8

10.6

10.6

1536Byte

113.6

114.8

15.9

15.9

2048Byte

110.4

121.0

21.2

21.2

以上資料可以看出:

(1)下環路資料長度增加512位元組,上位機與USB之間的傳輸耗時可能會增加10us左右;

(2)資料長度加倍,USB與上位機之間的傳輸耗時並不會加倍;

(3)下環路的主要耗時集中在上位機的資料接收和傳送環節。

3.2 自動下環路速度測試

    平均速度的計算公式rate=(Xfer*2*10240)/t,其中t為任務耗時。同樣的,修改下環路的執行緒函式中Xfer大小,在不同的Xfer情況下,下環路的平均速度如下:

環路資料長度(Byte)

環路次數

傳輸位元組數(MB)

任務耗時(s)

平均速度(MB/s)

512

10240

5

7.35

1.36

1024

10240

10

7.37

2.71

1536

10240

15

7.27

4.12

2048

10240

20

7.34

5.45

以上資料可以看出:

(1)資料傳輸長度Xfer對下環路傳輸的總耗時影響不大;

(2)在環路次數不變的情況下,Xfer成倍增加時,平均速度也成倍增加。

(3)要想提高USB的傳輸速度,單次傳輸的資料量越大越好。