?? ch375hm.inc
字號:
;
;****************************************
;** Copyright (C) W.ch 1999-2007 **
;** Web: http://www.winchiphead.com **
;****************************************
;** USB Host File Module @CH375 **
;****************************************
;
; CH375 主機文件系統(tǒng)接口模塊 */
; 支持: FAT12/FAT16/FAT32 */
; U盤文件讀寫模塊ASM語言頭文件 */
CH375HM_VER EQU 030H ; 當前模塊版本 */
; ********************************************************************************************************************* */
; 返回的操作狀態(tài)碼 */
; 以下是事件通知狀態(tài)碼,檢測到當前U盤已經(jīng)連接或者已經(jīng)斷開,可以作為最終狀態(tài)碼 */
ERR_USB_CONNECT EQU 015H ; 檢測到USB設備連接事件,磁盤已經(jīng)連接 */
ERR_DISK_DISCON EQU 082H ; 檢測到USB設備連接事件,磁盤已經(jīng)斷開,或者磁盤尚未連接 */
; 代碼0XH用于USB設備方式的操作狀態(tài)代碼,由CH375返回,是USB設備模式的中斷狀態(tài) */
ERR_USB_DAT_DOWN EQU 002H ; USB設備模式: 數(shù)據(jù)下傳成功,上位機下傳的數(shù)據(jù)已經(jīng)在模塊中 */
ERR_USB_DAT_UP EQU 00AH ; USB設備模式: 數(shù)據(jù)上傳成功,模塊中的上傳數(shù)據(jù)已經(jīng)被上位機取走 */
; 以下是階段性的狀態(tài)碼,用于請求數(shù)據(jù)交換,不是最終的操作狀態(tài) */
USB_INT_DISK_READ EQU 01DH ; USB存儲器讀數(shù)據(jù)塊,只用于CMD_FileRead命令,請求數(shù)據(jù)讀出 */
USB_INT_DISK_WRITE EQU 01EH ; USB存儲器寫數(shù)據(jù)塊,只用于CMD_FileWrite命令,請求數(shù)據(jù)寫入 */
USB_INT_DISK_RETRY EQU 0EEH ; USB存儲器讀寫數(shù)據(jù)塊失敗重試,只用于CMD_FileRead命令和CMD_FileRead命令,操作失敗重試 */
; USB_INT_DISK_RETRY重試狀態(tài)碼要求用戶端程序回改文件數(shù)據(jù)緩沖區(qū)指針,以便重新發(fā)送或者接收文件數(shù)據(jù),
; 在USB_INT_DISK_RETRY重試狀態(tài)碼之后用戶端程序將收到兩個字節(jié)的數(shù)據(jù),也就是一個16位的數(shù)據(jù),指定需要回改指針的字節(jié)數(shù),大端時高字節(jié)在前,小端時低字節(jié)在前 */
; 最終狀態(tài)碼 */
ERR_SUCCESS EQU 000H ; 操作成功 */
ERR_CH375_ERROR EQU 081H ; CH375硬件錯誤,可能需要復位CH375 */
ERR_STATUS_ERR EQU 083H ; 磁盤狀態(tài)錯誤,可能正在連接或者斷開磁盤 */
ERR_MBR_ERROR EQU 091H ; 磁盤的主引導記錄無效,可能磁盤尚未分區(qū)或者尚未格式化 */
ERR_TYPE_ERROR EQU 092H ; 磁盤分區(qū)類型不支持,只支持FAT12/FAT16/BigDOS/FAT32,需要由磁盤管理工具重新分區(qū) */
ERR_BPB_ERROR EQU 0A1H ; 磁盤尚未格式化,或者參數(shù)錯誤,需要由WINDOWS采用默認參數(shù)重新格式化 */
ERR_TOO_LARGE EQU 0A2H ; 磁盤非正常格式化并且容量大于4GB,或者容量大于250GB,需要由WINDOWS采用默認參數(shù)重新格式化 */
ERR_FAT_ERROR EQU 0A3H ; 磁盤的文件系統(tǒng)不支持,只支持FAT12/FAT16/FAT32,需要由WINDOWS采用默認參數(shù)重新格式化 */
ERR_DISK_FULL EQU 0B1H ; 磁盤文件太滿,剩余空間太少或者已經(jīng)沒有,需要磁盤整理 */
ERR_FDT_OVER EQU 0B2H ; 目錄內文件太多,沒有空閑的目錄項,FAT12/FAT16根目錄下的文件數(shù)應該少于500個,需要磁盤整理 */
ERR_MISS_DIR EQU 0B3H ; 指定路徑的某個子目錄沒有找到,可能是目錄名稱錯誤 */
ERR_FILE_CLOSE EQU 0B4H ; 文件已經(jīng)關閉,如果需要使用,應該重新打開文件 */
ERR_OPEN_DIR EQU 041H ; 指定路徑的目錄被打開 */
ERR_MISS_FILE EQU 042H ; 指定路徑的文件沒有找到,可能是文件名稱錯誤 */
ERR_FOUND_NAME EQU 043H ; 搜索到與通配符相匹配的文件名,文件名及其完整路徑在命令緩沖區(qū)中,如果需要使用,應該打開該文件 */
ERR_USB_DISK_ERR EQU 01FH ; USB存儲器操作失敗,在初始化時可能是USB存儲器不支持,在讀寫操作中可能是磁盤損壞或者已經(jīng)斷開 */
; 其余錯誤代碼未定義,可以發(fā)出命令CMD_QueryStatus查詢模塊狀態(tài)并分析 */
; ********************************************************************************************************************* */
; 磁盤及文件狀態(tài),適用于CMD_PARAM.Status.mDiskStatus */
DISK_UNKNOWN EQU 000H ; 尚未初始化,未知狀態(tài) */
DISK_DISCONNECT EQU 001H ; 磁盤沒有連接或者已經(jīng)斷開 */
DISK_CONNECT EQU 002H ; 磁盤已經(jīng)連接,但是尚未初始化或者無法識別該磁盤 */
DISK_MOUNTED EQU 003H ; 磁盤已經(jīng)初始化成功,但是尚未分析文件系統(tǒng)或者文件系統(tǒng)不支持 */
DISK_READY EQU 010H ; 已經(jīng)分析磁盤的文件系統(tǒng)并且能夠支持 */
DISK_OPEN_ROOT EQU 012H ; 已經(jīng)打開根目錄,扇區(qū)模式,只能以扇區(qū)為單位讀寫目錄的內容,使用后必須關閉,注意FAT12/FAT16根目錄是固定長度 */
DISK_OPEN_DIR EQU 013H ; 已經(jīng)打開子目錄,扇區(qū)模式,只能以扇區(qū)為單位讀寫目錄的內容 */
DISK_OPEN_FILE EQU 014H ; 已經(jīng)打開文件,扇區(qū)模式,可以以扇區(qū)為單位進行數(shù)據(jù)讀寫 */
DISK_OPEN_FILE_B EQU 015H ; 已經(jīng)打開文件,字節(jié)模式,可以以字節(jié)為單位進行數(shù)據(jù)讀寫 */
; ********************************************************************************************************************* */
; FAT類型標志,適用于CMD_PARAM.Query.mDiskFat */
DISK_FS_UNKNOWN EQU 0 ; 未知的文件系統(tǒng) */
DISK_FAT12 EQU 1 ; FAT12文件系統(tǒng) */
DISK_FAT16 EQU 2 ; FAT16文件系統(tǒng) */
DISK_FAT32 EQU 3 ; FAT32文件系統(tǒng) */
; ********************************************************************************************************************* */
; 文件屬性,適用于CMD_PARAM.Modify.mFileAttr */
ATTR_READ_ONLY EQU 001H ; 文件為只讀屬性 */
ATTR_HIDDEN EQU 002H ; 文件為隱含屬性 */
ATTR_SYSTEM EQU 004H ; 文件為系統(tǒng)屬性 */
ATTR_VOLUME_ID EQU 008H ; 卷標 */
ATTR_DIRECTORY EQU 010H ; 子目錄 */
ATTR_ARCHIVE EQU 020H ; 文件為存檔屬性 */
;ATTR_LONG_NAME ( ATTR_READ_ONLY | ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID )
; 文件屬性 unsigned char */
; bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 */
; 只 隱 系 卷 目 存 未定義 */
; 讀 藏 統(tǒng) 標 錄 檔 */
; 文件時間 unsigned short,適用于CMD_PARAM.Modify.mFileTime */
; Time = (Hour<<11) + (Minute<<5) + (Second>>1) */
; 文件日期 unsigned short,適用于CMD_PARAM.Modify.mFileDate */
; Date = ((Year-1980)<<9) + (Month<<5) + Day */
; ********************************************************************************************************************* */
; 文件名,適用于CMD_PARAM.?.mPathName */
PATH_WILDCARD_CHAR EQU 02AH ; 路徑名的通配符 '*' */
PATH_SEPAR_CHAR1 EQU 05CH ; 路徑名的分隔符 '\' */
PATH_SEPAR_CHAR2 EQU 02FH ; 路徑名的分隔符 '/' */
; MAX_PATH_LEN EQU 65 ; 最大路徑長度,含所有斜杠分隔符和小數(shù)點間隔符以及路徑結束符00H,并口方式下最大值為62 */
; MAX_BYTE_IO EQU 64 ; 以字節(jié)為單位單次讀寫文件時的最大長度,超過該長度可以分多次讀寫,并口方式下最大值為61 */
; ********************************************************************************************************************* */
; 外部命令碼 */
CMD_QueryStatus EQU 060H ; 查詢當前模塊的狀態(tài) */
CMD_DiskQuery EQU 061H ; 查詢磁盤信息 */
CMD_FileEnumer EQU 063H ; 枚舉文件,返回文件名 */
CMD_FileOpen EQU 064H ; 打開文件 */
CMD_FileCreate EQU 065H ; 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */
CMD_FileErase EQU 066H ; 刪除文件并關閉 */
CMD_FileClose EQU 067H ; 關閉當前文件 */
CMD_FileQuery EQU 068H ; 查詢當前文件的信息 */
CMD_FileModify EQU 069H ; 查詢或者修改當前文件的信息 */
CMD_FileLocate EQU 06AH ; 移動當前文件指針 */
CMD_FileRead EQU 06BH ; 從當前文件讀取數(shù)據(jù) */
CMD_FileWrite EQU 06CH ; 向當前文件寫入數(shù)據(jù) */
CMD_ByteLocate EQU 07AH ; 以字節(jié)為單位移動當前文件指針 */
CMD_ByteRead EQU 07BH ; 以字節(jié)為單位從當前文件讀取數(shù)據(jù)塊 */
CMD_ByteWrite EQU 07CH ; 以字節(jié)為單位向當前文件寫入數(shù)據(jù)塊 */
CMD_BulkOnlyCmd EQU 070H ; 執(zhí)行基于BulkOnly協(xié)議的命令 */
CMD_DiskReady EQU 071H ; 查詢磁盤是否準備好 */
CMD_DiskSize EQU 072H ; 查詢磁盤容量 */
CMD_FileDirInfo EQU 075H ; 存取當前已打開文件的目錄信息 */
CMD_DirCreate EQU 076H ; 新建目錄并打開,如果目錄已經(jīng)存在則直接打開 */
CMD_FileReadLast EQU 077H ; 從當前文件的尾部讀取不足一個扇區(qū)長度的零碎數(shù)據(jù) */
CMD_SetFileSize EQU 078H ; 修改模塊系統(tǒng)內子程序庫的文件長度變量 */
CMD_StreamRead EQU 07EH ; 數(shù)據(jù)流模式讀文件,只支持串口,只支持文本 */
CMD_StreamWrite EQU 07FH ; 數(shù)據(jù)流模式寫文件,只支持串口,只支持文本 */
; USB設備方式命令碼 */
CMD_SetUsbId EQU 012H ; USB設備模式: 設置USB設備的廠商VID和產(chǎn)品PID */
CMD_SetUsbMode EQU 015H ; USB設備模式: 設置USB主機/設備工作模式,只支持串口 */
CMD_ReadUsbData EQU 028H ; USB設備模式: 從模塊的數(shù)據(jù)下傳端點讀取數(shù)據(jù)塊 */
CMD_WriteUsbData EQU 02BH ; USB設備模式: 向模塊的數(shù)據(jù)上傳端點寫入數(shù)據(jù)塊 */
; 輔助命令碼 */
CMD_GetVer EQU 00AH ; 獲取當前模塊的版本號 */
CMD_ResetInit EQU 00BH ; 復位并重新初始化CH375以及模塊 */
CMD_BaudRate EQU 0A5H ; 設置串口通訊波特率 */
CMD_SetupModule EQU 0A6H ; 設置模塊配置 */
CMD_DirectWrCmd EQU 0B9H ; 直接傳遞給CH375,寫命令 */
CMD_DirectRdDat EQU 0B5H ; 直接傳遞給CH375,讀數(shù)據(jù) */
CMD_DirectWrDat EQU 0B6H ; 直接傳遞給CH375,寫數(shù)據(jù) */
CMD_GetStringSN EQU 0A0H ; 獲取產(chǎn)品序列號字符串 */
; ********************************************************************************************************************* */
; 外部命令參數(shù) */
;typedef union _CMD_PARAM {
; struct {
; unsigned char mBuffer[ MAX_PATH_LEN ];
; } Other;
; struct {
; unsigned long mDiskSizeSec; ; 返回: 整個物理磁盤的總扇區(qū)數(shù) */
; unsigned long mTotalSector; ; 返回: 當前邏輯盤的總扇區(qū)數(shù) */
; unsigned long mFreeSector; ; 返回: 當前邏輯盤的剩余扇區(qū)數(shù) */
; unsigned char mDiskFat; ; 返回: 當前邏輯盤的FAT類型 */
; } Query; ; CMD_DiskQuery, 查詢磁盤信息 */
; struct {
; unsigned char mPathName[ MAX_PATH_LEN ]; ; 輸入?yún)?shù): 路徑: [盤符,冒號,斜杠,目錄名或者文件名及擴展名...,結束符00H], 其中盤符和冒號可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */
; } Open; ; CMD_FileOpen, 打開文件 */
; struct {
; unsigned char mPathName[ MAX_PATH_LEN ]; ; 輸入?yún)?shù): 路徑: [盤符,冒號,斜杠,目錄名或者文件名及擴展名(含通配符*)...,枚舉序號], 其中盤符和冒號可以省略, 例如"C:\DIR1.EXT\DIR2\FILE*",00H */
; } Enumer; ; CMD_FileEnumer, 枚舉文件,返回文件名 */
; struct {
; unsigned char mUpdateLen; ; 輸入?yún)?shù): 是否允許更新長度: 0禁止,1允許 */
; } Close; ; CMD_FileClose, 關閉當前文件 */
; struct {
; unsigned char mPathName[ MAX_PATH_LEN ]; ; 輸入?yún)?shù): 路徑: [盤符,冒號,斜杠,目錄名或者文件名及擴展名...,結束符00H], 其中盤符和冒號可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */
; } Create; ; CMD_FileCreate, 新建文件并打開,如果文件已經(jīng)存在則先刪除后再新建 */
; struct {
; unsigned char mPathName[ MAX_PATH_LEN ]; ; 輸入?yún)?shù): 路徑: [盤符,冒號,斜杠,目錄名或者文件名及擴展名...,結束符00H], 其中盤符和冒號可以省略, 例如"C:\DIR1.EXT\DIR2\FILENAME.EXT",00H */
; } Erase; ; CMD_FileErase, 刪除文件并關閉 */
; struct {
; unsigned long mFileSize; ; 輸入?yún)?shù): 新的文件長度,為0FFFFFFFFH則不修改, 返回: 原長度 */
; unsigned short mFileDate; ; 輸入?yún)?shù): 新的文件日期,為0FFFFH則不修改, 返回: 原日期 */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -