CH375作device沒有中斷!!

我用arm7控制ch375與PC相連作U盤,芯片的初始化完成之后(芯片初始化完成Ok,PC中也有一個CH375的外部設(shè)備)進(jìn)入循環(huán)等待中斷,可是一直沒有中斷產(chǎn)生,這是為什么?

可以不可以將你的功能描述清楚點?如果是PC-375-ARM做U盤的話,那么,你就需要將375設(shè)置模式為0X01(外置固件模式),然后模擬出一個U盤出來,計算機(jī)才會給你命令,375才會產(chǎn)生中斷


設(shè)置成外置模式該如何模擬?我試了一下設(shè)置成外置模式,不過只能檢測到復(fù)位中斷,這是為什么?


設(shè)置外置固件的話,需要單片機(jī)通過372上傳描述符,以及你需要知道UFI協(xié)議,計算機(jī)給你發(fā)的UFI協(xié)議的話,你要正確的返回,計算機(jī)才可以識別到你的設(shè)備是一個U盤,當(dāng)然,你也要遵循海量存儲協(xié)議


我也正在搞這個東西,沒有進(jìn)展啊,呵呵,原來做過D12的,現(xiàn)在用這個反而沒了主意


實際上用D12或者我們的372芯片的話,真正意義上面的區(qū)別可能就是一些命令包括一些寄存器的操作方法不一樣而已,最底層的協(xié)議還是一樣的


在復(fù)位中斷里加入讀端口和解鎖


查閱了USB設(shè)備枚舉過程的相關(guān)資料發(fā)現(xiàn):“設(shè)備要從總線接收到一個復(fù)位信號后才可對總線的處理操作作出響應(yīng)。當(dāng)設(shè)備接收到復(fù)位信號后就使用缺省地址(00H)來對其進(jìn)行尋址。 請問這句話該如何理解?對于CH375該如何處理??


“在復(fù)位中斷里加入讀端口和解鎖”,試過了,沒用! 沒人幫忙嗎?頂上去!??!


void CH375_Init(void) { uint8 i,data; USB_COMW(CMD_RESET_ALL); DelayMS(2); USB_COMW(CMD_SET_USB_ID); USB_DATW(0x18); USB_DATW(0x07); USB_DATW(0x02); USB_DATW(0x00); USB_COMW(CMD_CHECK_EXIST); USB_DATW(0x55); data=USB_DATR(); if(data!=0xaa) { for(i=100;i!=0;i--) USB_COMW(CMD_RESET_ALL); } USB_COMW(CMD_SET_USB_MODE); DelayMS(2); USB_DATW(0x01); for(; ;) { if(CMD_RET_SUCCESS==USB_DATR()) break; } USB_COMW(CMD_SET_USB_ADDR); DelayMS(2); USB_DATW(0x00); EXTINT=0x08;//清除Eint3中斷標(biāo)志 VICIntEnable=1<<17; } 這是我的初始化函數(shù),各位幫忙看看有什么問題? 說明:如改用內(nèi)部固件模式,會有端口2上的中斷產(chǎn)生,并且可以正確處理。就是用外部固件模式時,只有復(fù)位中斷,這到底是為什么? 還請沁恒的哥們快出來給個答復(fù),這個問題已經(jīng)困擾我好幾天了?。?!


USB_COMW(CMD_RESET_ALL); DelayMS(2); USB_COMW(CMD_SET_USB_ID);修改為: USB_COMW(CMD_RESET_ALL); DelayMS(100); USB_COMW(CMD_SET_USB_ID);


引用回復(fù): USB_COMW(CMD_RESET_ALL); DelayMS(2); USB_COMW(CMD_SET_USB_ID);修改為: USB_COMW(CMD_RESET_ALL); DelayMS(100); USB_COMW(CMD_SET_USB_ID); 剛剛試過,沒有用,還是只有復(fù)位中斷!


好象你的程序上面有問題啊,首先,建議你在復(fù)位之后不要設(shè)置USB-ID,其次,在的設(shè)置好外置固件之后,那么你應(yīng)該是被動的等待主機(jī)給你發(fā)送的請求,你才可以上傳數(shù)據(jù)。首先你應(yīng)該分析主機(jī)發(fā)送下來的數(shù)據(jù),如果是控制傳輸?shù)脑?,那么你?yīng)該給計算機(jī)上傳一些描述符,以及接收一些類請求之類的,按照你所說的,372是不會給你產(chǎn)生中斷的,你可以參考CH372EVT。ZIP下面的XFIRM文件夾下面的例子程序,那個程序就是372外置固件的整個的流程


謝謝hcn,已經(jīng)可以正確收到中斷信號! 不過,我參照CH372EVT中的處理流程,到了第二步Set Address之后就沒有相應(yīng)了。 具體過程如下: 1.收到總線復(fù)位中斷之后,釋放緩沖區(qū)。 2.收到USB_INT_EP0_SETUP中斷,根據(jù)中斷內(nèi)容判定為是Get Descriptor請求,向端點0上傳設(shè)備描述符的前8個字節(jié)。 3.收到USB_INT_EP0_IN中斷,將剩余的10個字節(jié)的設(shè)備描述符上傳并釋放緩沖區(qū)。 4.收到USB_INT_EP0_OUT中斷,讀取緩沖區(qū)。 5.收到USB_INT_EP0_SETUP中斷,根據(jù)中斷內(nèi)容判定為是Set Address請求,保存地址值(0x01),向端點0上傳長度0。 6.收到USB_INT_EP0_IN中斷,設(shè)置USB地址為0x01,并釋放緩沖區(qū)。 第6步結(jié)束之后就沒有響應(yīng)了。還請hcn幫忙看看我的處理是否有錯? 按正確的枚舉過程,設(shè)置完地址之后是不是也會收到一個USB_INT_EP0_OUT中斷? 設(shè)置完地址之后,是不是還需要發(fā)送什么命令告訴主機(jī)?


首先,描述符每次只能上傳8個字節(jié),其次就是在收到主機(jī)給你發(fā)送來的地址的話,只需要保存下,給主機(jī)返回一個0長度的數(shù)據(jù)之后就可以了,不需要做別的事,接下來就是主機(jī)給你發(fā)送獲取配置描述符的命令了


“首先,描述符每次只能上傳8個字節(jié),”:你意思是在第一次收到Get Descriptor請求時,只需要傳送描述符的前8個字節(jié)就結(jié)束中斷處理;還是每次傳輸8個字節(jié),然后清空緩沖區(qū),接著再傳輸8個字節(jié)直到將描述符全部傳輸完畢才結(jié)束中斷處理?

“其次就是在收到主機(jī)給你發(fā)送來的地址的話,只需要保存下,給主機(jī)返回一個0長度的數(shù)據(jù)之后就可以了,不需要做別的事,接下來就是主機(jī)給你發(fā)送獲取配置描述符的命令了”:根據(jù)USB1.1協(xié)議,在主機(jī)發(fā)出Set Address命令之前,它是通過地址0傳輸命令的,而發(fā)送完Set Address命令之后,它就只向它Set Address命令之中包含的這個地址發(fā)送命令了,如果作為device的Ch375不調(diào)用SET_USB_ADDR來設(shè)置新地址的話怎么能收到主機(jī)以后發(fā)出的命令呢?


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

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