?? ch375inc.asm
字號(hào):
; Define for CH372 & CH375
; Website: http://winchiphead.com
; Email: tech@winchiphead.com
; Author: W.ch 2003.09
; V2.0 for CH372A/CH375A
; *********************************************************************************************************************
; 硬件特性
CH375_MAX_DATA_LEN EQU 40H ;最大數(shù)據(jù)包的長(zhǎng)度, 內(nèi)部緩沖區(qū)的長(zhǎng)度
; *********************************************************************************************************************
; 命令代碼
CMD_RESET_ALL EQU 05H ;執(zhí)行硬件復(fù)位
CMD_CHECK_EXIST EQU 06H ;測(cè)試工作狀態(tài)
; 輸入: 任意數(shù)據(jù)
; 輸出: 輸入數(shù)據(jù)的按位取反
CMD_SET_USB_ID EQU 12H ;設(shè)備方式: 設(shè)置USB廠商VID和產(chǎn)品PID
; 輸入: 廠商ID低字節(jié), 廠商ID高字節(jié), 產(chǎn)品ID低字節(jié), 產(chǎn)品ID高字節(jié)
CMD_SET_USB_ADDR EQU 13H ;設(shè)置USB地址
; 輸入: 地址值
CMD_SET_USB_MODE EQU 15H ;設(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ō)明操作未完成 )
CMD_SET_ENDP2 EQU 18H ;設(shè)備方式: 設(shè)置USB端點(diǎn)0的接收器
; 輸入: 工作方式
; 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變
; 位3~位0為事務(wù)響應(yīng)方式: 0000-就緒ACK, 1110-正忙NAK, 1111-錯(cuò)誤STALL
CMD_SET_ENDP3 EQU 19H ;設(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
CMD_SET_ENDP4 EQU 1AH ;設(shè)備方式: 設(shè)置USB端點(diǎn)1的接收器
; 輸入: 工作方式
; 位7為1則位6為同步觸發(fā)位, 否則同步觸發(fā)位不變
; 位3~位0為事務(wù)響應(yīng)方式: 0000-就緒ACK, 1110-正忙NAK, 1111-錯(cuò)誤STALL
CMD_SET_ENDP5 EQU 1BH ;設(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
CMD_SET_ENDP6 EQU 1CH ;設(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
CMD_SET_ENDP7 EQU 1DH ;設(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
CMD_GET_TOGGLE EQU 0AH ;獲取OUT事務(wù)的同步狀態(tài)
; 輸入: 數(shù)據(jù)1AH
; 輸出: 同步狀態(tài)
; 位4為1則OUT事務(wù)同步, 否則OUT事務(wù)不同步
CMD_GET_STATUS EQU 22H ;獲取中斷狀態(tài)并取消中斷請(qǐng)求
; 輸出: 中斷狀態(tài)
CMD_UNLOCK_USB EQU 23H ;設(shè)備方式: 釋放當(dāng)前USB緩沖區(qū)
CMD_RD_USB_DATA EQU 28H ;從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊, 并釋放緩沖區(qū)
; 輸出: 長(zhǎng)度, 數(shù)據(jù)流
CMD_WR_USB_DATA3 EQU 29H ;設(shè)備方式: 向USB端點(diǎn)0的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊
; 輸入: 長(zhǎng)度, 數(shù)據(jù)流
CMD_WR_USB_DATA5 EQU 2AH ;設(shè)備方式: 向USB端點(diǎn)1的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊
; 輸入: 長(zhǎng)度, 數(shù)據(jù)流
CMD_WR_USB_DATA7 EQU 2BH ;向USB端點(diǎn)2的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊
; 輸入: 長(zhǎng)度, 數(shù)據(jù)流
; **************************************************************************
; 以下命令用于USB主機(jī)方式, 只有CH375支持
CMD_SET_BAUDRATE EQU 02H ;串口方式: 設(shè)置串口通訊波特率
; 輸入: 波特率分頻系數(shù), 波特率分頻常數(shù)
; 輸出: 操作狀態(tài)( CMD_RET_SUCCESS或CMD_RET_ABORT, 其它值說(shuō)明操作未完成 )
CMD_ABORT_NAK EQU 17H ;主機(jī)方式: 放棄當(dāng)前NAK的重試
;
CMD_SET_RETRY EQU 0BH ;主機(jī)方式: 設(shè)置USB事務(wù)操作的重試次數(shù)
; 輸入: 數(shù)據(jù)25H, 重試次數(shù)
; 位7為1則收到NAK時(shí)無(wú)限重試, 位3~位0為超時(shí)后的重試次數(shù)
CMD_ISSUE_TOKEN EQU 4FH ;主機(jī)方式: 發(fā)出令牌, 執(zhí)行事務(wù)
; 輸入: 事務(wù)屬性
; 低4位是令牌, 高4位是端點(diǎn)號(hào)
; 輸出中斷
CMD_CLR_STALL EQU 41H ;主機(jī)方式: 控制傳輸-清除端點(diǎn)錯(cuò)誤
; 輸入: 端點(diǎn)號(hào)
; 輸出中斷
CMD_SET_ADDRESS EQU 45H ;主機(jī)方式: 控制傳輸-設(shè)置USB地址
; 輸入: 地址值
; 輸出中斷
CMD_GET_DESCR EQU 46H ;主機(jī)方式: 控制傳輸-獲取描述符
; 輸入: 描述符類型
; 輸出中斷
CMD_SET_CONFIG EQU 49H ;主機(jī)方式: 控制傳輸-設(shè)置USB配置
; 輸入: 配置值
; 輸出中斷
CMD_DISK_INIT EQU 51H ;主機(jī)方式: 初始化USB存儲(chǔ)器
; 輸出中斷
CMD_DISK_RESET EQU 52H ;主機(jī)方式: 復(fù)位USB存儲(chǔ)器
; 輸出中斷
CMD_DISK_SIZE EQU 53H ;主機(jī)方式: 獲取USB存儲(chǔ)器的容量
; 輸出中斷
CMD_DISK_READ EQU 54H ;主機(jī)方式: 從USB存儲(chǔ)器讀數(shù)據(jù)塊(以扇區(qū)512字節(jié)為單位)
; 輸入: LBA扇區(qū)地址(總長(zhǎng)度32位, 低字節(jié)在前), 扇區(qū)數(shù)(01H~FFH)
; 輸出中斷
CMD_DISK_RD_GO EQU 55H ;主機(jī)方式: 繼續(xù)執(zhí)行USB存儲(chǔ)器的讀操作
; 輸出中斷
CMD_DISK_WRITE EQU 56H ;主機(jī)方式: 向USB存儲(chǔ)器寫數(shù)據(jù)塊(以扇區(qū)512字節(jié)為單位)
; 輸入: LBA扇區(qū)地址(總長(zhǎng)度32位, 低字節(jié)在前), 扇區(qū)數(shù)(01H~FFH)
; 輸出中斷
CMD_DISK_WR_GO EQU 57H ;主機(jī)方式: 繼續(xù)執(zhí)行USB存儲(chǔ)器的寫操作
; 輸出中斷
; **************************************************************************
; 以下新增的V2.0命令碼, 僅CH372A/CH375A支持
CMD_GET_IC_VER EQU 01H ;獲取芯片及固件版本
; 輸出: 版本號(hào)( 位7為1, 位6為0, 位5~位0為版本號(hào) )
; CH375返回?zé)o效值為5FH, CH375A返回版本號(hào)的值為0A2H
CMD_ENTER_SLEEP EQU 03H ;進(jìn)入睡眠狀態(tài)
CMD_RD_USB_DATA0 EQU 27H ;從當(dāng)前USB中斷的端點(diǎn)緩沖區(qū)讀取數(shù)據(jù)塊
; 輸出: 長(zhǎng)度, 數(shù)據(jù)流
CMD_DELAY_100US EQU 0FH ;并口方式: 延時(shí)100uS
; 輸出: 延時(shí)期間輸出0, 延時(shí)結(jié)束輸出非0
CMD_CHK_SUSPEND EQU 0BH ;設(shè)備方式: 設(shè)置檢查USB總線掛起狀態(tài)的方式
; 輸入: 數(shù)據(jù)10H, 檢查方式
; 00H=不檢查USB掛起, 04H=以50mS為間隔檢查USB掛起, 05H=以10mS為間隔檢查USB掛起
CMD_SET_SYS_FREQ EQU 04H ;設(shè)置系統(tǒng)工作頻率
; 輸入: 頻率
; 00H=12MHz, 01H=1.5MHz
; **************************************************************************
; 以下改進(jìn)的V2.0命令碼, 用于USB主機(jī)方式, 僅CH375A支持
;CMD_SET_RETRY EQU 0BH ;主機(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ù)
; **************************************************************************
; 以下新增的V2.0命令碼, 用于USB主機(jī)方式, 僅CH375A支持
CMD_TEST_CONNECT EQU 16H ;主機(jī)方式: 檢查USB設(shè)備連接狀態(tài)
; 輸出: 狀態(tài)( USB_INT_CONNECT或USB_INT_DISCONNECT, 其它值說(shuō)明操作未完成 )
CMD_AUTO_SETUP EQU 4DH ;主機(jī)方式: 自動(dòng)配置USB設(shè)備
; 輸出中斷
CMD_ISSUE_TKN_X EQU 4EH ;主機(jī)方式: 發(fā)出同步令牌, 執(zhí)行事務(wù)
; 輸入: 同步標(biāo)志, 事務(wù)屬性
; 同步標(biāo)志的位7為主機(jī)端點(diǎn)IN的同步觸發(fā)位, 位6為主機(jī)端點(diǎn)OUT的同步觸發(fā)位, 位5~位0必須為0
; 事務(wù)屬性的低4位是令牌, 高4位是端點(diǎn)號(hào)
; 輸出中斷
CMD_SET_DISK_LUN EQU 0BH ;主機(jī)方式: 設(shè)置USB存儲(chǔ)器的當(dāng)前邏輯單元號(hào)
; 輸入: 數(shù)據(jù)34H, 新的當(dāng)前邏輯單元號(hào)(00H-0FH)
CMD_DISK_BOC_CMD EQU 50H ;主機(jī)方式: 對(duì)USB存儲(chǔ)器執(zhí)行BulkOnly傳輸協(xié)議的命令
; 輸出中斷
CMD_DISK_INQUIRY EQU 58H ;主機(jī)方式: 查詢USB存儲(chǔ)器特性
; 輸出中斷
CMD_DISK_READY EQU 59H ;主機(jī)方式: 檢查USB存儲(chǔ)器就緒
; 輸出中斷
CMD_DISK_R_SENSE EQU 5AH ;主機(jī)方式: 檢查USB存儲(chǔ)器錯(cuò)誤
; 輸出中斷
CMD_DISK_MAX_LUN EQU 5DH ;主機(jī)方式: 獲取USB存儲(chǔ)器最大邏輯單元號(hào)
; 輸出中斷
; *********************************************************************************************************************
; 操作狀態(tài)
CMD_RET_SUCCESS EQU 51H ;命令操作成功
CMD_RET_ABORT EQU 5FH ;命令操作失敗
; *********************************************************************************************************************
; USB中斷狀態(tài)
; 以下?tīng)顟B(tài)代碼為特殊事件中斷, 僅CH372A/CH375A支持, 如果通過(guò)CMD_CHK_SUSPEND啟用USB總線掛起檢查, 那么必須處理USB總線掛起和睡眠喚醒的中斷狀態(tài)
USB_INT_USB_SUSPEND EQU 05H ;USB總線掛起事件
USB_INT_WAKE_UP EQU 06H ;從睡眠中被喚醒事件
; 以下?tīng)顟B(tài)代碼0XH用于USB設(shè)備方式
; 內(nèi)置固件模式下只需要處理: USB_INT_EP1_IN, USB_INT_EP2_OUT, USB_INT_EP2_IN, 對(duì)于CH372A/CH375A還需要處理: USB_INT_EP1_OUT
; 位7-位4為0000
; 位3-位2指示當(dāng)前事務(wù), 00=OUT, 10=IN, 11=SETUP
; 位1-位0指示當(dāng)前端點(diǎn), 00=端點(diǎn)0, 01=端點(diǎn)1, 10=端點(diǎn)2, 11=USB總線復(fù)位
USB_INT_EP0_SETUP EQU 0CH ;USB端點(diǎn)0的SETUP
USB_INT_EP0_OUT EQU 00H ;USB端點(diǎn)0的OUT
USB_INT_EP0_IN EQU 08H ;USB端點(diǎn)0的IN
USB_INT_EP1_OUT EQU 01H ;USB端點(diǎn)1的OUT
USB_INT_EP1_IN EQU 09H ;USB端點(diǎn)1的IN
USB_INT_EP2_OUT EQU 02H ;USB端點(diǎn)2的OUT
USB_INT_EP2_IN EQU 0AH ;USB端點(diǎn)2的IN
;USB_INT_BUS_RESET EQU 0000XX11B ;USB總線復(fù)位
USB_INT_BUS_RESET1 EQU 03H ;USB總線復(fù)位
USB_INT_BUS_RESET2 EQU 07H ;USB總線復(fù)位
USB_INT_BUS_RESET3 EQU 0BH ;USB總線復(fù)位
USB_INT_BUS_RESET4 EQU 0FH ;USB總線復(fù)位
; 以下?tīng)顟B(tài)代碼2XH-3XH用于USB主機(jī)方式的通訊失敗代碼, 僅CH375/CH375A支持
; 位7-位6為00
; 位5為1
; 位4指示當(dāng)前接收的數(shù)據(jù)包是否同步
; 位3-位0指示導(dǎo)致通訊失敗時(shí)USB設(shè)備的應(yīng)答: 0010=ACK, 1010=NAK, 1110=STALL, 0011=DATA0, 1011=DATA1, XX00=超時(shí)
;USB_INT_RET_ACK EQU 001X0010B ;錯(cuò)誤:對(duì)于IN事務(wù)返回ACK
;USB_INT_RET_NAK EQU 001X1010B ;錯(cuò)誤:返回NAK
;USB_INT_RET_STALL EQU 001X1110B ;錯(cuò)誤:返回STALL
;USB_INT_RET_DATA0 EQU 001X0011B ;錯(cuò)誤:對(duì)于OUT/SETUP事務(wù)返回DATA0
;USB_INT_RET_DATA1 EQU 001X1011B ;錯(cuò)誤:對(duì)于OUT/SETUP事務(wù)返回DATA1
;USB_INT_RET_TOUT EQU 001XXX00B ;錯(cuò)誤:返回超時(shí)
;USB_INT_RET_TOGX EQU 0010X011B ;錯(cuò)誤:對(duì)于IN事務(wù)返回?cái)?shù)據(jù)不同步
;USB_INT_RET_PID EQU 001XXXXXB ;錯(cuò)誤:未定義
; 以下?tīng)顟B(tài)代碼1XH用于USB主機(jī)方式的操作狀態(tài)代碼, 僅CH375/CH375A支持
USB_INT_SUCCESS EQU 14H ;USB事務(wù)或者傳輸操作成功
USB_INT_CONNECT EQU 15H ;檢測(cè)到USB設(shè)備連接事件
USB_INT_DISCONNECT EQU 16H ;檢測(cè)到USB設(shè)備斷開事件
USB_INT_BUF_OVER EQU 17H ;USB控制傳輸?shù)臄?shù)據(jù)太多, 緩沖區(qū)溢出
USB_INT_DISK_READ EQU 1DH ;USB存儲(chǔ)器讀數(shù)據(jù)塊, 請(qǐng)求數(shù)據(jù)讀出
USB_INT_DISK_WRITE EQU 1EH ;USB存儲(chǔ)器寫數(shù)據(jù)塊, 請(qǐng)求數(shù)據(jù)寫入
USB_INT_DISK_ERR EQU 1FH ;USB存儲(chǔ)器操作失敗
; *********************************************************************************************************************
; 常用USB定義
; USB的包標(biāo)識(shí)PID, 主機(jī)方式可能用到
DEF_USB_PID_NULL EQU 00H ;保留PID, 未定義
DEF_USB_PID_SOF EQU 05H
DEF_USB_PID_SETUP EQU 0DH
DEF_USB_PID_IN EQU 09H
DEF_USB_PID_ACK EQU 02H
DEF_USB_PID_NAK EQU 0AH
DEF_USB_PID_STALL EQU 0EH
DEF_USB_PID_DATA0 EQU 03H
DEF_USB_PID_DATA1 EQU 0BH
DEF_USB_PID_PRE EQU 0CH
; USB請(qǐng)求類型, 外置固件模式可能用到
DEF_USB_REQ_READ EQU 80H ;控制讀操作
DEF_USB_REQ_WRITE EQU 00H ;控制寫操作
DEF_USB_REQ_TYPE EQU 60H ;控制請(qǐng)求類型
DEF_USB_REQ_STAND EQU 00H ;標(biāo)準(zhǔn)請(qǐng)求
DEF_USB_REQ_CLASS EQU 20H ;設(shè)備類請(qǐng)求
DEF_USB_REQ_VENDOR EQU 40H ;廠商請(qǐng)求
DEF_USB_REQ_RESERVE EQU 60H ;保留請(qǐng)求
; USB標(biāo)準(zhǔn)設(shè)備請(qǐng)求, RequestType的位6位5=00(Standard), 主機(jī)方式可能用到
DEF_USB_CLR_FEATURE EQU 01H
DEF_USB_SET_FEATURE EQU 03H
DEF_USB_GET_STATUS EQU 00H
DEF_USB_SET_ADDRESS EQU 05H
DEF_USB_GET_DESCR EQU 06H
DEF_USB_SET_DESCR EQU 07H
DEF_USB_GET_CONFIG EQU 08H
DEF_USB_SET_CONFIG EQU 09H
DEF_USB_GET_INTERF EQU 0AH
DEF_USB_SET_INTERF EQU 0BH
DEF_USB_SYNC_FRAME EQU 0CH
; *********************************************************************************************************************
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -