最簡(jiǎn)單的CH375讀U盤 問題! 管理員和高手請(qǐng)進(jìn) 文字
#ifndef _CH375_H #define _CH375_H
#include
void CH375_WriteCmd(unsigned char cmd) // 向CH375的命令端口寫入命令,周期不小于4uS,如果單片機(jī)較快則延時(shí) { delay_us(2); // 2 CH375_OPEN_CMD_DDR; // A0=1 CH375_DATA_PORT=cmd; // 放好數(shù)據(jù) CH375_DATA_PORT_OUT; // 方向輸出 CH375_WRITE_CMD_OK; // A0=1 CS=0 WR=0 RD=1 delay_us(1); // 1 // 發(fā)出命令碼前后應(yīng)該各延時(shí)2uS,對(duì)于不快的單片機(jī)可以不需要延時(shí) CH375_CLOSE; // CS=1 WR=1 RD=1 命令狀態(tài)關(guān)閉 CH375_DATA_PORT_IN; // 數(shù)據(jù)方向輸入 delay_us(1); // 1 }
void CH375_WriteData(unsigned char data) //向CH375的數(shù)據(jù)端口寫入數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) { CH375_DATA_PORT=data; // 放好數(shù)據(jù) CH375_DATA_PORT_OUT; // 數(shù)據(jù)方向輸出 CH375_WRITE_DATA_OK; // A0=0 CS=0 WR=0 RD=1 delay_us(5); // 1 CH375_CLOSE; //CS=1 WR=1 RD=1 命令狀態(tài)關(guān)閉 CH375_DATA_PORT_IN; // 禁止數(shù)據(jù)輸出 delay_us(1); // 1 // 延時(shí) } unsigned char CH375_ReadData(void) //從CH375的數(shù)據(jù)端口讀出數(shù)據(jù),周期不小于1.5uS,如果單片機(jī)較快則延時(shí) { unsigned char d; delay_us(1); // 1 CH375_DATA_PORT_IN; // 數(shù)據(jù)輸入 CH375_READ_DATA_OK; // A0=0 CS=0 WR=1 RD=0 delay_us(1); // 1 d=CH375_DATA_PIN; // 讀引腳數(shù)據(jù) CH375_CLOSE; // CS=1 WR=1 RD=1 命令狀態(tài)關(guān)閉 return d;
}
unsigned char CH375_WaitInt( void ) //等待CH375中斷并獲取狀態(tài),主機(jī)端等待操作完成,返回操作狀態(tài) { unsigned char d; while(CH375_INT_PIN==0); CH375_WriteCmd(CMD_GET_STATUS); d=CH375_ReadData(); return d; }
unsigned char CH375_CheckData(unsigned char data) { CH375_WriteCmd(0x06); CH375_WriteData(data); data=CH375_ReadData(); return data; }
unsigned char CH375_CheckDisk(void) //等待U盤插入 產(chǎn)生中斷 不停的檢測(cè)狀態(tài) 屬于進(jìn)入函數(shù) { unsigned char Status; CH375_WriteCmd( CMD_SET_USB_MODE ); // 初始化CH375,設(shè)置USB工作模式 CH375_WriteData( 6 ); // 模式代碼,自動(dòng)檢測(cè)USB設(shè)備連接 delay_ms(10); while ( CH375_WaitInt()!=USB_INT_CONNECT); // 等待U盤連接 CH375_WriteCmd(CMD_GET_STATUS); // 產(chǎn)生操作完成中斷, 獲取中斷狀態(tài) Status=CH375_ReadData(); if ( Status != USB_INT_CONNECT ) return( Status ); //USB設(shè)備斷開 return 0; }
unsigned char CH375_DiskIni( void ) // 初始化磁盤 { unsigned char Status; unsigned char i;
CH375_WriteCmd(CMD_DISK_INIT); // 初始化USB存儲(chǔ)器 Status=CH375_WaitInt(); delay_ms(100) ; CH375_WriteCmd(CMD_DISK_SIZE); // 獲取USB存儲(chǔ)器的容量 Status=CH375_WaitInt(); if (Status !=USB_INT_SUCCESS) { for(i=0 ; i<10 ; i++) { CH375_WriteCmd( CMD_DISK_SIZE ); // 獲取USB存儲(chǔ)器的容量 Status=CH375_WaitInt(); if ( Status == USB_INT_SUCCESS) break; delay_ms(100) ; //這里很關(guān)鍵 必須延時(shí) } } if ( Status !=USB_INT_SUCCESS ) return( Status ); //USB設(shè)備斷開 return 0; }
endif
芯片的管腳 定義隨便 我使用了 mega8 mega162 都可以讀到255個(gè)扇區(qū) [Emot]27[/Emot]