哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

英創(chuàng)信息技術工控主板USB通信方案介紹

英創(chuàng)信息技術 ? 來源:英創(chuàng)信息技術 ? 作者:英創(chuàng)信息技術 ? 2020-01-15 14:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

英創(chuàng)AMR9系列工控主板可以使用USB與PC連接并進行通信。在主板上,我們將USB引到了COM1,使得我們可以通過操作串口的方式來操作USB口的連接與收發(fā)。在PC端,我們提供一個使用WDK提供的驅動,來進行USB通信的解決方案。

驅動的安裝及說明請參考文章《英創(chuàng)工控主板USB驅動安裝說明》。

工控主板端USB收發(fā)程序說明

英創(chuàng)AMR9系列工控主板已將USB引導COM1,這里使用開發(fā)光盤中的串口例程SPT_HEX做USB收發(fā)調試例程。

代碼中需要注意的地方:

BOOL ret = OpenPort(portName, baud, databit, stopbit, parity); /* 打開串口*/

在界面中選擇COM1打開,調用函數(shù)OpenPort,參數(shù)portName值為_T('COM1:')。

波特率,停止位,數(shù)據(jù)位,校驗參數(shù)不產(chǎn)生實際作用,這里可以使用默認值。

GetCommTimeouts(m_hComm, &CommTimeOuts);
CommTimeOuts.ReadIntervalTimeout = 100; /* 接收字符間最大時間間隔*/
CommTimeOuts.ReadTotalTimeoutMultiplier = 1;
CommTimeOuts.ReadTotalTimeoutConstant = 0; /* 讀數(shù)據(jù)總超時常量*/
CommTimeOuts.WriteTotalTimeoutMultiplier = 1; /* 設置寫超時,避免阻塞*/
CommTimeOuts.WriteTotalTimeoutConstant = 2; /* 設置寫超時,避免阻塞*/
SetCommTimeouts(m_hComm, &CommTimeOuts) ;

在函數(shù)OpenPort中,調用SetCommTimeouts設置超時函數(shù)時最好設置有寫超時,否則在發(fā)數(shù)據(jù)時,在PC端接收完數(shù)據(jù)前,WriteFile函數(shù)會一直阻塞。

PC端USB收發(fā)程序說明

在WDK提供的驅動中,創(chuàng)建了2個pipe來進行USB的收發(fā),通過對這兩個pipe的ReadFile和WriteFile操作進行USB通信。

1、檢測設備

USB設備支持即插即用,當設備連接或斷開時,都可以收到系統(tǒng)將發(fā)出的消息。

使用該消息需要先引用系統(tǒng)頭文件

#include 'dbt.h'

并在在MESSAGEMAP宏中添加設備檢測消息WM_DEVICECHANGE

BEGIN_MESSAGE_MAP(Cusb_connDlg, CDialog)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP

ON_WM_DEVICECHANGE()
END_MESSAGE_MAP()

在對話框頭文件中添加該消息的響應函數(shù)

afx_msg BOOL OnDeviceChange(UINT nEventType,DWORD_PTR dwData);

當設備發(fā)生變化(USB接上或斷開)時,OnDeviceChange函數(shù)會得到響應。
BOOL Cusb_connDlg::OnDeviceChange( UINT nEventType, DWORD_PTR dwData )
{
switch(nEventType)
{
case DBT_DEVICEARRIVAL:
// UpdateUsbDeviceList();
break;
case DBT_DEVICEREMOVECOMPLETE:
//UpdateUsbDeviceList();
//UpdateWindow();
break;
}
return TRUE;
}

獲取USB讀寫管道路徑

首先,獲取設備路徑需要使用到setupapi.lib庫中的相關函數(shù),所以需要在工程中添加setupapi.lib庫

添加setupapi.lib庫的頭文件

#include

添加驅動代碼的public.h頭文件,該頭文件定義了USB設備的GUID

// {6068EB61-98E7-4c98-9E20-1F068295909A}

DEFINE_GUID(GUID_CLASS_USBSAMP_USB,
0x873fdf, 0x61a8, 0x11d1, 0xaa, 0x5e, 0x0, 0xc0, 0x4f, 0xb1, 0x72, 0x8b);

添加一個GetUsbDeviceFileName函數(shù)通過GUID獲取設備地址

BOOL Cusb_connDlg::GetUsbDeviceFileName(LPGUID pGuid, LPWSTR devName)
{
ULONG NumberDevices;
HDEVINFO hardwareDeviceInfo;
SP_DEVICE_INTERFACE_DATA deviceInfoData;
ULONG i;
BOOLEAN done;
PSP_DEVICE_INTERFACE_DETAIL_DATA functionClassDeviceData = NULL;
ULONG predictedLength = 0;
ULONG requiredLength = 0;
hardwareDeviceInfo =
SetupDiGetClassDevs ( pGuid,
NULL, // Define no enumerator (global)
NULL, // Define no
(DIGCF_PRESENT | // Only Devices present
DIGCF_DEVICEINTERFACE)); // Function class devices.
if (hardwareDeviceInfo == INVALID_HANDLE_VALUE) {
return FALSE ;
}
NumberDevices = 4;
done = FALSE;
deviceInfoData.cbSize = sizeof (SP_DEVICE_INTERFACE_DATA);
i=0;
while (!done)
{
NumberDevices *= 2;
for (; i < NumberDevices; i++)
{
if (SetupDiEnumDeviceInterfaces (hardwareDeviceInfo,
0, // We don't care about specific PDOs
pGuid,
i,
&deviceInfoData))
{
SetupDiGetDeviceInterfaceDetail (
hardwareDeviceInfo,
&deviceInfoData,
NULL, // probing so no output buffer yet
0, // probing so output buffer length of zero
&requiredLength,
NULL); // not interested in the specific dev-node
predictedLength = requiredLength;
// sizeof (SP_FNCLASS_DEVICE_DATA) + 512;
functionClassDeviceData = (PSP_DEVICE_INTERFACE_DETAIL_DATA) malloc (predictedLength);
if(NULL == functionClassDeviceData)
{
break;
}
functionClassDeviceData->cbSize = sizeof (SP_DEVICE_INTERFACE_DETAIL_DATA);
if (! SetupDiGetDeviceInterfaceDetail (
hardwareDeviceInfo,
&deviceInfoData,
functionClassDeviceData,
predictedLength,
&requiredLength,
NULL))
{
free( functionClassDeviceData );
break;;
}

StringCchCopy(devName, MAX_LENGTH, functionClassDeviceData->DevicePath) ;
free( functionClassDeviceData );
done = TRUE;
break;
}
else
{
if (ERROR_NO_MORE_ITEMS == GetLastError())
{
done = TRUE;
i = -1;
break;
}
}
}
}
NumberDevices = i;
SetupDiDestroyDeviceInfoList (hardwareDeviceInfo);
if (i >= 0)
{
return TRUE;
}
else
{
return FALSE;
}
}

該函數(shù)大致流程:

1.通過SetupDiGetClassDevs函數(shù)根據(jù)GUID獲得設備頂級窗口句柄。

2.然后通過這個句柄,使用SetupDiEnumDeviceInterfaces函數(shù)枚舉USB設備,直到找到符合條件的USB設備或枚舉完所有設備為止。

3.當找到符合條件的設備后,使用SetupDiGetDeviceInterfaceDetail函數(shù)獲取設備路徑。

根據(jù)設備路徑獲得輸入管道和輸出管道的路徑。

// 獲得USB設備路徑 deviceName '\\?\usb#vid_045e&pid_00ce#00000000-0000-0000-0427-980002d9f4b1#{00873fdf-61a8-11d1-aa5e-00c04fb1728b}'
if(!GetUsbDeviceFileName((LPGUID)&GUID_CLASS_USBSAMP_USB, deviceName))
{
MessageBox(L'設備未連接');
return;
}
// hRead讀管道路徑 inPipe '\\?\usb#vid_045e&pid_00ce#00000000-0000-0000-0427-980002d9f4b1#{00873fdf-61a8-11d1-aa5e-00c04fb1728b}\PIPE00'
StringCchCopy(inPipe , MAX_LENGTH, deviceName);
StringCchCat(inPipe, MAX_LENGTH, L'\\' );
if(FAILED(StringCchCat (inPipe, MAX_LENGTH, L'PIPE00'))) {
return;
}
// hWrite寫管道路徑 outPipe '\\?\usb#vid_045e&pid_00ce#00000000-0000-0000-0427-980002d9f4b1#{00873fdf-61a8-11d1-aa5e-00c04fb1728b}\PIPE01'
StringCchCopy(outPipe , MAX_LENGTH, deviceName);
StringCchCat(outPipe, MAX_LENGTH, L'\\' );
if(FAILED(StringCchCat (outPipe, MAX_LENGTH, L'PIPE01'))) {
return;
}

驅動代碼設定,輸入管道路徑為設備路徑加上\PIPE00,輸出管道路徑為設備路徑加上\PIPE01

2、USB口通信

通過CreateFile打開管道,使用WriteFile和ReadFile就可以進行USB口的輸入輸出了。

注意,在讀取USB口數(shù)據(jù)時,ReadFile函數(shù)會阻塞。所以需要用非阻塞的方式讀,在打開PIPE時使用FILE_FLAG_OVERLAPPED標記。

hRead = CreateFile(inPipe,
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_WRITE | FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if(hRead == INVALID_HANDLE_VALUE)
{
MessageBox(L'輸入通道打開失敗');
return;
}

在讀線程中使用異步方式讀。

success = ReadFile(pDlg->hRead, pDlg->inBuf, 65536, &len, &overlap);
// 因為是overlapped操作,ReadFile會將讀文件請求放入讀隊列之后立即返回(false),而不會等到文件讀完才返回(true)
if (!success)
{
if (GetLastError() == ERROR_IO_PENDING)
{
dwRes = WAIT_TIMEOUT;
while(dwRes != WAIT_OBJECT_0)
{
dwRes = WaitForSingleObject(pDlg->hRead, 1000);
// 獲取讀的的長度
success = GetOverlappedResult(pDlg->hRead, &overlap, &len, FALSE);
// 上面二條語句完成的功能與下面一條語句的功能等價:
// 一直阻塞等到得到數(shù)據(jù)才繼續(xù)下面。
// GetOverlappedResult(pDlg->hRead, &overlap, &len, TRUE);
if (pDlg->killThread)
{
// 關閉線程,直接關閉
return 0;
}
}
}
else
{
// 出錯!
return -1;
}
}

傳輸速度測試

編寫程序,測試工控主板端向PC端的數(shù)據(jù)傳輸速度。

EM9170上傳速度最高可達3.6MB/秒。

EM9160上傳速度最高可達500kb/秒。

其他說明

驅動中默認的管道BUFFER大小為256字節(jié),在讀寫操作時,不宜超過管道BUFFER大小,否則會返回失敗。例程中提供一個修改后的驅動,只是簡單將BUFFER擴大到64K,原驅動保留為usbsamp_bak.sys。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6107

    瀏覽量

    37147
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    全面適配國產(chǎn)操作系統(tǒng)的龍芯平臺工控機,構建信創(chuàng)產(chǎn)業(yè)堅實硬件底座

    創(chuàng)產(chǎn)業(yè),即信息技術應用創(chuàng)新產(chǎn)業(yè),是當前國家信息化發(fā)展的戰(zhàn)略重點。其核心目標是構建自主可控的信息技術體系,從芯片、操作系統(tǒng)到整機、應用軟件,實現(xiàn)全鏈路的國產(chǎn)化替代。在這一宏偉藍圖中,
    的頭像 發(fā)表于 04-08 17:14 ?330次閱讀
    全面適配國產(chǎn)操作系統(tǒng)的龍芯平臺<b class='flag-5'>工控</b>機,構建信<b class='flag-5'>創(chuàng)</b>產(chǎn)業(yè)堅實硬件底座

    龍芯主板——信創(chuàng)體系的智慧硬核基石

    信息技術飛速發(fā)展的當下,信創(chuàng)體系的自主可控與創(chuàng)新升級已成為國家戰(zhàn)略層面的關鍵任務。作為信創(chuàng)產(chǎn)業(yè)發(fā)展的重要基礎硬件支撐,國產(chǎn)工控主板的自主可
    的頭像 發(fā)表于 03-11 10:44 ?240次閱讀
    龍芯<b class='flag-5'>主板</b>——信<b class='flag-5'>創(chuàng)</b>體系的智慧硬核基石

    創(chuàng)產(chǎn)業(yè)駛入快車道,國產(chǎn)工控主板成自主可控關鍵支撐

    當前,我國信創(chuàng)產(chǎn)業(yè)規(guī)模大幅突破,信息技術應用創(chuàng)新產(chǎn)業(yè)迎來高速發(fā)展期。發(fā)展信創(chuàng),早已超越單純的技術升級范疇,成為保障國家信息安全、推動經(jīng)濟高質
    的頭像 發(fā)表于 03-04 14:18 ?160次閱讀
    信<b class='flag-5'>創(chuàng)</b>產(chǎn)業(yè)駛入快車道,國產(chǎn)<b class='flag-5'>工控</b><b class='flag-5'>主板</b>成自主可控關鍵支撐

    創(chuàng)國產(chǎn)化引領丨康仕攜手龍芯打造信創(chuàng)國產(chǎn)化工控全場景解決方案

    基于龍芯平臺的國產(chǎn)化工控產(chǎn)品矩陣已全面成型,全系列符合信創(chuàng)國產(chǎn)化標準。 圍繞龍芯2K3000與龍芯3B6000M處理器,康仕完成覆蓋邊緣計算、智能制造、智能交通、移動加固計算等領域的全場景信
    的頭像 發(fā)表于 02-24 16:11 ?1424次閱讀
    信<b class='flag-5'>創(chuàng)</b>國產(chǎn)化引領丨<b class='flag-5'>英</b>康仕攜手龍芯打造信<b class='flag-5'>創(chuàng)</b>國產(chǎn)化<b class='flag-5'>工控</b>全場景解決<b class='flag-5'>方案</b>

    3A6000四核龍芯工控主板,推動信創(chuàng)工控深度融合

    當今信創(chuàng)科技快速發(fā)展,技術的不斷演進和市場需求的變化,在工控領域也在進行源源不斷地創(chuàng)新,其中最引人注目的是國產(chǎn)龍芯主板在其中的發(fā)展應用。
    的頭像 發(fā)表于 11-14 09:10 ?471次閱讀

    工控主板的設計特性

    在工業(yè)自動化、智能裝備、物聯(lián)網(wǎng)等領域,工控主板作為核心控制單元,其設計質量直接決定了整個系統(tǒng)的穩(wěn)定性、可靠性與運行效率。與消費級主板不同,工控主板
    的頭像 發(fā)表于 11-13 08:58 ?562次閱讀
    <b class='flag-5'>工控</b><b class='flag-5'>主板</b>的設計特性

    新時代的硬核基石:龍芯工控主板助力信創(chuàng)產(chǎn)業(yè)新基建

    在數(shù)字技術重塑產(chǎn)業(yè)格局的今天,信創(chuàng)產(chǎn)業(yè)已成為保障國家信息技術安全的核心戰(zhàn)略。作為工業(yè)自動化系統(tǒng)的大腦,工控主板的自主可控程度直接決定信創(chuàng)新基
    的頭像 發(fā)表于 11-05 13:54 ?377次閱讀

    工控主板的三大核心技術

    在工業(yè)自動化的浪潮中,工控主板如同“工業(yè)大腦”的核心載體,支撐著各類設備的穩(wěn)定運行與智能升級。相較于消費級主板,工控主板需在復雜工況下實現(xiàn)長
    的頭像 發(fā)表于 10-16 11:05 ?479次閱讀

    智慧新核心,龍芯主板助力信創(chuàng)體系再升級

    信息技術飛速發(fā)展的當下,信創(chuàng)體系的自主可控與創(chuàng)新升級已成為國家戰(zhàn)略層面的關鍵任務。作為信創(chuàng)產(chǎn)業(yè)發(fā)展的重要基礎硬件支撐,國產(chǎn)工控主板正發(fā)揮著
    的頭像 發(fā)表于 08-11 09:14 ?792次閱讀

    易華錄入選國家級信息技術應用創(chuàng)新典型解決方案

    近日,工業(yè)和信息化部網(wǎng)絡安全產(chǎn)業(yè)發(fā)展中心(工業(yè)和信息化部信息中心)公布了“2024年信息技術應用創(chuàng)新解決方案”評選結果。易華錄申報的“基于節(jié)
    的頭像 發(fā)表于 08-07 15:35 ?1747次閱讀

    飛騰主板為信創(chuàng)產(chǎn)業(yè)發(fā)展提高硬實力

    信息技術飛速發(fā)展的當下,信創(chuàng)產(chǎn)業(yè)已成為我國實現(xiàn)科技自立自強、保障國家信息安全的關鍵領域。信創(chuàng),即信息技術應用創(chuàng)新,其核心目標是實現(xiàn)
    的頭像 發(fā)表于 07-22 18:20 ?813次閱讀

    DEKRA德凱成為沙特通信信息技術設備技術法規(guī)認證機構

    近日,DEKRA德凱成功獲得沙特標準、計量和質量組織(SASO)認可,正式成為沙特通信信息技術設備技術法規(guī)(Technical Regulation for Communications
    的頭像 發(fā)表于 07-15 14:27 ?1014次閱讀

    科普|信創(chuàng)是什么?一文讀懂“信息技術應用創(chuàng)新”戰(zhàn)略

    什么是信創(chuàng)?信創(chuàng),即“信息技術應用創(chuàng)新”,是國家推動IT系統(tǒng)自主可控、安全可控的重要戰(zhàn)略工程。它不僅是技術層面的創(chuàng)新,更承載著保障國家網(wǎng)絡安全、推動產(chǎn)業(yè)升級和實現(xiàn)數(shù)字主權的重任。簡單來
    的頭像 發(fā)表于 06-13 10:06 ?9412次閱讀
    科普|信<b class='flag-5'>創(chuàng)</b>是什么?一文讀懂“<b class='flag-5'>信息技術</b>應用創(chuàng)新”戰(zhàn)略

    創(chuàng)浪潮下,國產(chǎn)主板有什么新的發(fā)展機遇?

    信息技術應用創(chuàng)新浪潮的推動下,國產(chǎn)主板迎來了諸多新的發(fā)展機遇。信創(chuàng)產(chǎn)業(yè)旨在實現(xiàn)信息技術領域的自主可控,這一戰(zhàn)略目標為國產(chǎn)主板的發(fā)展提供了廣
    的頭像 發(fā)表于 05-09 09:24 ?847次閱讀
    信<b class='flag-5'>創(chuàng)</b>浪潮下,國產(chǎn)<b class='flag-5'>主板</b>有什么新的發(fā)展機遇?
    隆化县| 罗甸县| 武宣县| 泸水县| 宜州市| 平邑县| 玉屏| 绥德县| 双峰县| 北安市| 于田县| 古丈县| 乌鲁木齐市| 邵阳县| 伊春市| 犍为县| 卢龙县| 潢川县| 凤山市| 江阴市| 普定县| 新疆| 呼和浩特市| 南江县| 报价| 沂南县| 丹巴县| 灌云县| 夏邑县| 腾冲县| 沙湾县| 高邮市| 铜鼓县| 桂东县| 南川市| 洛扎县| 新宾| 伊金霍洛旗| 芦山县| 镇原县| 北川|