使用你們提供的AVR的庫(kù)文件: /* 2004.06.05, 2004.09.20, 2004.10.22, 2004.11.20, 2004.12.12, 2004.12.28, 2005.01.04, 2005.01.12, 2005.01.26, 2005.03.01, 2005.07.29, 2005.12.28 **************************************** ** Copyright (C) W.ch 1999-2005 ** ** Web: http://www.winchiphead.com ** **************************************** ** USB Host File Interface for CH375 ** ** TC2.0@PC, ICCAVR_6.31@AVR ** **************************************** */ /* CH375 主機(jī)文件系統(tǒng)接口 V2.9 */ /* 支持: FAT12/FAT16/FAT32 */ /* AVR單片機(jī), 查詢(xún)方式或者中斷方式 */
#ifndef CH375HF_H #define CH375HF_H
#define CH375_LIB_VER 0x29
/* 以下定義的詳細(xì)說(shuō)明請(qǐng)看CH375HF9.H文件 */ #define LIB_CFG_FILE_IO 1 /* 文件讀寫(xiě)的數(shù)據(jù)的復(fù)制方式,0為"外部子程序",1為"內(nèi)部復(fù)制" */ #define LIB_CFG_INT_EN 0 /* CH375的INT#引腳連接方式,0為"查詢(xún)方式",1為"中斷方式" */
/* 單片機(jī)的RAM有限,其中CH375子程序用512字節(jié),剩余RAM部分可以用于文件讀寫(xiě)緩沖 */ #define FILE_DATA_BUF_LEN 0x0200 /* 外部RAM的文件數(shù)據(jù)緩沖區(qū),緩沖區(qū)長(zhǎng)度不小于一次讀寫(xiě)的數(shù)據(jù)長(zhǎng)度 */ /* 如果準(zhǔn)備使用雙緩沖區(qū)交替讀寫(xiě),那么不要定義FILE_DATA_BUF_LEN,而是在參數(shù)中指定緩沖區(qū)起址,用CH375FileReadX代替CH375FileRead,用CH375FileWriteX代替CH375FileWrite */
#ifdef __cplusplus extern "C" { #endif
/* FILE: CH375INC.H */
/* ********************************************************************************************************************* */ /* 硬件特性 */
#define CH375_MAX_DATA_LEN 0x40 /* 最大數(shù)據(jù)包的長(zhǎng)度, 內(nèi)部緩沖區(qū)的長(zhǎng)度 */
/* ********************************************************************************************************************* */ /* 命令代碼 */
#define CMD_RESET_ALL 0x05 /* 執(zhí)行硬件復(fù)位 */
#define CMD_CHECK_EXIST 0x06 /* 測(cè)試工作狀態(tài) */ /* 輸入: 任意數(shù)據(jù) */ /* 輸出: 輸入數(shù)據(jù)的按位取反 */
#define CMD_SET_USB_ID 0x12 /* 設(shè)備方式: 設(shè)置USB廠商VID和產(chǎn)品PID */ /* 輸入: 廠商ID低字節(jié), 廠商ID高字節(jié), 產(chǎn)品ID低字節(jié), 產(chǎn)品ID高字節(jié) */
#define CMD_SET_USB_ADDR 0x13 /* 設(shè)置USB地址 */ /* 輸入: 地址值 */
#define CMD_SET_USB_MODE 0x15 /* 設(shè)置USB工作模式 */ /* 輸入: 模式代碼 */ /* 00H=未啟用的設(shè)備方式, 01H=已啟用的設(shè)備方式并且使用外部固件模式, 02H=已啟用的設(shè)備方式并且使用內(nèi)置固件模式, 03H=已啟用的設(shè)備方式并且使用中斷端點(diǎn)和內(nèi)置固件模式 */ /* 04H=未啟用的主機(jī)方式, 05H=已啟用的主機(jī)方式, 06H=已啟用的主機(jī)方式并且自動(dòng)產(chǎn)生SOF包, 07H=已啟用的主機(jī)方式并且復(fù)位USB總線 */ /* 輸出: 操作狀態(tài)( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值說(shuō)明操作未完成 ) */
#define CMD_SET_ENDP2 0x18 /* 設(shè)備方式: 設(shè)置USB端點(diǎn)0的接收器 */ /* 輸入: 工作方式 */ /* 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變 */ /* 位3~位0為事務(wù)響應(yīng)方式: 0000-就緒ACK, 1110-正忙NAK, 1111-錯(cuò)誤STALL */
#define CMD_SET_ENDP3 0x19 /* 設(shè)備方式: 設(shè)置USB端點(diǎn)0的發(fā)送器 */ /* 輸入: 工作方式 */ /* 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變 */ /* 位3~位0為事務(wù)響應(yīng)方式: 0000~1000-就緒ACK, 1110-正忙NAK, 1111-錯(cuò)誤STALL */
#define CMD_SET_ENDP4 0x1A /* 設(shè)備方式: 設(shè)置USB端點(diǎn)1的接收器 */ /* 輸入: 工作方式 */ /* 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變 */ /* 位3~位0為事務(wù)響應(yīng)方式: 0000-就緒ACK, 1110-正忙NAK, 1111-錯(cuò)誤STALL */
#define CMD_SET_ENDP5 0x1B /* 設(shè)備方式: 設(shè)置USB端點(diǎn)1的發(fā)送器 */ /* 輸入: 工作方式 */ /* 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變 */ /* 位3~位0為事務(wù)響應(yīng)方式: 0000~1000-就緒ACK, 1110-正忙NAK, 1111-錯(cuò)誤STALL */
#define CMD_SET_ENDP6 0x1C /* 設(shè)置USB端點(diǎn)2/主機(jī)端點(diǎn)的接收器 */ /* 輸入: 工作方式 */ /* 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變 */ /* 位3~位0為事務(wù)響應(yīng)方式: 0000-就緒ACK, 1101-就緒但不返回ACK, 1110-正忙NAK, 1111-錯(cuò)誤STALL */
#define CMD_SET_ENDP7 0x1D /* 設(shè)置USB端點(diǎn)2/主機(jī)端點(diǎn)的發(fā)送器 */ /* 輸入: 工作方式 */ /* 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變 */ /* 位3~位0為事務(wù)響應(yīng)方式: 0000-就緒ACK, 1101-就緒但無(wú)須應(yīng)答, 1110-正忙NAK, 1111-錯(cuò)誤STALL */
#define CMD_GET_TOGGLE 0x0A /* 獲取OUT事務(wù)的同步狀態(tài) */ /* 輸入: 數(shù)據(jù)1AH */ /* 輸出: 同步狀態(tài) */ /* 位4為1則OUT事務(wù)同步, 否則OUT事務(wù)不同步 */
#define CMD_GET_STATUS 0x22 /* 獲取中斷狀態(tài)并取消中斷請(qǐng)求 */ /* 輸出: 中斷狀態(tài) */
#define CMD_UNLOCK_USB 0x23 /* 設(shè)備方式: 釋放當(dāng)前USB緩沖區(qū) */
#define CMD_RD_USB_DATA 0x28 /* 從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊, 并釋放緩沖區(qū) */ /* 輸出: 長(zhǎng)度, 數(shù)據(jù)流 */
#define CMD_WR_USB_DATA3 0x29 /* 設(shè)備方式: 向USB端點(diǎn)0的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 */ /* 輸入: 長(zhǎng)度, 數(shù)據(jù)流 */
#define CMD_WR_USB_DATA5 0x2A /* 設(shè)備方式: 向USB端點(diǎn)1的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 */ /* 輸入: 長(zhǎng)度, 數(shù)據(jù)流 */
#define CMD_WR_USB_DATA7 0x2B /* 向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫(xiě)入數(shù)據(jù)塊 */ /* 輸入: 長(zhǎng)度, 數(shù)據(jù)流 */
/* ************************************************************************** */ /* 以下命令用于USB主機(jī)方式, 只有CH375支持 */
#define CMD_SET_BAUDRATE 0x02 /* 串口方式: 設(shè)置串口通訊波特率 */ /* 輸入: 波特率分頻系數(shù), 波特率分頻常數(shù) */ /* 輸出: 操作狀態(tài)( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值說(shuō)明操作未完成 ) */
#define CMD_ABORT_NAK 0x17 /* 主機(jī)方式: 放棄當(dāng)前NAK的重試 */
#define CMD_SET_RETRY 0x0B /* 主機(jī)方式: 設(shè)置USB事務(wù)操作的重試次數(shù) */ /* 輸入: 數(shù)據(jù)25H, 重試次數(shù) */ /* 位7為1則收到NAK時(shí)無(wú)限重試, 位3~位0為超時(shí)后的重試次數(shù) */
#define CMD_ISSUE_TOKEN 0x4F /* 主機(jī)方式: 發(fā)出令牌, 執(zhí)行事務(wù) */ /* 輸入: 事務(wù)屬性 */ /* 低4位是令牌, 高4位是端點(diǎn)號(hào) */ /* 輸出中斷 */
#define CMD_CLR_STALL 0x41 /* 主機(jī)方式: 控制傳輸-清除端點(diǎn)錯(cuò)誤 */ /* 輸入: 端點(diǎn)號(hào) */ /* 輸出中斷 */
#define CMD_SET_ADDRESS 0x45 /* 主機(jī)方式: 控制傳輸-設(shè)置USB地址 */ /* 輸入: 地址值 */ /* 輸出中斷 */
#define CMD_GET_DESCR 0x46 /* 主機(jī)方式: 控制傳輸-獲取描述符 */ /* 輸入: 描述符類(lèi)型 */ /* 輸出中斷 */
#define CMD_SET_CONFIG 0x49 /* 主機(jī)方式: 控制傳輸-設(shè)置USB配置 */ /* 輸入: 配置值 */ /* 輸出中斷 */
#define CMD_DISK_INIT 0x51 /* 主機(jī)方式: 初始化USB存儲(chǔ)器 */ /* 輸出中斷 */
#define CMD_DISK_RESET 0x52 /* 主機(jī)方式: 復(fù)位USB存儲(chǔ)器 */ /* 輸出中斷 */
#define CMD_DISK_SIZE 0x53 /* 主機(jī)方式: 獲取USB存儲(chǔ)器的容量 */ /* 輸出中斷 */
#define CMD_DISK_READ 0x54 /* 主機(jī)方式: 從USB存儲(chǔ)器讀數(shù)據(jù)塊(以扇區(qū)512字節(jié)為單位) */ /* 輸入: LBA扇區(qū)地址(總長(zhǎng)度32位, 低字節(jié)在前), 扇區(qū)數(shù)(01H~FFH) */ /* 輸出中斷 */
#define CMD_DISK_RD_GO 0x55 /* 主機(jī)方式: 繼續(xù)執(zhí)行USB存儲(chǔ)器的讀操作 */ /* 輸出中斷 */
#define CMD_DISK_WRITE 0x56 /* 主機(jī)方式: 向USB存儲(chǔ)器寫(xiě)數(shù)據(jù)塊(以扇區(qū)512字節(jié)為單位) */ /* 輸入: LBA扇區(qū)地址(總長(zhǎng)度32位, 低字節(jié)在前), 扇區(qū)數(shù)(01H~FFH) */ /* 輸出中斷 */
#define CMD_DISK_WR_GO 0x57 /* 主機(jī)方式: 繼續(xù)執(zhí)行USB存儲(chǔ)器的寫(xiě)操作 */ /* 輸出中斷 */
/* ************************************************************************** */ /* 以下新增的V2.0命令碼, 僅CH372A/CH375A支持 */
#define CMD_GET_IC_VER 0x01 /* 獲取芯片及固件版本 */ /* 輸出: 版本號(hào)( 位7為1, 位6為0, 位5~位0為版本號(hào) ) */ /* CH375返回?zé)o效值為5FH, CH375A返回版本號(hào)的值為0A2H */
#define CMD_ENTER_SLEEP 0x03 /* 進(jìn)入睡眠狀態(tài) */
#define CMD_RD_USB_DATA0 0x27 /* 從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊 */ /* 輸出: 長(zhǎng)度, 數(shù)據(jù)流 */
#define CMD_DELAY_100US 0x0F /* 并口方式: 延時(shí)100uS */ /* 輸出: 延時(shí)期間輸出0, 延時(shí)結(jié)束輸出非0 */
#define CMD_CHK_SUSPEND 0x0B /* 設(shè)備方式: 設(shè)置檢查USB總線掛起狀態(tài)的方式 */ /* 輸入: 數(shù)據(jù)10H, 檢查方式 */ /* 00H=不檢查USB掛起, 04H=以50mS為間隔檢查USB掛起, 05H=以10mS為間隔檢查USB掛起 */
#define CMD_SET_SYS_FREQ 0x04 /* 設(shè)置系統(tǒng)工作頻率 */ /* 輸入: 頻率 */ /* 00H=12MHz, 01H=1.5MHz */
/* ************************************************************************** */ /* 以下改進(jìn)的V2.0命令碼, 用于USB主機(jī)方式, 僅CH375A支持 */
/*#define CMD_SET_RETRY 0x0B*/ /* 主機(jī)方式: 設(shè)置USB事務(wù)操作的重試次數(shù) */ /* 輸入: 數(shù)據(jù)25H, 重試次數(shù) */ /* 位7為0則收到NAK時(shí)不重試, 位7為1位6為0則收到NAK時(shí)無(wú)限重試, 位7為1位6為1則收到NAK時(shí)重試200mS, 位5~位0為超時(shí)后的重試次數(shù) */
/* ******************************************