我現(xiàn)在用的是ch374T的主機(jī)模式來操作USB鼠標(biāo),通過和arm9單片機(jī)spi接口和374進(jìn)行通信來和鼠標(biāo)通信。程序用的是貴司提供的ch374_hid.c
現(xiàn)在MCU和ch374之間可以進(jìn)行正常的通信。上電之后,24MHz的晶體能夠正常其振,spi讀取ch374內(nèi)部寄存器0~64的內(nèi)容和datasheet中規(guī)定默認(rèn)值想吻合。設(shè)備描述,配制等到hid描述符都可以正常枚舉,但是沒有到了獲得鼠標(biāo)數(shù)據(jù) next_operate2: // 下面開始讀取數(shù)據(jù) ( 實(shí)際在讀取數(shù)據(jù)的時(shí)候,要先發(fā)送中斷端點(diǎn)的令牌來讀取數(shù)據(jù),接著才能獲取到數(shù)據(jù) ) tog1=0; //開始取DATA0 while(1) { s=Interrupt_Data_Trans(buf); if(s==USB_INT_SUCCESS) { for(i=0;i!=8;i++) printf("%02x ",(unsigned short)buf[i]); printf("\n"); } else if(s==USB_INT_DISCONNECT) // 這個(gè)是為了知道設(shè)備拔出產(chǎn)生的中斷狀態(tài) { close_bit_flag=1; break; } } 時(shí)候就不能獲得鼠標(biāo)的數(shù)據(jù).程序一直在上面的while(1)中循環(huán),接收不到鼠標(biāo)的任何數(shù)據(jù),即使換了幾個(gè)鼠標(biāo)也是如此(鼠標(biāo)有移動(dòng)). //串口輸出的信息如下: Wait Device In Reset Device Start Low-Speed Device GetDeviceDescr: 12 01 10 01 00 00 00 08 d9 15 37 0a 00 01 00 01 00 01 address_status=14 09 02 22 00 09 02 22 00 01 01 00 a0 32 09 04 00 00 01 03 01 02 00 09 21 10 01 00 01 22 34 00 07 05 81 03 04 00 0a hid_des_leng=34 endp_in_addr=08 endp_out_addr=00 config_status=14 SetUsbConfig_success Set_Idle Set_idle success Get_Hid_Des HID_Desc: 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 01 05 01 09 30 09 31 09 38 15 80 25 7f 75 08 95 03 81 06 c0 c0
后來我為了驗(yàn)證PID_IN令牌,endp_in_addr端點(diǎn)地址等是否發(fā)送成功,就在HostTransact374中加了兩個(gè)語句: ..... s = Read374Byte( REG_INTER_FLAG ); // 獲取中斷狀態(tài) printf("sa=%02x \n",(T_U16)s);//自己添加的 ...... Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER );//清中斷標(biāo)志 s = Read374Byte( REG_USB_STATUS ); // USB狀態(tài) r = s & BIT_STAT_DEV_RESP; // USB設(shè)備應(yīng)答狀態(tài) printf("sb=%02x \n",(T_U16)s);//自己添加的
我主要在上述兩處加了兩個(gè)printf調(diào)試信息,其他的地方都沒有改動(dòng).打印REG_INTER_FLAG和REG_USB_STATUS的寄存器的值.
//串口信息如下 HID_Desc: 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 01 05 01 09 30 09 31 09 38 15 80 25 7f 75 08 95 03 81 06 c0 c0 sa=f5 sb=80 sa=f5 sb=80 sa=f5 在枚舉成功后HID_Desc,就無法收到鼠標(biāo)的數(shù)據(jù),REG_USB_STATUS=0x80,低四位為0.
后來出現(xiàn)了一個(gè)更奇怪的現(xiàn)象,我將鼠標(biāo)拔出去,然后再插上,居然出現(xiàn)了下面的數(shù)據(jù), sa=f5 sb=88 sa=f5 sb=93 d9 15 37 0a 05 01 09 02 sa=f5 sb=80 sa=f5 sb=9b a1 01 09 01 a1 00 05 09 sa=f5 sb=88 sa=f5 sb=93 19 01 29 03 15 00 25 01 sa=f5 sb=80 sa=f5 sb=9b 95 03 75 01 81 02 95 01 sa=f5 sb=88 sa=f5 sb=93 75 05 81 01 05 01 09 30 sa=f5 sb=80 sa=f5 sb=9b 09 31 09 38 15 80 25 7f sa=f5 sb=88 sa=f5 sb=93 75 08 95 03 81 06 c0 c0 sa=f5 sb=80 sa=f5 sb=9b 12 01 10 01 00 00 00 08 sa=f5 sb=88 sa=f5 sb=93 d9 15 37 0a 05 01 09 02 sa=f5 sb=80 sa=f5 sb=9b
仔細(xì)分析這些數(shù)據(jù),他們是HID_Desc的內(nèi)容,現(xiàn)在非常疑惑不知道哪里出了問題,請貴司的技術(shù)人員幫我分析一下,萬分感激.