線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:10774
推到 Plurk!
推到 Facebook!

如何用C++Builder 6建立USB傳送接收資料?.

答題得分者是:taishyang
wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-07-12 17:58:52 IP:59.124.xxx.xxx 訂閱
各位大大好:
小弟第一次接觸USB通訊介面,之前有使用C Builder 6寫RS232通訊,
因為小弟正有資料透過RS232TOUSB傳送到PC端,PC端是有COMPort,
C Builder 6寫RS232是OK的,
但也發現有USB的VID和PID,所以也想學習C Builder 6寫USB通訊,
但是不知如何下手,有找尋了很多網頁和資料,還是一頭霧水,想請問
1.是否可一樣用CreateFile、WriteFile和ReadFile來完成嗎?
2.如何建立USB的通訊?
3如何傳送接收資料?
4.是否有完整範例或程式可提供參考學習,感謝~
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-07-12 19:09:41 IP:122.116.xxx.xxx 訂閱
簡單的說
WriteFile送資料到device
4.是否有完整範例或程式可提供參考學習,感謝~
這要搭配device端,若真要學可以買市售的練習板,通常都會附上完整範例


GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-07-12 23:30:01 IP:111.249.xxx.xxx 未訂閱
如果我想要練習USB HID裝置的通訊,有什麼樣的練習板適合而且好買到呢?


===================引 用 taishyang 文 章===================
簡單的說
CreateFile取得device的handle
用WriteFile送資料到device
4.是否有完整範例或程式可提供參考學習,感謝~
這要搭配device端,若真要學可以買市售的練習板,通常都會附上完整範例


wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-07-13 08:40:59 IP:59.124.xxx.xxx 訂閱
想再請問如果BCB的RS232通訊程式,用CreateFile、WriteFile和ReadFile來完成開啟、資料傳送接收,例如BCB_RS232之CreateFile、WriteFile和ReadFile程式碼如下,
那USB如何用CreateFile、WriteFile和ReadFile編寫程式碼,USB需要哪些資訊和在BCB建立哪些元件?
請各位大大可否用CreateFile、WriteFile和ReadFile編寫範例給小弟學習?小弟我嘗試寫了很久USB都不能通訊,感謝。
#include
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hComm;
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *ComNo;
DCB dcb;
String Temp;
Temp = "COM3";
ComNo = Temp.c_str();
hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//<---請問若要編寫USB,那CreateFile內要如何編寫哪些資訊?

if (hComm == INVALID_HANDLE_VALUE)
{
MessageBox(0,"開啟通訊阜錯誤!!","Comm Error",MB_OK);
return;
}
GetCommState(hComm,&dcb);
dcb.BaudRate = CBR_9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
if (!SetCommState(hComm, &dcb))
{
MessageBox(0,"通訊阜設定錯誤!!!","Set Error",MB_OK);
CloseHandle(hComm);
return;
}
}

void __fastcall TForm1::Button3Click(TObject *Sender)
{
String Temp;
char *SendData;
int ln;
unsigned long lrc,BS;
if (hComm==0)
return;
Temp = Memo1->Text;
SendData = Temp.c_str();
BS = Temp.Length();
WriteFile(hComm,SendData,BS,&lrc,NULL);//<--寫USB,那WriteFile內要編寫哪些資訊?
}

void __fastcall TForm1::Button4Click(TObject *Sender)
{
String Temp;
char inbuff[1024];
DWORD nBytesRead, dwEvent, dwError;
COMSTAT cs;
ClearCommError(hComm,&dwError,&cs);
if (cs.cbInQue > sizeof(inbuff))
{
PurgeComm(hComm, PURGE_RXCLEAR);
return;
}
ReadFile(hComm, inbuff, cs.cbInQue,&nBytesRead,NULL);<--寫USB,那ReadFile要編寫哪些資訊?
inbuff[cs.cbInQue]='\0';
Memo2->Text = inbuff '\r' '\n';
}

===================引 用 taishyang 文 章===================

簡單的說
WriteFile送資料到device
4.是否有完整範例或程式可提供參考學習,感謝~
這要搭配device端,若真要學可以買市售的練習板,通常都會附上完整範例


taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-07-13 10:33:49 IP:122.116.xxx.xxx 訂閱
http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=99006
http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=95893

===================引 用 wa063 文 章===================
想再請問如果BCB的RS232通訊程式,用CreateFile、WriteFile和ReadFile來完成開啟、資料傳送接收,例如BCB_RS232之CreateFile、WriteFile和ReadFile程式碼如下,
那USB如何用CreateFile、WriteFile和ReadFile編寫程式碼,USB需要哪些資訊和在BCB建立哪些元件?
請各位大大可否用CreateFile、WriteFile和ReadFile編寫範例給小弟學習?小弟我嘗試寫了很久USB都不能通訊,感謝。

編輯記錄
taishyang 重新編輯於 2011-07-12 20:36:26, 註解 無‧
taishyang 重新編輯於 2011-07-12 20:36:47, 註解 無‧
wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-07-13 17:32:06 IP:59.124.xxx.xxx 訂閱
感謝taishyang 提供相關網頁及建議方法,我已有看過了,還是有不懂,我嘗試用BCB編寫CreateFile,也已知GUID、VID和PID,執行後還是無法開啟USB~會顯示"開啟通訊阜錯誤",不知哪裡錯誤,要如何修改,有需要在BCB-Project加入什麼嗎?其程式碼如下:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
hComm = CreateFile("USB\VID_1C04&PID_EA60\0001{36FC9E60-C465-11CF-8056-444553540000}\0020",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,0);//
if (hComm == INVALID_HANDLE_VALUE)
{
MessageBox(0,"開啟通訊阜錯誤!!","Comm Error",MB_OK);
return;
}

}===================引 用 taishyang 文 章===================
http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=99006
http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=95893

taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-07-13 17:36:52 IP:122.116.xxx.xxx 訂閱
1.你已經有USB HID裝置了?
2.例舉的動作怎麼沒有?


===================引 用 wa063 文 章===================
感謝taishyang 提供相關網頁及建議方法,我已有看過了,還是有不懂,我嘗試用BCB編寫CreateFile,也已知GUID、VID和PID,執行後還是無法開啟USB~會顯示"開啟通訊阜錯誤",不知哪裡錯誤,要如何修改,有需要在BCB-Project加入什麼嗎?其程式碼如下:


wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-07-13 17:42:27 IP:59.124.xxx.xxx 訂閱
1.我有在登入檔和硬體裝置那看到GUID VID和PID。
2.我不知道怎麼寫列舉動作,要寫在BCB哪裡,該怎麼寫。
===================引 用 taishyang 文 章===================
1.你已經有USB HID裝置了?
2.例舉的動作怎麼沒有?

taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-07-13 17:57:06 IP:122.116.xxx.xxx 訂閱
1.你已經有USB HID裝置了?
2.例舉的動作怎麼沒有?

wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#10 引用回覆 回覆 發表時間:2011-07-13 18:08:06 IP:59.124.xxx.xxx 訂閱
1.有連接實體硬體。
2.我有看過也嘗試寫入BCB,但是還是不行執行,在BCB產生很多錯誤,還是一頭霧水,可以請您貼程式碼如何編寫,感謝了。
===================引 用 taishyang 文 章===================
1.要有實際硬體
2.給你的連結裡面有

taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#11 引用回覆 回覆 發表時間:2011-07-13 18:40:37 IP:122.116.xxx.xxx 訂閱
錯誤訊息是?
請將你的程式碼PO出來,讓前輩們幫你看看問題在哪^^
另外下面的連結,從連結USB HID裝置到讀資料都有完整的code可以參考
http://delphi.ktop.com.tw/board.php?cid=168&fid=917&tid=95893



暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#12 引用回覆 回覆 發表時間:2011-07-14 07:17:43 IP:111.242.xxx.xxx 未訂閱
你的是 USB-> 232?
如果是的話,它們都有驅動程式,你就跟寫 RS232 一樣呀,只是個 com port 而已呀。
幹嘛提到 VID, PID? 完全被驅動程式包起來了呀。
===================引 用 wa063 文 章===================
各位大大好:
小弟第一次接觸USB通訊介面,之前有使用C Builder 6寫RS232通訊,
因為小弟正有資料透過RS232TOUSB傳送到PC端,PC端是有COMPort,
C Builder 6寫RS232是OK的,
但也發現有USB的VID和PID,所以也想學習C Builder 6寫USB通訊,
但是不知如何下手,有找尋了很多網頁和資料,還是一頭霧水,想請問
1.是否可一樣用CreateFile、WriteFile和ReadFile來完成嗎?
2.如何建立USB的通訊?
3如何傳送接收資料?
4.是否有完整範例或程式可提供參考學習,感謝~
wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#13 引用回覆 回覆 發表時間:2011-07-14 08:21:06 IP:59.124.xxx.xxx 訂閱
這是我嘗試撰寫的BCB_USB通訊還是有問題,請各位前輩修改與指教 謝謝
http://good.gd/1397497.htm
編輯記錄
wa063 重新編輯於 2011-07-13 19:29:51, 註解 無‧
wa063 重新編輯於 2011-07-13 19:55:46, 註解 無‧
wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#14 引用回覆 回覆 發表時間:2011-07-14 09:39:30 IP:61.59.xxx.xxx 訂閱
我是用MCU連接USB IC(CP2102) 連接到PC端,是有COM Port,也有看到USB資訊,所以想學習用BCB寫USB通訊,我嘗試寫了快一星期了,還是無法開啟USB,目前大概知道需要寫
1.列舉程式。(但是不知道要寫在BCB的哪一個地方?是執行按鍵的CreateFile前?)
2.CreateFile。(有嘗試撰寫,但不知道有沒有成功開啟)
3.ReadFile。 如何編寫USB讀取資料?
4.WriteFile。如何編寫USB傳送資料?

請各位前輩給予指教~~感謝!!
===================引 用 暗黑破壞神 文 章===================
你的是 USB-> 232?
如果是的話,它們都有驅動程式,你就跟寫 RS232 一樣呀,只是個 com port 而已呀。
幹嘛提到 VID, PID? 完全被驅動程式包起來了呀。
pedro
尊榮會員


發表:152
回覆:1177
積分:865
註冊:2002-06-12

發送簡訊給我
#15 引用回覆 回覆 發表時間:2011-07-14 09:42:55 IP:60.248.xxx.xxx 未訂閱
HI GrandRuru

如果在device端是HID裝罝,記得很久以前我在delphi用HID controller元件,依device的protocol就可以存取,如果一下子不想進入太深技術細節,或許可以試試(不清楚BCB是不是可以?)
http://www.soft-gems.net/index.php?option=com_content&task=view&id=30&Itemid=33


看看這塊板
Cypress Semiconductor EZ-USB
http://www.lvr.com/hidpage.htm

===================引 用 GrandRURU 文 章===================
如果我想要練習USB HID裝置的通訊,有什麼樣的練習板適合而且好買到呢?


===================引 用 taishyang 文 章===================
簡單的說
CreateFile取得device的handle
用WriteFile送資料到device
4.是否有完整範例或程式可提供參考學習,感謝~
這要搭配device端,若真要學可以買市售的練習板,通常都會附上完整範例


編輯記錄
pedro 重新編輯於 2011-07-13 19:43:43, 註解 無‧
taishyang
站務副站長


發表:377
回覆:5485
積分:4552
註冊:2002-10-08

發送簡訊給我
#16 引用回覆 回覆 發表時間:2011-07-14 10:28:36 IP:122.116.xxx.xxx 訂閱
如果是像暗黑前輩所講的你的裝置是USB <-> RS232
那你無法介入USB的動作,因為都被Driver跟硬體做掉了


===================引 用 wa063 文 章===================
我是用MCU連接USB IC(CP2102) 連接到PC端,是有COM Port,也有看到USB資訊,所以想學習用BCB寫USB通訊,我嘗試寫了快一星期了,還是無法開啟USB,目前大概知道需要寫
1.列舉程式。(但是不知道要寫在BCB的哪一個地方?是執行按鍵的CreateFile前?)
2.CreateFile。(有嘗試撰寫,但不知道有沒有成功開啟)
3.ReadFile。 如何編寫USB讀取資料?
4.WriteFile。如何編寫USB傳送資料?

請各位前輩給予指教~~感謝!!
===================引 用 暗黑破壞神 文 章===================
你的是 USB-> 232?
如果是的話,它們都有驅動程式,你就跟寫 RS232 一樣呀,只是個 com port 而已呀。
幹嘛提到 VID, PID? 完全被驅動程式包起來了呀。
wa063
一般會員


發表:5
回覆:10
積分:3
註冊:2010-11-30

發送簡訊給我
#17 引用回覆 回覆 發表時間:2011-07-14 10:42:23 IP:59.124.xxx.xxx 訂閱
原來是這樣啊!!! 因為我是用PIC18F UART接USB IC 連接到PC端, 所以被Driver跟硬體所做完了?所以無法用USB動作囉!! 那就是要使用PIC有USB的介面 是純USB介面才能去使用BCB寫USB動作囉?! 是純USB介面才能去使用BCB寫USB動作囉?! 目前只會用BCB寫簡單的程式^^
謝謝各位前輩的指點 感謝!!


===================引 用 taishyang 文 章===================
如果是像暗黑前輩所講的你的裝置是USB <-> RS232
那你無法介入USB的動作,因為都被Driver跟硬體做掉了


請各位前輩給予指教~~感謝!!
===================引 用 暗黑破壞神 文 章===================
你的是 USB-> 232?
如果是的話,它們都有驅動程式,你就跟寫 RS232 一樣呀,只是個 com port 而已呀。
幹嘛提到 VID, PID? 完全被驅動程式包起來了呀。
lwh
一般會員


發表:7
回覆:11
積分:3
註冊:2009-01-05

發送簡訊給我
#18 引用回覆 回覆 發表時間:2011-08-27 00:56:39 IP:117.19.xxx.xxx 訂閱
http://www.obdev.at/products/vusb/index.html
這裡有相當多的資料可參考, 包括host(PC)端和device端的,
硬體也夠簡單, 一顆不到100元的 AVR MCU,
可先做為入門的參考
lwh
一般會員


發表:7
回覆:11
積分:3
註冊:2009-01-05

發送簡訊給我
#19 引用回覆 回覆 發表時間:2011-08-27 01:36:24 IP:117.19.xxx.xxx 訂閱
另外, wa063有提到 PIC18F, 那麼您有使用 Microchip MCU的經驗,
可以試試PIC18F2550或PIC18F4550,
然後搜一下Microchip MCHPFSUSB v2.2(可能有更新的版本),
這資料包含有Host端的software(BCB/VC )還有device端的USB Application framework,
硬體也是夠簡單, 一顆MCU一顆震盪器, 一顆電容, 幾顆電阻
系統時間:2017-10-24 4:41:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!