我做的是AVR單片機(jī)讀寫(xiě)U盤(pán)的小模塊,沒(méi)有用貴公司的庫(kù)文件,
CH375硬件連接跟貴公司提供的參考電路基本一致。 ----------------------------------
現(xiàn)在單片機(jī)工作是正常的,CH375的CMD_CHECK_EXIST命令返回的測(cè)試數(shù)據(jù)也是正確的。
設(shè)置模式6后,插入U(xiǎn)盤(pán)前CMD_TEST_CONNECT返回?cái)?shù)據(jù)是0X16也應(yīng)該正常吧。
但就是當(dāng)插入U(xiǎn)盤(pán)的時(shí)候送CMD_DISK_INT命令,中斷返回的數(shù)據(jù)卻是0x20或是0X24或是0X28
或是0X2C。并且與#ACT相連的LED燈一直沒(méi)有點(diǎn)亮,有時(shí)候偶爾用萬(wàn)用表點(diǎn)一下晶振兩邊
的電容引腳的時(shí)候那燈突然又亮了。 --------------------------------
我也看過(guò)以前的帖子,說(shuō)返回0X20這類的狀態(tài)可能是供電不足,檢測(cè)U盤(pán)超時(shí)。
我供電用的是電腦的USB口給整個(gè)板子供電(包括一個(gè)AVR,一個(gè)LCD,一個(gè)CH375),
電壓測(cè)量是4.8V。這應(yīng)該可以吧?
還有沒(méi)有插入U(xiǎn)盤(pán)前產(chǎn)生的中斷返回狀態(tài)是0X20這算正常嗎?
插入U(xiǎn)盤(pán)后,U盤(pán)的指示燈有閃動(dòng),但CH375的#ACT腳接的LED燈不亮這算正常嗎?(晶振
工作正常,CH375初始化正常)。
為什么插入U(xiǎn)盤(pán)后老是返回不了0X15?????
附部分程序: /* *功能 : 初始化CH375并設(shè)置工作模式,如果初始化成功則返回1,否則返回0 */ Uint8 Ch375Init(void) { Uint8 Ui,Uk; for(Ui = 10; Ui > 0; Ui--) { Wch375Cmd(CMD_CHECK_EXIST); asm("nop");//延時(shí) Wch375Dat(0x55); NOP(); Uk = Rch375Dat(); if(0xAA != Uk) { for(Uk = 3; Uk > 0; Uk--) { Wch375Cmd(CMD_RESET_ALL); delay_nms(50);//延時(shí)50ms //DisMsg(0,1,"CMD_RESET_ALL"); //delay_s(2); } } else break; } if(Ui == 0) { //DisMsg(0,0,"check failed!"); //delay_s(3); return 0; }
else { Wch375Cmd(CMD_SET_USB_MODE); Wch375Dat(6); /* 模式代碼,自動(dòng)檢測(cè)USB設(shè)備連接 */ delay_nus(20); // Wch375Cmd(CMD_TEST_CONNECT); Ui = Rch375Dat(); DisChar(0,0,&Ui); //顯示返回的狀態(tài) delay_s(3); return 1; } }
/* *功能 : 初始化U盤(pán).成功時(shí)返回1,否則返回錯(cuò)誤狀態(tài)字 */ Uint8 UdiskInit(void) { Uint8 status; Wch375Cmd(CMD_GET_STATUS); //寫(xiě)入獲取中斷狀態(tài)的命令字 delay_us();//是否要延時(shí)? status = Rch375Dat(); //獲取狀態(tài) DisChar(9,1,&status); delay_s(3); Wch375Cmd(CMD_TEST_CONNECT); status = Rch375Dat(); DisChar(0,0,&status); delay_s(3); //if(status == USB_INT_DISCONNECT) return status;//USB設(shè)備斷開(kāi)*/ Wch375Cmd(CMD_DISK_INIT); //送入初始化命令 status = WaitInt(); //獲取狀態(tài) DisMsg(0,0,"next time!!!!!"); delay_s(2); //if(status == USB_INT_BUF_OVER){DisMsg(0,1,"USB DISKERR");delay_s(5);} if(status != USB_INT_SUCCESS) {DisChar(10,1,&status); delay_s(1); Wch375Cmd(CMD_SET_USB_MODE); Wch375Dat(6); /* 模式代碼,自動(dòng)檢測(cè)USB設(shè)備連接 */ //delay_nus(20); delay_s(3); DisMsg(0,1," set mode 6"); return status;////////這里返回到主程序,主程序檢測(cè)到不是1就反復(fù)調(diào)用UdiskInit() } Wch375Cmd(CMD_DISK_SIZE); status = WaitInt(); if(status != USB_INT_SUCCESS) { delay_nms(250);//延時(shí)250毫秒具體查看375手冊(cè) DisMsg(0,0,"disk_size!!!!!"); delay_s(2); Wch375Cmd(CMD_DISK_SIZE); status = WaitInt(); } if(status != USB_INT_SUCCESS) return status; else DisMsg(0,0," RUN HERE"); delay_s(5); return 1;//U盤(pán)初始化成功 } -------------------------------------------------------
主程序檢測(cè)到UdiskInit()返回的值不是1就反復(fù)調(diào)用UdiskInit()。