[求助]CH375B連接鼠標(biāo)又有新問題了!

緊急求助?。。。?! CH375B可以獲取設(shè)備描述符 配置描述符。。反正GET的都能獲取,但是設(shè)置配置和SET IDLE這兩個(gè)又出問題了 也是返回0x2e!啊~~~~~~~~~[Emot]1[/Emot]

把USB信號(hào)線上的15K電阻全部去掉,USB信號(hào)線上不需要接任何東西,和這個(gè)是有關(guān)系的,我們的芯片正常情況下USB信號(hào)線上不需要任何東西的。你從配置描述符里獲取的配置值是多少(buf[5])?然后把buf[5]作為設(shè)置配置命令的參數(shù),先把設(shè)置配置值命令過了再解決SET IDLE


去除了?。?!buf【5】=1; unsigned char set_config_ex() { Request.Req.bmRequestType=0x00; Request.Req.bRequest=0x09;config_value=config_value; Request.Req.wValue=0x0000|((unsigned short int)config_value<<8); Request.Req.wIndex=0x0000; Request.Req.wLength=0x0000; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf);/* SETUP數(shù)據(jù)總是8字節(jié) */ issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* SETUP階段操作成功 */ { endp6_mode=0xc0; toggle_recv(); issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* 狀態(tài)階段操作成功 */ { if(rd_usb_data(data_buf)!=0) return(0); } else return(0); } else return(0); return(1) ; } unsigned char set_idle() { Request.Req.bmRequestType=0x21; Request.Req.bRequest=0x0a; Request.Req.wValue=0x0000; Request.Req.wIndex=0x0000;if(flag_interface_2==1)Request.Req.wIndex=0x0100; Request.Req.wLength=0x0000; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf);/* SETUP數(shù)據(jù)總是8字節(jié) */ issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt(); if(status==USB_INT_SUCCESS) /* SETUP階段操作成功 */ { endp6_mode=0xc0; toggle_recv(); issue_token(( 0 << 4 ) | DEF_USB_PID_IN );status=wait_interrupt(); if(status==USB_INT_SUCCESS) /* 狀態(tài)階段操作成功 */ { if(rd_usb_data(data_buf)!=0) return(0); } else return(0); } else return(0); return(1); } unsigned char set_report() { Request.Req.bmRequestType=0x21; Request.Req.bRequest=0x09; Request.Req.wValue=0x0002; Request.Req.wIndex=0x0000; Request.Req.wLength=0x0100; endp7_mode=0x80; toggle_send(); wr_usb_data(8,Request.Req_buf);/* SETUP數(shù)據(jù)總是8字節(jié) */ issue_token(( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* SETUP階段操作成功 */ { toggle_send(); Request.Req_buf[0]=0x01; wr_usb_data(1,Request.Req_buf); issue_token(( 0 << 4 ) | DEF_USB_PID_OUT);status=wait_interrupt(); if(status==USB_INT_SUCCESS) /* DATA階段操作成功 */ { endp6_mode=0xc0; toggle_recv(); issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS)/* 狀態(tài)階段操作成功 */ { if(rd_usb_data(data_buf)!=0) return(0); } else return(0); } else return(0); } else return(0); return(1); } 我用的單片機(jī)是小端數(shù)據(jù)格式,上次我看到一個(gè)帖子,就按照上面的改了一下。

set_config_ex()中,我將((unsigned int )config_value<<8改成(unsigned int )congfig_value<<0 后 可以返回1 set_idle()中,我將0x0a改成0x0b,因?yàn)槲也榱艘幌沦Y料 發(fā)現(xiàn)0X0A是GET_INTERFACE 0X0B是SET_INTERFACE.也通過了 這樣改行不行呢??? set_report()在if(status==USB_INT_SUCCESS) /* DATA階段操作成功 */ status一直返回0x2e。應(yīng)該怎么做呢?


大小端只有在數(shù)據(jù)類型大于8個(gè)字節(jié)的時(shí)候才會(huì)有大小端的問題,這個(gè)你自己注意下就好了。設(shè)置配置可以了么?set_idle()有可能你的設(shè)備不支持這個(gè)命令,這個(gè)也很正常,返回2E說明你的設(shè)備不支持。0x0B命令是指定啟用協(xié)議或者報(bào)表協(xié)議,一般不需要處理,0x0a和0x0b都是針對(duì)接口的。操作鼠標(biāo),如果的設(shè)備報(bào)表不是復(fù)合的你可以把這個(gè)命令改成如下: Request.Req.bmRequestType=0x21; Request.Req.bRequest=0x09; Request.Req.wValue=0x0100;(高字節(jié)為1,低字節(jié)為0) Request.Req.wIndex=0x0000;(這個(gè)事接口號(hào),根據(jù)你的配置描述符來定義,一般為0) Request.Req.wLength=0x0100; 或者不處理set_report這個(gè)命令請(qǐng)求(有些設(shè)備必須要處理)


恩恩 是的 我發(fā)現(xiàn)不需要SET_REPORT()這個(gè)函數(shù) 嘿嘿 現(xiàn)在獲取鼠標(biāo)輸入的數(shù)據(jù)應(yīng)該怎么弄?能不能提供一個(gè)函數(shù)給我??我發(fā)現(xiàn)例程的程序我不好改!我不想用中斷!謝謝?。ㄎ椰F(xiàn)在用的是根據(jù)例程改的)在鼠標(biāo)有動(dòng)作的時(shí)候除了第一次返回的是0X14以外。其余時(shí)候都是返回的0x20)


