基於MFC的USB上位機開發(1)概述
延伸閱讀:
目錄
本上位機的開發環境為Visual Studio 2008,電腦系統是Win7 64位旗艦版,配套開發板為易津USB開發板,開發板USB晶片型號為Cy7c68013a。上位機提供狀態顯示、速度測試、傳輸測試、環路測試和下環路測試等功能,功能測試時需要配合開發板一起使用。USB上位機設計系列文章重點講設計思路,需要原始程式碼的同學可以在本文末尾的連結處下載。
1 工程準備
1.1 標頭檔案和庫檔案
在上位機開發之前需要安裝Cypress公司的軟體工具包cy3687kit_revSA,該軟體包內可以為上位機開發提供所需的標頭檔案和庫檔案,具體資訊見下表:
上位機依賴檔案 |
|
所在路徑 |
標頭檔案 |
CyAPI.h、cyioctl.h、usb100.h、usb200.h |
C:\Cypress\Cypress Suite USB 3.4.7\CyAPI\inc |
庫檔案 |
CyAPI.lib(64位系統) |
C:\Cypress\Cypress Suite USB 3.4.7\CyAPI\lib\x64 |
庫檔案 |
CyAPI.lib(32位系統) |
C:\Cypress\Cypress Suite USB 3.4.7\CyAPI\lib\x86 |
上方所有標頭檔案和庫檔案均需要複製到上位機工程目錄下,在MFC專案的相應的.cpp或者.h檔案中需要包含以上某些標頭檔案。在專案的附加依賴項中需要新增庫檔案CyAPI.lib,因為電腦是Win7 64位的,所以庫檔案也選擇64位的,庫檔案新增方法:右擊專案——配置屬性——連結器——輸入——附加依賴項,填寫CyAPI.lib。
1.2 新增標頭檔案
新建USBproj專案,目錄結構如下:
USBprojDlg.h和USBprojDlg.cpp所需包含標頭檔案如下所示:
// USBprojDlg.h : 標頭檔案
#pragma once
#include "CyAPI.h"
#include <afxmt.h>
#include "afxwin.h"
#include "afxcmn.h"
#include "rate.h"
// USBprojDlg.cpp : 實現檔案
#include "stdafx.h"
#include "USBproj.h"
#include "USBprojDlg.h"
#include "CyAPI.h"
#include "cyioctl.h"
#include <dbt.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
2. 控制元件佈局
2.1 速度測試模組
控制元件標籤 |
控制元件名稱 |
控制元件新增的變數 |
控制元件型別 |
控制元件設定 |
速度測試 |
IDC_STATIC |
|
組合框 |
Group:True |
上位機接收資料 |
IDC_X86 |
m_x86 |
按鈕 |
|
上位機發送資料 |
IDC_X02 |
m_x02 |
按鈕 |
|
清空測試資料 |
IDC_clean |
m_clean |
按鈕 |
|
示例編輯框 |
IDC_SUCCOUNT |
m_Success |
編輯框(可讀不可寫) |
Read Only:True |
示例編輯框 |
IDC_FALICOUNT |
m_Failure |
編輯框(可讀不可寫) |
Read Only:True |
示例編輯框 |
IDC_KBCOUNT |
m_KBCount |
編輯框(可讀不可寫) |
Read Only:True |
成功(10KB/次) |
IDC_STATIC |
|
靜態文字 |
|
失敗(10KB/次) |
IDC_STATIC |
|
靜態文字 |
|
總共傳輸位元組(KB) |
IDC_STATIC |
|
靜態文字 |
|
Progress Bar Control |
IDC_PROGRESS_RATE |
m_Rate |
進度條 |
|
傳輸速度(MB/s) |
IDC_STATIC |
|
靜態文字 |
|
2.2 傳送與接收模組
控制元件標籤 |
控制元件名稱 |
控制元件新增的變數 |
控制元件型別 |
控制元件設定 |
傳送與接收資料 |
IDC_STATIC |
|
組合框 |
Group:True |
示例編輯框 |
IDC_NUM |
m_NUM |
編輯框(可讀可寫) |
Read Only:False |
示例編輯框 |
IDC_VALUE |
m_value |
編輯框(可讀可寫) |
Read Only:False |
位元組數量 |
IDC_STATIC |
|
靜態文字 |
|
數值大小 |
IDC_STATIC |
|
靜態文字 |
|
傳送指定資料 |
IDC_send_data |
|
按鈕 |
|
傳送512遞增資料 |
IDC_Incrementing_req |
|
按鈕 |
|
接收512位元組 |
IDC_data_receive |
m_receive_512x8bit |
按鈕 |
|
清空管道 |
IDC_CLEAN_FIFO |
m_CLEAN_FIFO |
按鈕 |
|
操作說明 |
IDC_help |
|
按鈕 |
|
開啟資料記錄 |
IDC_OPEN_FOLDER |
|
按鈕 |
|
資料顯示框 |
IDC_STATIC |
|
組合框 |
|
示例編輯框 |
IDC_data_receive_display |
m_data_receive_display |
編輯框(可讀不可寫)
|
Read Only:True Vertical scroll:True multiline:True |
2.3 環路模組
控制元件標籤 |
控制元件名稱 |
控制元件新增的變數 |
控制元件型別 |
控制元件設定 |
環路測試 |
IDC_STATIC |
|
組合框 |
Group:True |
無 |
IDC_FILLPATTERN_COMBOX |
m_FillPatternComBox |
下拉選擇框 |
資料:Constant Byte; Random Byte; Incrementing Byte; Incrementing DWORD; |
傳送模式 |
IDC_STATIC |
|
靜態文字 |
|
出錯停止測試 |
IDC_STOP_ON_ERROR_CHKBOX |
m_StopOnErrorChkBox |
複選框 |
Left Text:True |
開始 |
IDC_START_BTN |
m_StartBtn |
按鈕 |
|
重置資料 |
IDC_RESET_BTN |
|
按鈕 |
|
裝置狀態:停止 |
IDC_STATUS_LABEL |
m_StatusLabel |
靜態文字 |
|
示例編輯框 |
IDC_XFERSIZE_EDIT |
m_XferSize |
編輯框(可讀可寫) |
Read Only:False |
示例編輯框 |
IDC_SEED_EDIT |
m_SeedValue |
編輯框(可讀可寫) |
Read Only:False |
傳輸位元組數 |
IDC_STATIC |
|
靜態文字 |
|
開始數值 |
IDC_STATIC |
|
靜態文字 |
|
示例編輯框 |
IDC_SUCCESS_LABEL |
m_SuccessCount |
編輯框(可讀不可寫) |
Read Only:True |
示例編輯框 |
IDC_FAILURE_LABEL |
m_FailureCount |
編輯框(可讀不可寫) |
Read Only:True |
成功: |
IDC_STATIC |
|
靜態文字 |
|
失敗: |
IDC_STATIC |
|
靜態文字 |
|
2.4 下環路模組
控制元件標籤 |
控制元件名稱 |
控制元件新增的變數 |
控制元件型別 |
控制元件設定 |
下環路測試 |
IDC_STATIC |
|
組合框 |
Group:True |
接收512位元組 |
IDC_LOOP_R_512B |
m_LOOP_R_512B |
按鈕 |
|
傳送512位元組 |
IDC_LOOP_T_512B |
m_LOOP_T_512B |
按鈕 |
|
速度測試開啟 |
IDC_loop_FPGA_key |
m_loop_FPGA_key |
按鈕 |
|
下環路測試 |
IDC_loop_test |
m_Startloop_FPGA |
按鈕 |
|
3. 功能介紹
3.1 速度測試模組
本模組用於USB埠單向速度測試,模組使用時需要FPGA燒寫speed專案工程的程式!上位機在測試USB的接收或者傳送的速率時,會統計傳輸的速度大小、成功次數、失敗次數以及總共傳輸位元組數。
3.2 資料傳輸模組
資料傳輸模組負責手動環路的功能驗證,包括上方的傳送與接收資料和資料顯示框兩個部分,模組使用時需要FPGA燒寫USB_LOOPBACK 專案工程的程式!上位機在手動環路測試時,可進行以下三種資料的傳送與接收:
(1)傳送512位元組數值固定的資料;
(2)傳送512位元組數值從0x 00遞增至0x FF的資料;
(3)傳送512位元組不同數值的資料,比如510位元組0x 00和2位元組0x FF。
3.3 環路模組
環路模組負責自動環路功能的測試,模組使用時需要FPGA燒寫USB_LOOPBACK 專案工程的程式!在自動環路測試時,上位機負責512位元組指定數值的資料傳送、接收和對比,FPGA負責資料的搬運,資料流向圖如下圖所示。環路模組的傳送模組可選固定值、隨機值、遞增位元組、遞增雙位元組,傳輸位元組數必須為512位元組整數倍,最大為2048,開始數值可選範圍0-255。
3.4 下環路模組
下環路模組負責手動或者自動下環路的測試,傳輸資料數值由FPGA控制,上位機僅完成資料的從USB端點EP6到EP2的搬運,模組使用時需要FPGA燒寫LOOPBACK_FPGA 專案工程的程式!點選接收512位元組按鈕,接收EP6端點內的512位元組資料,並將資料顯示資料顯示框內。點擊發送512位元組按鈕,上位機會將接收的512位元組資料傳送至EP2端點內。下環路帶有測試開關,預設關閉,開啟後上位機累積完成20Mbyte資料傳輸時,顯示傳輸的平均速度!
4. 使用注意事項
4.1 配套FPGA程式
測模組 |
FPGA程式對應工程 |
備註 |
速度測試 |
speed |
USB接收或者傳送資料的速度測試 |
資料接收與傳送 |
USB_LOOPBACK |
接收或者傳送指定數值的512位元組資料 |
環路測試 |
USB_LOOPBACK |
4中傳輸模式下資料環路測試 |
下環路測試 |
LOOPBACK_FPGA |
FPGA為主控端時的環路測試 |
4.2 開發板驅動程式
上位機測試時需要配合易津USB開發板使用,電腦在第一次連線開發板時需要安裝驅動程式。Cypress公司提供Win7 x86和x64、Win XP x86和x64以及Win vista x86和x64的驅動程式,驅動程式檔名為cyusbfx2lp18.inf。驅動安裝時,開啟裝置管理器找到Cypress公司的USB裝置,右擊更新驅動程式軟體,找到驅動檔案所在位置,最後根據提示完成驅動程式的更新!
4.3 上位機生成可執行程式
上位機除錯時,解決方案配置可選Debug或者Release模式,在Debug模式下生成的exe檔案放在其它電腦上執行會報錯,在XP系統下執行提示“由於應用程式配置不正確,應用程式未啟動。重新安裝應用程式可能會糾正這個問題。”如果在該電腦上安裝VS2008後,exe程式就能正常使用。
如何解決上述問題呢,在電腦沒有安裝VS2008的情況下也能使用上位機exe程式?
方法(1):
將解決方案配置選擇Release,重新編譯該上位機,在上位機工程的Release資料夾下會生成USBproj.exe,使用該exe不會出現上方報錯資訊。
方法(2):
在專案上右擊屬性,依次選擇 配置屬性——常規——MFC的使用——在靜態庫中使用MFC,在Debug模式下重新編譯上位機,在上位機工程的Debug資料夾下會生成USBproj.exe,使用該exe也不會出現上方報錯資訊。
5. 專案工程檔案包
(1)Cy7c68013a-USB測試工具v1.4-CSDN下載
https://download.csdn.net/download/snaking616/10867119