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

USB 讀/寫問題?

尚未結案
kk_9951
一般會員


發表:5
回覆:3
積分:1
註冊:2006-08-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-14 15:42:29 IP:61.31.xxx.xxx 訂閱
小弟要對USB Port 做讀/寫動作. 目前可以寫出去了,但讀回來只能讀到ASCII 碼, 文字無法讀取


[code cpp]
void __fastcall TMainForm::Button8Click(TObject *Sender)
{
hOut = CreateFile("\\\\?\\USB#Vid_0588&Pid_3987#0&9551&000#{a5dcbf10-6530-11d2-901f-00c04fb951ed}", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); // 開啟 USB port
}

void USB_SendByte(unsigned char Dat)
{
DWORD nBytesWritten;
ULONG Result;
Result = WriteFile(hOut, &Dat, 1,&nBytesWritten,NULL); // 寫一個 byte 到 USB Port
}


unsigned char USB_ReadByte(void)
{
BYTE Buffer;
DWORD nBytesRead;
unsigned char kk;
kk = ReadFile(hOut, &Buffer, 1, &nBytesRead, NULL); // 從USB Port 讀一個 byte
return Buffer;
}

請在此區域輸入程式碼
[/code]

當我 USB_SendByte(0x12) , 再去USB_ReadByte(), 讀到值為 0x12 <=== ok
當我 USB_SendByte(0xC0) , 再去USB_ReadByte(), 讀到值為 0x40 <=== 不是 0xC0 而是 0x40

為什麼讀到 0x40 而不是 0xC0 呢?


關於 ReadFile(); 如果不先執行 USB_SendByte(); 而對USB做Read ,結果程式在 ReadFile(hOut, &Buffer, 1, &nBytesRead, NULL); 會跳不出來 ??
是否因為 ReadFile 在等待buf 滿呢? 要如何知道 buf 有資料呢? (已解決了)


[code cpp]
COMSTAT stat;
DWORD dwError;

ClearCommError(hOut,&dwError,&stat); // <= 用這個來判斷有沒有資料
if(stat.cbInQue > 0)
USB_ReadByte();

[/code]


望各位大大協助... 謝謝!!
編輯記錄
kk_9951 重新編輯於 2008-04-15 15:44:10, 註解 無‧
kk_9951 重新編輯於 2008-04-15 16:03:03, 註解 無‧
kk_9951 重新編輯於 2008-04-15 17:44:15, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-04-15 16:20:41 IP:163.28.xxx.xxx 訂閱
USB 上的firmware 是你自己寫的嗎??
------
FPGA驗證, FPGA開發平台, http://smims.com
kk_9951
一般會員


發表:5
回覆:3
積分:1
註冊:2006-08-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-15 16:54:56 IP:61.31.xxx.xxx 訂閱

===================引 用 ikk 文 章===================
USB 上的firmware 是你自己寫的嗎??

您好,
我是使用 usbser.sys


系統時間:2024-04-19 15:06:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!