額 打錯(cuò)了!是讀取鼠標(biāo)的數(shù)據(jù)!


每隔10MS左右發(fā)送: issue_token(( endp_int1 << 4 ) | DEF_USB_PID_IN);//status=wait_interrupt(); //////////// status=wait_interrupt(); if(status==USB_INT_SUCCESS) { endp6_mode1^=0x40; len_temp=rd_usb_data(data_buf); //鍵盤中斷端點(diǎn)數(shù)據(jù)長度一般為8字節(jié),鼠標(biāo)為4字節(jié) for(i=0;i!=len_temp;i++)data_in[i]=data_buf[i]; for(i=0;i!=8;i++)printf("%02x ",(unsigned int)data_in[i]); printf("\n"); }


嗯 現(xiàn)在能接受到鼠標(biāo)的數(shù)據(jù)了 是3個(gè)值 第一個(gè)是鼠標(biāo)的三個(gè)按鍵 左鍵是01 右鍵是02 中間的是04 對(duì)不?? 但是X方向和Y方向的分別是哪兩個(gè)????


一般式4個(gè)字節(jié),第一個(gè)字節(jié)表示左右按鍵,第二個(gè)字節(jié)表示左右方向,第三字節(jié)表示上下方向。有的鼠標(biāo)是6個(gè)字節(jié)的,每個(gè)字節(jié)又表示不同的意義,你要想把兼容性做的好的話,需要你程序中分析報(bào)表描述符的意義,這個(gè)需要你看HID協(xié)議的


我現(xiàn)在能獲取的是3個(gè)字節(jié)!是標(biāo)準(zhǔn)的!就是按鍵 左右位移和上下位移。我需要獲取4個(gè)字節(jié)(加一個(gè)滑輪)應(yīng)該怎么做呢????


你設(shè)備只返回3個(gè)字節(jié),也沒有辦法。你的設(shè)備有沒有滑輪呢?!你在電腦用BUSHOUND抓下,你鼠標(biāo)左右上下按鍵滑輪的返回值


有滑輪的?。。。。?/p>


你在電腦用BUSHOUND抓下,你鼠標(biāo)左右上下按鍵滑輪的返回值


我發(fā)現(xiàn)是CH375獲取的HID類報(bào)表描述符和標(biāo)準(zhǔn)的HID類描述符不同!是不是我發(fā)送的獲取HID類報(bào)表描述符的命令有問題?


你用BUSNOUND抓出來的數(shù)據(jù)時(shí)幾個(gè)?是否獲取報(bào)表描述符和鼠標(biāo)返回?cái)?shù)據(jù)存不存在關(guān)系,要看具體的設(shè)備了,報(bào)表數(shù)據(jù),如果你要做兼容性需要你分析的,就是你的鼠標(biāo)上傳上的數(shù)據(jù)位數(shù)以及意義


0501 0902 A101 0509 1901 2903 1500 2501 9503 7501 8102 9501 7505 8103 0501 0901 A100 0930 0931 1581 257F 7508 9502 8106 C0 0938 1581 257F 7508 9501 8106 C0(CH375)

0501 0902 a101 0901 a100 0509 1901 2903 1500 2501 9503 7501 8102 9501 7505 8103 0501 0930 0931 0938 1581 257f 7508 9503 8106 c0c0 上面一列是CH375從USB鼠標(biāo)獲取的報(bào)表描述符 下面一列是標(biāo)準(zhǔn)的帶滑輪的USB鼠標(biāo)報(bào)表描述符


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频