|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
一個(gè)USB的問(wèn)題,請(qǐng)各位老大幫忙! |
| 作者:yhw1 欄目:技術(shù)交流 |
小弟最近遇到點(diǎn)麻煩,用的芯片是PDIUSBD12,就是在那塊開(kāi)發(fā)板SMART D12上寫(xiě)的程序,在USB枚舉到SET_CONFIGURATION時(shí),我也收到了相應(yīng)的數(shù)據(jù),是對(duì)的,可就是給他發(fā)0字節(jié)的包后,就沒(méi)有什么反應(yīng)了,數(shù)據(jù)收不到,中斷也沒(méi)有,程序就不動(dòng)了,下面把相應(yīng)的程序?qū)懺谙旅?請(qǐng)各位幫忙看看: unsigned CHAR DevDes[18]={18,1,10,1,0xDC,0,0,16,0x71,0x04,0x66,6,0,1,0,0,0,1}; unsigned CHAR ConDes[46]={9,2,0x2E,0,1,1,0,0xa0,0x32, 9,4,0,0,4,0xDC,0xA0,0xB0,0, 7,5,0x01,3,4,0,50, 7,5,0x81,3,4,0,50, 7,5,0x02,2,64,0,50, 7,5,0x82,2,64,0,50}; 這是配置數(shù)據(jù). 當(dāng)收到數(shù)據(jù)時(shí)觸發(fā)中斷,我的讀數(shù)據(jù)的過(guò)程也是在中斷中完成的.讀完后又做了應(yīng)答處理.即 D12_ReadEndpoint(0, (unsigned CHAR *)(&(ControlData.DeviceRequest)), sizeof(ControlData.DeviceRequest)); D12_AcknowledgeEndpoint(0); D12_AcknowledgeEndpoint(1); 在主程序循環(huán)中,我對(duì)這個(gè)請(qǐng)求是這樣處理的 case 9: \\即SET_CONFIGURATION請(qǐng)求 09H D12_WriteEndpoint(1,0,0); if(ControlData.DeviceRequest.wValue_l==0) \\我把wValue2字節(jié)數(shù)據(jù)拆成了2個(gè)變量,一個(gè)是高字節(jié),一個(gè)是低字節(jié),這個(gè)變量是低字節(jié) D12_SetEndpointEnable(0); else if(ControlData.DeviceRequest.wValue_l==1) { D12_SetEndpointEnable(0); D12_SetEndpointEnable(1); } break; 按照USB協(xié)議,具體步驟是: setup包(包括數(shù)據(jù)00 09 01 00 00 00 00 00)->設(shè)備ACK->IN包->設(shè)備0字節(jié)的應(yīng)答->主機(jī)ACK 而我是READ->發(fā)ACK->發(fā)0字節(jié)數(shù)據(jù)(D12_WriteEndpoint(1,0,0);),沒(méi)錯(cuò)啊,請(qǐng)各位老大幫忙,謝謝了啊! |
| 2樓: | >>參與討論 |
| 作者: tty1 于 2005/6/15 17:38:00 發(fā)布:
PID應(yīng)該設(shè)置為DATA1。 * - 本貼最后修改時(shí)間:2005-6-15 20:47:48 修改者:tty1 |
|
| 3樓: | >>參與討論 |
| 作者: tty1 于 2005/6/15 20:44:00 發(fā)布:
PID應(yīng)該設(shè)置為DATA1。 |
|
| 4樓: | >>參與討論 |
| 作者: yhw1 于 2005/6/15 21:45:00 發(fā)布:
謝謝 |
|
| 5樓: | >>參與討論 |
| 作者: yhw1 于 2005/6/15 21:57:00 發(fā)布:
不行啊 在PDIUSBD12里面,DATA1和0是自動(dòng)設(shè)置的,不能控制啊.再說(shuō)以前的幾個(gè)步驟里也沒(méi)設(shè)置也過(guò)了啊,麻煩再幫我看看 |
|
| 6樓: | >>參與討論 |
| 作者: tty1 于 2005/6/16 9:03:00 發(fā)布:
設(shè)備0字節(jié)的應(yīng)答的PID設(shè)置為data1是必須的,是USB標(biāo)準(zhǔn)要求的。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |