CH376我已經(jīng)用ACT引腳,中斷觸發(fā)的方式實(shí)現(xiàn)了U盤拔插,但是消耗兩個(gè)外部中斷引腳。我這個(gè)思路是軟件不停的查詢U盤連接狀態(tài),不知道效率是否可行,我大體程序如下 volatile bit flag=1;//U盤插入的標(biāo)志位 if(flag) //flag為狀態(tài)切換標(biāo)準(zhǔn) normal( );//正常模式 else weak( );//低功耗 normal() { init_1();//U盤初始化 while(1) { duxie();//U盤操作 xWriteCH376Cmd(CMD_TEST_CONNECT);//測(cè)試連接 delay_us(2); if(xReadCH376Data()== USB_INT_DISCONNECT)//是否為連接成功 { flag=0; break; } } } week() { init_2();//U盤初始化 while(1) { other();//U盤拔插操作 xWriteCH376Cmd(CMD_TEST_CONNECT);//測(cè)試連接 delay_us(2); if(xReadCH376Data()!= USB_INT_DISCONNECT)//是不為連接成功 { flag=1; break; } } }
一般隔幾百個(gè)毫秒查詢就可以了,不需要通過ACT引腳來檢查插拔事件,可以發(fā)送CMD0H_DISK_CONNECT命令來檢查磁盤連接,該命令會(huì)產(chǎn)生中斷,單片機(jī)通過獲取中斷狀態(tài) 就可以方便的查詢?cè)O(shè)備連接事件。
說明書沒說這命令會(huì)產(chǎn)生中斷 引用: 該命令用于在 USB 主機(jī)方式下查詢當(dāng)前 USB 設(shè)備的連接狀態(tài)。通常情況下,該命令在 2uS 時(shí)間之 內(nèi)完成。完成后輸出 USB_INT_CONNECT、USB_INT_DISCONNECT 或者 USB_INT_USB_READY 三種狀態(tài)之一, 狀態(tài) USB_INT_CONNECT 說明 USB 設(shè)備剛連接或者已經(jīng)連接但尚未初始化,狀態(tài) USB_INT_DISCONNECT 說明 USB 設(shè)備尚未連接或者已經(jīng)斷開,狀態(tài) USB_INT_USB_READY 說明 USB 設(shè)備已經(jīng)連接并且已經(jīng)被初 始化(已經(jīng)分配 USB 地址),輸出 0 說明該命令尚未完成,可以稍后再讀取狀態(tài)。
CMD0H_DISK_CONNECT 是我們提供程序上的宏定義, 在說明書上面名字是DISK_CONNECT
命令 CMD_TEST_CONNECT(0X16) 該命令用于在 USB 主機(jī)方式下查詢當(dāng)前 USB 設(shè)備的連接狀態(tài)。 CMD_DISK_CONNECT (0x30) 該命令用于檢查磁盤是否連接 這兩個(gè)用哪個(gè)循環(huán)查詢?
如果是檢測(cè)設(shè)備連接的話,用0X30的命令來檢測(cè)。
請(qǐng)問一下啊,進(jìn)行U盤檢測(cè)的時(shí)候,不管我插沒插U盤,用邏輯分析測(cè)出CH376的INT#是51.us脈寬的低電平,然后569ms高電平,一直這樣持續(xù)下去。很著急,有沒有人知道為什么?
您好,在保證376硬件環(huán)境正常的情況下,INT是有內(nèi)部上拉的,測(cè)試時(shí)是否保證INT是在懸空狀態(tài)下,還是說有和主控的IO或其他引腳有硬件連接呢,如果是,可能是被外部IO拉低導(dǎo)致