用CH375做主機,U盤插上之后,可以正確發(fā)現(xiàn)U盤,并檢測到USB_INIT_CONNECT中斷,然后,我發(fā)出DISK_INIT命令來初始化U盤,可是收到的中斷都是USB_INIT_CONNECT,這是為什么??
那你測下USB口的電壓是多少,還有UD+,UD-有沒有串電阻(串的電阻不能大于5歐姆).還有在程序中檢測到U盤連接后發(fā)CMD_GET_STATUS獲取中斷狀態(tài),再發(fā)DISK_INIT命令.
問題已經解決,我在發(fā)出DISK_INIT命令之后,加了一個100MS的延遲,就OK了! 不過,現(xiàn)在又有一個新問題,就是無法讀取U盤的扇區(qū),在發(fā)出DISK_READ之后,收到的中斷總是DISK_INIT_ERR,以下是我讀扇區(qū)0的程序斷,還請各位幫我看看 USB_COMW(CMD_DISK_READ);//讀取設備 DelayMS(100);//延遲100MS USB_DATW(0x00); DelayMS(10); USB_DATW(0x00); DelayMS(10); USB_DATW(0x00); DelayMS(10); USB_DATW(0x00); DelayMS(10); USB_DATW(0x01); DelayMS(10); flag=0; while(1) { if(Interrupt()==USB_INT_DISK_READ) { USB_COMW(CMD_RD_USB_DATA); DelayMS(10); len=USB_DATR(); Wait1us(); for(i=0;i { Wait1us(); buf[flag*64+i]=USB_DATR(); }
USB_COMW(CMD_DISK_RD_GO); flag++; } else { if(Interrupt()==USB_INT_SUCCESS) { LCD_GotoXY(0,80); LCD_DispStr("USB_INT_SUCCESS"); break; } if(Interrupt()==USB_INT_DISK_ERR) { LCD_GotoXY(0,80); LCD_DispStr("USB_INT_DISK_ERR"); break; } } }
沒人幫忙嗎?我都整了一天了,郁悶死了!
讀寫函數(shù)沒必要加那么多的延時,你使用的是什么單片機,用的是總線方式還是別的方式,按照你寫的程序的話,U盤可能會掛起
我用的是arm,philips的LPC2214。我一開始就是沒有加延時的,結果一樣的,收到的中斷也是DISK_INI_ERR,而且讀寫扇區(qū)的結果都是一樣的。延時是后來加上去的,也沒有用?。?!
收到DISK_INT_ERROR后,發(fā)錯誤查詢命令,讀取錯誤內容,再根據內容做處理。如果連錯誤內容都讀不出你就是倒霉了。
樓上大哥 看郵箱
我也遇到這問題,程序如: U8 Status=0; CH375_WR_CMD_PORT( CMD_GET_STATUS ); // 產生操作完成中斷, 獲取中斷狀態(tài),確保中斷開 CH375_WR_CMD_PORT( CMD_DISK_INIT ); // 初始化USB設備 Status = mWaitInterrupt( ); // 等待中斷并獲取狀態(tài) if ( Status != USB_INT_SUCCESS ){ //****Status=0x15 在這里卡住了 Uart_Printf_1("\nUSB設備操作失敗\n"); // 出現(xiàn)錯誤 return 1; } else return 0; }
Status=0x15 在這里卡住了 請求幫助?謝謝!