我是用375連接U盤,CH375LibInit和CH375DiskConnect都沒問題,但是CH375DiskReady總返回0x82。請問這可能是啥原因
(1)U盤供電足么?應(yīng)保證在4.7V以上 (2)把主程序貼出來看看,頭文件位置有沒有錯?應(yīng)放在庫配置后面
電壓4.7V
CH375Reset(); while(i != ERR_SUCCESS) /* 初始化CH375程序庫和CH375芯片,操作成功返回0 */ { i = CH375LibInit(); } USART_SendStr(USART1, "Wait Udisk\n"); while ( CH375DiskStatus < DISK_CONNECT ) /* 查詢CH375中斷并更新中斷狀態(tài),等待U盤插入 */ { if ( CH375DiskConnect( ) == ERR_SUCCESS ) ;//break; /* 有設(shè)備連接則返回成功,CH375DiskConnect同時會更新全局變量CH375DiskStatus */ mDelaymS( 100 ); } mDelaymS( 200 ); /* 延時,可選操作,有的USB存儲器需要幾十毫秒的延時 */ i=0xff; /* 檢查U盤是否準(zhǔn)備好,有些U盤不需要這一步,但是某些U盤必須要執(zhí)行這一步才能工作 */ while(i != ERR_SUCCESS) { mDelaymS( 100 ); i = CH375DiskReady( ); //USART_SendStr(USART1,"Ready ?\n"); //if ( CH375DiskReady( ) == ERR_SUCCESS ) /* 查詢磁盤是否準(zhǔn)備好 */ // break; }
我是按照給的例子改的,CH375DiskSize也返回0x82。
頭文件位置有沒有錯?應(yīng)放在庫配置后面
對這句話不是很理解…… 我用keil的
(1)頭文件的位置 /* 以下定義的詳細(xì)說明請看CH375HF3.H文件 */ #define LIB_CFG_DISK_IO 1 /* 磁盤讀寫的數(shù)據(jù)的復(fù)制方式,1為"單DPTR復(fù)制",2為"雙DPTR復(fù)制",3為"單DPTR和P2+R0復(fù)制" */ #define LIB_CFG_FILE_IO 1 /* 文件讀寫的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"單DPTR復(fù)制",2為"雙DPTR復(fù)制",3為"單DPTR和P2+R0復(fù)制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引腳連接方式,0為"查詢方式",1為"中斷方式" */
#define CH375_CMD_PORT_ADDR 0xBDF1 /* CH375命令端口的I/O地址 */ #define CH375_DAT_PORT_ADDR 0xBCF0 /* CH375數(shù)據(jù)端口的I/O地址 */ /* 62256提供的32KB的RAM分為兩部分: 0000H-01FFH為磁盤讀寫緩沖區(qū), 0200H-7FFFH為文件數(shù)據(jù)緩沖區(qū) */ #define DISK_BASE_BUF_ADDR 0x0000 /* 外部RAM的磁盤數(shù)據(jù)緩沖區(qū)的起始地址,從該單元開始的緩沖區(qū)長度為SECTOR_SIZE */ #define DISK_BASE_BUF_LEN 4096 /* 默認(rèn)的磁盤數(shù)據(jù)緩沖區(qū)大小為512字節(jié),建議選擇為2048甚至4096以支持某些大扇區(qū)的U盤,為0則禁止在.H文件中定義緩沖區(qū)并由應(yīng)用程序在pDISK_BASE_BUF中指定 */ #define FILE_DATA_BUF_ADDR 0x1000 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū)的起始地址,緩沖區(qū)長度不小于一次讀寫的數(shù)據(jù)長度 */ /* 由于演示板用的62256只有32K字節(jié),其中CH375子程序用512字節(jié),所以外部RAM剩余長度為32256字節(jié) */ #define FILE_DATA_BUF_LEN 0x6800 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長度不小于一次讀寫的數(shù)據(jù)長度 */ /* 如果準(zhǔn)備使用雙緩沖區(qū)交替讀寫,那么不要定義FILE_DATA_BUF_LEN,而是在參數(shù)中指定緩沖區(qū)起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */
#define CH375_INT_WIRE INT0 /* P3.2, INT0, CH375的中斷線INT#引腳,連接CH375的INT#引腳,用于查詢中斷狀態(tài) */
#define NO_DEFAULT_CH375_F_ENUM 1 /* 未調(diào)用CH375FileEnumer程序故禁止以節(jié)約代碼 */ #define NO_DEFAULT_CH375_F_QUERY 1 /* 未調(diào)用CH375FileQuery程序故禁止以節(jié)約代碼 */
#include "..\CH375HF4.H" /* 如果不需要支持FAT32,那么請選用CH375HF4.H */ (2)電壓再增大一些或換個U盤試試。
1沒問題,u盤也換過了,看來問題麻煩了
檢查UD+上的電壓,看以下是幾伏,大概3.0V以上.兩個信號線是怎么連接的?有沒有加一些電阻等元件,可以貼圖看看.
UD+是3V,信號線直接連到375。圖就有難度了,線是飛的
基本是你硬件問題,好好檢查一下吧.3V其實已經(jīng)偏底了.供電要充足.信號線盡量端點.還有看看UD+,UD-是不是接反了.
那就先提高電壓看看,十分感謝
請問紅桃六,你說的電壓偏低是指d+?usb供電有5v的
usb供電提高到4.9v,UD+提高到多少算好?還有我是用Cortex-M3的,有影像么?
這個問題你主要去查下一個是USB口有沒有串接電阻,USB4根線有沒有連接錯誤以及中斷引腳是否連接好。還有就是你可以拿示波器去看下USB的UD+和UD-兩個信號線上面有沒有信號?
這是一個調(diào)試通過的例程,對比一下你的程序是否有問題UploadImages/20087231045139.rar
沒有傳電阻 4根線是VCC,UD-,UD+,GND 中斷腳的話 xWriteCH375Cmd(CMD_DISK_INIT); i=0xff; while ( i!= USB_INT_SUCCESS) { i = wait_interrupt(); } 這段沒問題 CMD_DISK_INIT這個命令也能過
那到底哪個地方出現(xiàn)了0X82的錯誤呢?