?? ch375hf4.inc
字號:
; 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, 2006.08.02, 2007.08.16
;****************************************
;** Copyright (C) W.ch 1999-2007 **
;** Web: http://www.winchiphead.com **
;****************************************
;** USB Host File Interface for CH375 **
;** TC2.0@PC, KC7.0@MCS51 **
;****************************************
;
; CH375 主機文件系統接口 V3.5 */
; 支持: FAT12/FAT16/FAT32 */
; MCS51單片機, 查詢方式或者中斷方式, 支持小/中/大模式編譯 */
; 支持3種數據存取方式: 普通的單DPTR切換方式, ATMEL/PHILIPS/SST等單片機的雙DPTR切換方式, 用P2+R0指向端口而用DPTR指向外部RAM的方式 */
; U盤文件讀寫程序庫的ASM語言頭文件 */
; CH375HF4是CH375HF6.LIB的優化版,主要針對支持CH375B芯片,不支持外部子程序復制方式 */
;
CH375_LIB_VER EQU 35H
; *********************************************************************************************************************
; 硬件特性
CH375_MAX_DATA_LEN EQU 40H ;最大數據包的長度, 緩沖區的長度
; *********************************************************************************************************************
; 命令代碼
CMD_GET_IC_VER EQU 01H ;獲取芯片及固件版本
; 輸出: 版本號( 位7為1, 位6為0, 位5~位0為版本號 )
; CH375B返回版本號的值為0B7H即版本號為37H
CMD_ENTER_SLEEP EQU 03H ;進入睡眠狀態
CMD_SET_USB_SPEED EQU 04H ;設置USB總線速度, 在每次CMD_SET_USB_MODE設置USB工作模式時會自動恢復到12Mbps全速
; 輸入: 總線速度代碼
; 00H=12Mbps全速FullSpeed(默認值), 01H=1.5Mbps(僅修改頻率), 02H=1.5Mbps低速LowSpeed
CMD_SET_SYS_FREQ EQU CMD_SET_USB_SPEED
CMD_RESET_ALL EQU 05H ;執行硬件復位
CMD_CHECK_EXIST EQU 06H ;測試工作狀態
; 輸入: 任意數據
; 輸出: 輸入數據的按位取反
CMD_GET_TOGGLE EQU 0AH ;獲取OUT事務的同步狀態
; 輸入: 數據1AH
; 輸出: 同步狀態
; 位4為1則OUT事務同步, 否則OUT事務不同步
CMD_CHK_SUSPEND EQU 0BH ;設備方式: 設置檢查USB總線掛起狀態的方式
; 輸入: 數據10H, 檢查方式
; 00H=不檢查USB掛起, 04H=以50mS為間隔檢查USB掛起, 05H=以10mS為間隔檢查USB掛起
CMD_DELAY_100US EQU 0FH ;并口方式: 延時100uS
; 輸出: 延時期間輸出0, 延時結束輸出非0
CMD_SET_USB_ID EQU 12H ;設備方式: 設置USB廠商VID和產品PID
; 輸入: 廠商ID低字節, 廠商ID高字節, 產品ID低字節, 產品ID高字節
CMD_SET_USB_ADDR EQU 13H ;設置USB地址
; 輸入: 地址值
CMD_SET_USB_MODE EQU 15H ;設置USB工作模式
; 輸入: 模式代碼
; 00H=未啟用的設備方式, 01H=已啟用的設備方式并且使用外部固件模式, 02H=已啟用的設備方式并且使用內置固件模式
; 04H=未啟用的主機方式, 05H=已啟用的主機方式, 06H=已啟用的主機方式并且自動產生SOF包, 07H=已啟用的主機方式并且復位USB總線
; 輸出: 操作狀態( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值說明操作未完成 )
CMD_SET_ENDP2 EQU 18H ;設備方式: 設置USB端點0的接收器
; 輸入: 工作方式
; 位7為1則位6為同步觸發位, 否則同步觸發位不變
; 位3~位0為事務響應方式: 0000-就緒ACK, 1110-正忙NAK, 1111-錯誤STALL
CMD_SET_ENDP3 EQU 19H ;設備方式: 設置USB端點0的發送器
; 輸入: 工作方式
; 位7為1則位6為同步觸發位, 否則同步觸發位不變
; 位3~位0為事務響應方式: 0000~1000-就緒ACK, 1110-正忙NAK, 1111-錯誤STALL
CMD_SET_ENDP4 EQU 1AH ;設備方式: 設置USB端點1的接收器
; 輸入: 工作方式
; 位7為1則位6為同步觸發位, 否則同步觸發位不變
; 位3~位0為事務響應方式: 0000-就緒ACK, 1110-正忙NAK, 1111-錯誤STALL
CMD_SET_ENDP5 EQU 1BH ;設備方式: 設置USB端點1的發送器
; 輸入: 工作方式
; 位7為1則位6為同步觸發位, 否則同步觸發位不變
; 位3~位0為事務響應方式: 0000~1000-就緒ACK, 1110-正忙NAK, 1111-錯誤STALL
CMD_SET_ENDP6 EQU 1CH ;設置USB端點2/主機端點的接收器
; 輸入: 工作方式
; 位7為1則位6為同步觸發位, 否則同步觸發位不變
; 位3~位0為事務響應方式: 0000-就緒ACK, 1101-就緒但不返回ACK, 1110-正忙NAK, 1111-錯誤STALL
CMD_SET_ENDP7 EQU 1DH ;設置USB端點2/主機端點的發送器
; 輸入: 工作方式
; 位7為1則位6為同步觸發位, 否則同步觸發位不變
; 位3~位0為事務響應方式: 0000-就緒ACK, 1101-就緒但無須應答, 1110-正忙NAK, 1111-錯誤STALL
CMD_GET_STATUS EQU 22H ;獲取中斷狀態并取消中斷請求
; 輸出: 中斷狀態
CMD_UNLOCK_USB EQU 23H ;設備方式: 釋放當前USB緩沖區
CMD_RD_USB_DATA0 EQU 27H ;從當前USB中斷的端點緩沖區讀取數據塊
; 輸出: 長度, 數據流
CMD_RD_USB_DATA EQU 28H ;從當前USB中斷的端點緩沖區讀取數據塊, 并釋放緩沖區, 相當于 CMD_RD_USB_DATA0 + CMD_UNLOCK_USB
CMD_WR_USB_DATA3 EQU 29H ;設備方式: 向USB端點0的發送緩沖區寫入數據塊
; 輸入: 長度, 數據流
CMD_WR_USB_DATA5 EQU 2AH ;設備方式: 向USB端點1的發送緩沖區寫入數據塊
; 輸入: 長度, 數據流
CMD_WR_USB_DATA7 EQU 2BH ;向USB端點2或者主機端點的發送緩沖區寫入數據塊
; 輸入: 長度, 數據流
; **************************************************************************
; 以下命令用于USB主機方式, 只有CH375支持
CMD_SET_BAUDRATE EQU 02H ;主機方式 & 串口方式: 設置串口通訊波特率
; 輸入: 波特率分頻系數, 波特率分頻常數
; 輸出: 操作狀態( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值說明操作未完成 )
CMD_GET_MAX_LUN EQU 0AH ;主機方式: 獲取USB存儲器最大邏輯單元號
; 輸入: 數據38H
; 輸出: 最大邏輯單元號
CMD_SET_RETRY EQU 0BH ;主機方式: 設置USB事務操作的重試次數
; 輸入: 數據25H, 重試次數
; 位7為0則收到NAK時不重試, 位7為1位6為0則收到NAK時無限重試, 位7為1位6為1則收到NAK時最多重試2秒, 位5~位0為超時后的重試次數
CMD_SET_DISK_LUN EQU 0BH ;主機方式: 設置USB存儲器的當前邏輯單元號
; 輸入: 數據34H, 新的當前邏輯單元號(00H-0FH)
CMD_SET_PKT_P_SEC EQU 0BH ;主機方式: 設置USB存儲器的每扇區數據包總數
; 輸入: 數據39H, 新的每扇區數據包總數(08H,10H,20H,40H)
CMD_TEST_CONNECT EQU 16H ;主機方式: 檢查USB設備連接狀態
; 輸出: 狀態( USB_INT_CONNECT或USB_INT_DISCONNECT或USB_INT_USB_READY, 其它值說明操作未完成 )
CMD_ABORT_NAK EQU 17H ;主機方式: 放棄當前NAK的重試
;
CMD_CLR_STALL EQU 41H ;主機方式: 控制傳輸-清除端點錯誤
; 輸入: 端點號
; 輸出中斷
CMD_SET_ADDRESS EQU 45H ;主機方式: 控制傳輸-設置USB地址
; 輸入: 地址值
; 輸出中斷
CMD_GET_DESCR EQU 46H ;主機方式: 控制傳輸-獲取描述符
; 輸入: 描述符類型
; 輸出中斷
CMD_SET_CONFIG EQU 49H ;主機方式: 控制傳輸-設置USB配置
; 輸入: 配置值
; 輸出中斷
CMD_AUTO_SETUP EQU 4DH ;主機方式: 自動配置USB設備
; 輸出中斷
CMD_ISSUE_TKN_X EQU 4EH ;主機方式: 發出同步令牌, 執行事務, 該命令可代替 CMD_SET_ENDP6/CMD_SET_ENDP7 + CMD_ISSUE_TOKEN
; 輸入: 同步標志, 事務屬性
; 同步標志的位7為主機端點IN的同步觸發位, 位6為主機端點OUT的同步觸發位, 位5~位0必須為0
; 事務屬性的低4位是令牌, 高4位是端點號
; 輸出中斷
CMD_ISSUE_TOKEN EQU 4FH ;主機方式: 發出令牌, 執行事務
; 輸入: 事務屬性
; 低4位是令牌, 高4位是端點號
; 輸出中斷
CMD_DISK_BOC_CMD EQU 50H ;主機方式: 對USB存儲器執行BulkOnly傳輸協議的命令
; 輸出中斷
CMD_DISK_INIT EQU 51H ;主機方式: 初始化USB存儲器
; 輸出中斷
CMD_DISK_RESET EQU 52H ;主機方式: 控制傳輸-復位USB存儲器
; 輸出中斷
CMD_DISK_SIZE EQU 53H ;主機方式: 獲取USB存儲器的容量
; 輸出中斷
CMD_DISK_READ EQU 54H ;主機方式: 從USB存儲器讀數據塊(以扇區為單位)
; 輸入: LBA扇區地址(總長度32位, 低字節在前), 扇區數(01H~FFH)
; 輸出中斷
CMD_DISK_RD_GO EQU 55H ;主機方式: 繼續執行USB存儲器的讀操作
; 輸出中斷
CMD_DISK_WRITE EQU 56H ;主機方式: 向USB存儲器寫數據塊(以扇區為單位)
; 輸入: LBA扇區地址(總長度32位, 低字節在前), 扇區數(01H~FFH)
; 輸出中斷
CMD_DISK_WR_GO EQU 57H ;主機方式: 繼續執行USB存儲器的寫操作
; 輸出中斷
CMD_DISK_INQUIRY EQU 58H ;主機方式: 查詢USB存儲器特性
; 輸出中斷
CMD_DISK_READY EQU 59H ;主機方式: 檢查USB存儲器就緒
; 輸出中斷
CMD_DISK_R_SENSE EQU 5AH ;主機方式: 檢查USB存儲器錯誤
; 輸出中斷
CMD_DISK_MAX_LUN EQU 5DH ;主機方式: 控制傳輸-獲取USB存儲器最大邏輯單元號
; 輸出中斷
; *********************************************************************************************************************
; 操作狀態
CMD_RET_SUCCESS EQU 51H ;命令操作成功
CMD_RET_ABORT EQU 5FH ;命令操作失敗
; *********************************************************************************************************************
; USB中斷狀態
; 以下狀態代碼為特殊事件中斷, 如果通過CMD_CHK_SUSPEND啟用USB總線掛起檢查, 那么必須處理USB總線掛起和睡眠喚醒的中斷狀態
USB_INT_USB_SUSPEND EQU 05H ;USB總線掛起事件
USB_INT_WAKE_UP EQU 06H ;從睡眠中被喚醒事件
; 以下狀態代碼0XH用于USB設備方式
; 內置固件模式下只需要處理: USB_INT_EP1_OUT, USB_INT_EP1_IN, USB_INT_EP2_OUT, USB_INT_EP2_IN
; 位7-位4為0000
; 位3-位2指示當前事務, 00=OUT, 10=IN, 11=SETUP
; 位1-位0指示當前端點, 00=端點0, 01=端點1, 10=端點2, 11=USB總線復位
USB_INT_EP0_SETUP EQU 0CH ;USB端點0的SETUP
USB_INT_EP0_OUT EQU 00H ;USB端點0的OUT
USB_INT_EP0_IN EQU 08H ;USB端點0的IN
USB_INT_EP1_OUT EQU 01H ;USB端點1的OUT
USB_INT_EP1_IN EQU 09H ;USB端點1的IN
USB_INT_EP2_OUT EQU 02H ;USB端點2的OUT
USB_INT_EP2_IN EQU 0AH ;USB端點2的IN
;USB_INT_BUS_RESET EQU 0000XX11B ;USB總線復位
USB_INT_BUS_RESET1 EQU 03H ;USB總線復位
USB_INT_BUS_RESET2 EQU 07H ;USB總線復位
USB_INT_BUS_RESET3 EQU 0BH ;USB總線復位
USB_INT_BUS_RESET4 EQU 0FH ;USB總線復位
; 以下狀態代碼2XH-3XH用于USB主機方式的通訊失敗代碼, 僅CH375支持
; 位7-位6為00
; 位5為1
; 位4指示當前接收的數據包是否同步
; 位3-位0指示導致通訊失敗時USB設備的應答: 0010=ACK, 1010=NAK, 1110=STALL, 0011=DATA0, 1011=DATA1, XX00=超時
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -