logo

CH375B通過串口連接USB 鍵盤獲取設備描述符不成功,求助!
使通過串口方式連接至CH375B 芯片,串口速率為9600 ,8位數據,2位停止,無校驗,無流控。

在電腦上通過串口助手,將命令字及數據依次發送至CH375B,

不能獲取插入鍵盤的設備描述,換成鼠標也不可以,

但是插入手頭的U盤, 可以成功獲取到設備描述符!

請問對于鍵盤鼠標與U盤的差異在什么地方,應該如何處理??
這人很懶,什么都沒留下
CH375串行數據格式不是 1個起始位、9個數據位、1個停止位嗎?搞不懂,樓主是怎么控制第九位對375進行寫數據、寫命令的。本人剛開始學CH375B,上面布置的任務是通過串口方式寫U盤,求指導
這人很懶,什么都沒留下
To:hubertboy
使用串口連接CH375,首先把測試命令測試通過。鍵盤和鼠標的話一般是低速設備,區別于U盤,需要設置一線總線速度。
To:杜賓
第九位通過TB8寄存器來控制,首先初始化設置為9位,為1時是命令。為0時為數據。
郵箱:[email protected] 電話:025-52638376
To: ZBin
感謝您的回復,您所說的測試命令是指CHECK_EXIT嗎?
現在使用CHECK_EXIST 命令測試OK! 發送 0x06 0x55 , IC 返回0xAA !
這人很懶,什么都沒留下
你的測試命令是正確通過的,那注意一下速度設置,CH375操作鍵盤鼠標你可以參考一下第8樓:http://www.lghljn.co/bbs/View.asp?S=101&I=19463
郵箱:[email protected] 電話:025-52638376
To: ZBin
感謝您的回復,測試后,在來報告!

查看源碼中更改速度的代碼為:
void set_freq(void)
{
CH375_WR_CMD_PORT(0x0b); /* 切換使375B進入低速模式 */
CH375_WR_DAT_PORT(0x17);
CH375_WR_DAT_PORT(0xd8);
}

與手冊中 SET_USB_SPEED 0x04 不一致!請問代碼是否正確?

測試發現,使用GET_IC_VER 命令獲取版本,可以返回 0xB7,
使用 CHECK_EXIST 命令,可以接受到發送數據取反后的值。

調用 get_descr_ex()程序,此程序內 issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt();
返回狀態為0x2E,
請問是什么錯誤,該如何處理?
這人很懶,什么都沒留下
等待回復!
這人很懶,什么都沒留下
設置速度的話可以使用第5樓的函數,也可以用SET_USB_SPEED 0x04這條命令。
獲取描述符get_descr_ex()中斷返回0x2E說明主機發送命令設備沒有響應,有可能是你命令發送有問題,最好使用USB分析儀監控一下數據。
郵箱:[email protected] 電話:025-52638376
現在手頭沒有USB分析的設備,無法監控到數據!
這人很懶,什么都沒留下
檢查代碼發現兩個問題,
1,我現在使用的是STM32 ,數據存儲與51 有一個大小端的差異,導致數據發送順序錯誤!
2,數據類型,在C51 中 int 是16為的, 在STM32 中int 是32 位的,導致共用體
union _REQUEST //請求包結構
{ struct
{ unsigned char bmRequestType;
unsigned char bRequest;
unsigned int wValue;
unsigned int wIndex;
unsigned int wLength;
}Req;
unsigned char Req_buf[8];
}Request;

與實際想要的數據有出入!
要更改為:
union _REQUEST //ÇëÇó°ü½á11
{ struct
{ unsigned char bmRequestType;
unsigned char bRequest;
unsigned short int wValue;
unsigned short int wIndex;
unsigned short int wLength;
}Req;
unsigned char Req_buf[8];
}Request;
這人很懶,什么都沒留下
現測試結果如下:

1,可以成功返回設備描述符,以及配置符,并可成功設置配置!
2,調用 set_idle() ,返失敗。。
3,獲取report 成功,
4,調用set_report(),返回1, 調用成功,
5,調用 get_int_in() 后,沒有中斷發生。

請問 1, 調用 set_idle() 失敗后,是否可以繼續操作?
2,調用 get_int_in() 后,沒有中斷發生。 可能的原因是什么?
這人很懶,什么都沒留下
程序也沒有做更改, 現在set_idle 調用后返回成功!

2,調用 get_int_in() 后,沒有中斷發生。

增加重試次數后,發生中斷!

另外,請問當一個設備有兩個輸出斷點 81 ,82 的時候,如何選擇充那個端點獲取數據??
這人很懶,什么都沒留下
get_int_in() 函數是在發送IN令牌包取數據,操作鼠標鍵盤需要每隔幾ms發送一次,這樣操作鼠標鍵盤才能獲取到數據。
一般鼠標鍵盤只有一個端點(81)來傳輸數據,如果有兩個端點,有可能一個端點沒用到,也有可能一個端點傳輸控制信息,一個端點傳輸數據。具體你插到電腦上監控一下USB數據。
郵箱:[email protected] 電話:025-52638376
能否采用兩個端點輪流發送IN 令牌的方式來獲取兩個端點的數據?

另外,現在手頭有塊USB的紅外觸摸屏,插上后,act led 不停的閃爍,頻率大約2秒,

請問是什么原因呢?
這人很懶,什么都沒留下
可以,我們CH375的ACT引腳是USB設備連接狀態輸出引腳,低電平有效。閃爍的話你的設備是不是一直在斷開連接。
郵箱:[email protected] 電話:025-52638376
使用 獲取狀態命令 0x22 ,返回 0x15 0x16 ,交替返回!

可能是什么原因列?

懷疑是電源不夠,增加了一個470uF 的電容在USB 座上,測量實際平均電流也就100mA,

增加電容后,結果還是一樣!
這人很懶,什么都沒留下
只有登錄才能回復,可以選擇微信和github賬號登錄
体彩11选5助手 30选5 云南11选5 股票分析报告3000字 安徽十一选五 190足球即时指数手机版 快乐12 高端制造业股票 贵州茅台股票代码 国企理财平台排名 如何炒金 山西快乐十分 炒股入门必读 广东好彩1 广西快乐双彩 个股分析报告范文 2013长线股票推荐