ch376控制從設(shè)備可以使用CH375HST文件夾的程序嗎? 376有相關(guān)子程序嗎??
CH375HST文件夾里的程序分別是兩個單片機系統(tǒng)通過USB交換數(shù)據(jù)和控制USB打印機等設(shè)備的例子。關(guān)于CH376操作從設(shè)備的例子你可以參考CH375的例子,也從下面網(wǎng)址下載相關(guān)例子:http://www.findthetime.net/bbs/View.asp?S=101&I=19463
我再問下。。如果我操作一個其他類的HID設(shè)備的話,端口號是要設(shè)置的?還是從描述信息中讀出還是直接默認(rèn)用0端口號?
其他類的USB設(shè)備與操作HID類相似,控制端點(端點0)進行設(shè)備的初始化,設(shè)備描述符、配置描述符、設(shè)置配置值等。
恩恩。。再問下,那不同的HID設(shè)備,我想發(fā)數(shù)據(jù)和收數(shù)據(jù),他們之間需要單獨配置的是哪里呢?哪里是共同配置呢?
數(shù)據(jù)的收發(fā)只需要根據(jù)配置描述符獲取到端點號,再從對應(yīng)端點獲取數(shù)據(jù)。
超級謝謝呀。。您說的思路很清晰呢。。我再研究下。。
我仿照用375HST中代碼的用CH376讀取另一個CH376配置描述號進行控制從設(shè)備試驗 nsigned char get_descr( unsigned char type ) { /* 從設(shè)備端獲取描述符 */ unsigned char status; CH375_WR_CMD_PORT( CMD_GET_DESCR ); CH375_WR_DAT_PORT( type ); /* 描述符類型, 只支持1(設(shè)備)或者2(配置) */ status=wait_interrupt(); /* 等待CH375操作完成 */ if ( status==USB_INT_SUCCESS ) { /* 操作成功 */ unsigned char buffer[64]; unsigned char i, len; len=rd_usb_data( buffer ); 第一次讀出來的是14 2E 09 02 2E 00 01 01 00 80 24 09 04 00 00 04 FF 80 37 00 07 再讀第二次的話直接讀buffer希望讀出端口號但是是00.。。
然后376HOST例程中 receive_mode ^= 0x80; if(flag_config_2) //第二次獲取設(shè)備的配置描述符 descr_len=data_buf[2]-RD_USB_DATA(data_buf); else descr_len=data_buf[0]-RD_USB_DATA(data_buf); while(descr_len>0) { p+=0x08; issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt();
這里flag_config_2是怎么判斷的,前面都沒有賦值只是設(shè)了bit位。。這幾句代碼美看懂怎么2次讀取呢
我們獲取設(shè)備描述符的流程是先獲取9個字節(jié)的配置描述符(一開始不知道配置描述的長度),第二次根據(jù)獲取到的第三字節(jié)data_buf[2]來獲取到完整的配置描述符。flag_config_2在第一次獲取完配置描述符置1,因為兩次獲取配置描述的長度判斷不同: if(flag_config_2) descr_len=data_buf[2]-RD_USB_DATA(data_buf); else descr_len=data_buf[0]-RD_USB_DATA(data_buf);
不好意思呀,又麻煩您了。。。 /* 從設(shè)備端獲取描述符 */ unsigned char get_descr( unsigned char type ) { xWriteCH376Cmd( CMD_GET_DESCR ); xWriteCH376Data( type ); /* 描述符類型, 只支持1(設(shè)備)或者2(配置) */ status=Wait376Interrupt(); /* 等待CH375操作完成 */ if ( status==USB_INT_SUCCESS ) { /* 操作成功 */ unsigned char i, len; unsigned char buffer[64]; senddata(0x77); len=RD_USB_DATA( buffer ); senddata(len); for ( i=0; i!=len; i++ ) senddata( buffer[i] ); //for ( i=19; i!=26; i++ ) senddata( buffer[i] ); }
return( status ); }
然后我進行設(shè)備跟配置讀寫 get_descr(1); set_addr(10); get_descr(2); /* 獲取USB設(shè)備的配置描述符 */
但是對配置讀寫終端成功,但返回buffer有0個值。。這是哪里有問題了呢。。
如果我不讀設(shè)備符的話,配置符號可以正常讀取了。。。 想問下 UINT8 RD_USB_DATA( UINT8 *buf ) {
unsigned char len, i; unsigned char *p; xWriteCH376Cmd( CMD01_RD_USB_DATA ); /* 從CH375的端點緩沖區(qū)讀取數(shù)據(jù)塊 */
CMD01_RD_USB_DATA這條命令一個是375LNK例程的,我現(xiàn)在調(diào)試376,是這里原因嗎?
CH375(28H)與CH376(27H)的讀命令碼是不一樣的,需要跟你使用的芯片對應(yīng)起來。