📄 ch341dll.bas
字号:
Attribute VB_Name = "CH341DLL"
Option Explicit
' 2004.05.28, 2004.10.20, 2005.01.08, 2005.03.25, 2005.04.28
'****************************************
'** Copyright (C) W.ch 1999-2005 **
'** Web: http:'www.winchiphead.com **
'****************************************
'** DLL for USB interface chip CH341 **
'** C, VC5.0 **
'****************************************
'
' USB总线接口芯片CH341并口应用层接口库 V1.6
' 南京沁恒电子有限公司 作者: W.ch 2005.04
' CH341-DLL V1.6
' 运行环境: Windows 98/ME, Windows 2000/XP
' support USB chip: CH341, CH341A
' USB => Parallel, I2C, SPI, JTAG ...
'
Public Enum EEPROM_TYPE ' EEPROM型号定义
ID_24C01 = 0
ID_24C02 = 1
ID_24C04 = 2
ID_24C08 = 3
ID_24C16 = 4
ID_24C32 = 5
ID_24C64 = 6
ID_24C128 = 7
ID_24C256 = 8
ID_24C512 = 9
ID_24C1024 = 10
ID_24C2048 = 11
ID_24C4096 = 12
End Enum
Type mUspValue
mUspValueLow As Byte ' 02H 值参数低字节
mUspValueHigh As Byte ' 03H 值参数高字节
End Type
Type mUspIndex
mUspIndexLow As Byte ' 04H 索引参数低字节
mUspIndexHigh As Byte ' 05H 索引参数高字节
End Type
Type USB_SETUP_PKT ' USB控制传输的建立阶段的数据请求包结构
mUspReqType As Byte ' 00H 请求类型
mUspRequest As Byte ' 01H 请求代码
mUspValue As mUspValue ' 02H-03H 值参数
mUspIndex As mUspIndex ' 04H-05H 索引参数
mLength As Integer ' 06H-07H 数据阶段的数据长度
End Type
Public Const INVALID_HANDLE_VALUE = -1 '错误码
Public Const mCH341_PACKET_LENGTH = 32 ' CH341支持的数据包的长度
Public Const mCH341_PKT_LEN_SHORT = 8 ' CH341支持的短数据包的长度
Type WIN32_COMMAND '定义WIN32命令接口结构
mFunction As Long '输入时指定功能代码或者管道号
'输出时返回操作状态
mLength As Long '存取长度,返回后续数据的长度
mBuffer(mCH341_PACKET_LENGTH - 1) As Byte '数据缓冲区,长度为0至255B
End Type
Public mWIN32_COMMAND As WIN32_COMMAND
Public Const FILE_DEVICE_UNKNOWN = &H22
Public Const FILE_ANY_ACCESS = 0
Public Const METHOD_BUFFERED = 0
' WIN32应用层接口命令
Public Const IOCTL_CH341_COMMAND = (FILE_DEVICE_UNKNOWN * (2 ^ 16) + FILE_ANY_ACCESS * 2 ^ 14 + &HF34 * 2 ^ 2 + METHOD_BUFFERED) ' 专用接口
Const mWIN32_COMMAND_HEAD = 8 ' WIN32命令接口的头长度
Public Const mCH341_MAX_NUMBER = 16 ' 最多同时连接的CH341数
Public Const mMAX_BUFFER_LENGTH = &H1000 ' 数据缓冲区最大长度4096
Public Const mMAX_COMMAND_LENGTH = (mWIN32_COMMAND_HEAD + mMAX_BUFFER_LENGTH) ' 最大数据长度加上命令结构头的长度
Public Const mDEFAULT_BUFFER_LEN = &H400 ' 数据缓冲区默认长度1024
Public Const mDEFAULT_COMMAND_LEN = (mWIN32_COMMAND_HEAD + mDEFAULT_BUFFER_LEN) ' 默认数据长度加上命令结构头的长度
' CH341端点地址
Public Const mCH341_ENDP_INTER_UP = &H81 ' CH341的中断数据上传端点的地址
Public Const mCH341_ENDP_INTER_DOWN = &H1 ' CH341的中断数据下传端点的地址
Public Const mCH341_ENDP_DATA_UP = &H82 ' CH341的数据块上传端点的地址
Public Const mCH341_ENDP_DATA_DOWN = &H2 ' CH341的数据块下传端点的地址
' 设备层接口提供的管道操作命令
Public Const mPipeDeviceCtrl = &H4 ' CH341的综合控制管道
Public Const mPipeInterUp = &H5 ' CH341的中断数据上传管道
Public Const mPipeDataUp = &H6 ' CH341的数据块上传管道
Public Const mPipeDataDown = &H7 ' CH341的数据块下传管道
' 应用层接口的功能代码
Public Const mFuncNoOperation = &H0 ' 无操作
Public Const mFuncGetVersion = &H1 ' 获取驱动程序版本号
Public Const mFuncGetConfig = &H2 ' 获取USB设备配置描述符
Public Const mFuncSetTimeout = &H9 ' 设置USB通讯超时
Public Const mFuncSetExclusive = &HB ' 设置独占使用
Public Const mFuncResetDevice = &HC ' 复位USB设备
Public Const mFuncResetPipe = &HD ' 复位USB管道
Public Const mFuncAbortPipe = &HE ' 取消USB管道的数据请求
' CH341并口专用的功能代码
Public Const mFuncSetParaMode = &HF ' 设置并口模式
Public Const mFuncReadData0 = &H10 ' 从并口读取数据块0
Public Const mFuncReadData1 = &H11 ' 从并口读取数据块1
Public Const mFuncWriteData0 = &H12 ' 向并口写入数据块0
Public Const mFuncWriteData1 = &H13 ' 向并口写入数据块1
Public Const mFuncWriteRead = &H14 ' 先输出再输入
' USB设备标准请求代码
Public Const mUSB_CLR_FEATURE = &H1
Public Const mUSB_SET_FEATURE = &H3
Public Const mUSB_GET_STATUS = &H0
Public Const mUSB_SET_ADDRESS = &H5
Public Const mUSB_GET_DESCR = &H6
Public Const mUSB_SET_DESCR = &H7
Public Const mUSB_GET_CONFIG = &H8
Public Const mUSB_SET_CONFIG = &H9
Public Const mUSB_GET_INTERF = &HA
Public Const mUSB_SET_INTERF = &HB
Public Const mUSB_SYNC_FRAME = &HC
' CH341控制传输的厂商专用请求类型
Public Const mCH341_VENDOR_READ = &HC0 ' 通过控制传输实现的CH341厂商专用读操作
Public Const mCH341_VENDOR_WRITE = &H40 ' 通过控制传输实现的CH341厂商专用写操作
' CH341控制传输的厂商专用请求代码
Public Const mCH341_PARA_INIT = &HB1 ' 初始化并口
Public Const mCH341_I2C_STATUS = &H52 ' 获取I2C接口的状态
Public Const mCH341_I2C_COMMAND = &H53 ' 发出I2C接口的命令
' CH341并口操作命令代码
Public Const mCH341_PARA_CMD_R0 = &HAC ' 从并口读数据0
Public Const mCH341_PARA_CMD_R1 = &HAD ' 从并口读数据1
Public Const mCH341_PARA_CMD_W0 = &HA6 ' 向并口写数据0
Public Const mCH341_PARA_CMD_W1 = &HA7 ' 向并口写数据1
Public Const mCH341_PARA_CMD_STS = &HA0 ' 获取并口状态
' CH341A并口操作命令代码
Public Const mCH341A_CMD_SET_OUTPUT = &HA1 ' 设置并口输出
Public Const mCH341A_CMD_IO_ADDR = &HA2 ' MEM带地址读写/输入输出,从次字节开始为命令流
Public Const mCH341A_CMD_SPI_STREAM = &HA8 ' SPI接口的命令包,从次字节开始为数据流
Public Const mCH341A_CMD_SIO_STREAM = &HA9 ' SIO接口的命令包,从次字节开始为数据流
Public Const mCH341A_CMD_I2C_STREAM = &HAA ' I2C接口的命令包,从次字节开始为I2C命令流
Public Const mCH341A_CMD_UIO_STREAM = &HAB ' UIO接口的命令包,从次字节开始为命令流
' CH341A控制传输的厂商专用请求代码
Public Const mCH341A_BUF_CLEAR = &HB2 ' 清除未完成的数据
Public Const mCH341A_I2C_CMD_X = &H54 ' 发出I2C接口的命令,立即执行
Public Const mCH341A_DELAY_MS = &H5E ' 以亳秒为单位延时指定时间
Public Const mCH341A_GET_VER = &H5F ' 获取芯片版本
Public Const mCH341_EPP_IO_MAX = mCH341_PACKET_LENGTH - 1 ' CH341在EPP/MEM方式下单次读写数据块的最大长度
Public Const mCH341A_EPP_IO_MAX = &HFF ' CH341A在EPP/MEM方式下单次读写数据块的最大长度
Public Const mCH341A_CMD_IO_ADDR_W = &H0 ' MEM带地址读写/输入输出的命令流:写数据,位6-位0为地址,下一个字节为待写数据
Public Const mCH341A_CMD_IO_ADDR_R = &H80 ' MEM带地址读写/输入输出的命令流:读数据,位6-位0为地址,读出数据一起返回
Public Const mCH341A_CMD_I2C_STM_STA = &H74 ' I2C接口的命令流:产生起始位
Public Const mCH341A_CMD_I2C_STM_STO = &H75 ' I2C接口的命令流:产生停止位
Public Const mCH341A_CMD_I2C_STM_OUT = &H0 'I2C接口的命令流:输出数据,位5-位0为长度,后续字节为数据,0长度则只发送一个字节并返回应答
Public Const mCH341A_CMD_I2C_STM_IN = &HC0 ' I2C接口的命令流:输入数据,位5-位0为长度,0长度则只接收一个字节并发送无应答
'#define mCH341A_CMD_I2C_STM_MAX ( min( 0x3F, mCH341_PACKET_LENGTH ) ) // I2C接口的命令流单个命令输入输出数据的最大长度
Public Const mCH341A_CMD_I2C_STM_SET = &H60 ' I2C接口的命令流:设置参数,位2=SPI的I/O数(0=单入单出,1=双入双出),位1位0=I2C速度(00=低速,01=标准,10=快速,11=高速)
Public Const mCH341A_CMD_I2C_STM_US = &H40 ' I2C接口的命令流:以微秒为单位延时,位3-位0为延时值
Public Const mCH341A_CMD_I2C_STM_MS = &H50 ' I2C接口的命令流:以亳秒为单位延时,位3-位0为延时值
Public Const mCH341A_CMD_I2C_STM_DLY = &HF ' I2C接口的命令流单个命令延时的最大值
Public Const mCH341A_CMD_I2C_STM_END = &H0 ' I2C接口的命令流:命令包提前结束
Public Const mCH341A_CMD_UIO_STM_IN = &H0 ' UIO接口的命令流:输入数据D7-D0
Public Const mCH341A_CMD_UIO_STM_DIR = &H40 ' UIO接口的命令流:设定I/O方向D5-D0,位5-位0为方向数据
Public Const mCH341A_CMD_UIO_STM_OUT = &H80 'UIO接口的命令流:输出数据D5-D0,位5-位0为数据
Public Const mCH341A_CMD_UIO_STM_US = &HC0 ' UIO接口的命令流:以微秒为单位延时,位5-位0为延时值
Public Const mCH341A_CMD_UIO_STM_END = &H20 ' UIO接口的命令流:命令包提前结束
' CH341并口工作模式
Public Const mCH341_PARA_MODE_EPP = &H0 ' CH341并口工作模式为EPP方式
Public Const mCH341_PARA_MODE_EPP17 = &H0 ' CH341A并口工作模式为EPP方式V1.7
Public Const mCH341_PARA_MODE_EPP19 = &H1 ' CH341A并口工作模式为EPP方式V1.9
Public Const mCH341_PARA_MODE_MEM = &H2 ' CH341并口工作模式为MEM方式
' 直接输入的状态信号的位定义
Public Const mStateBitERR = &H100 ' 只读,ERR#引脚输入状态,1:高电平,0:低电平
Public Const mStateBitPEMP = &H200 ' 只读,PEMP引脚输入状态,1:高电平,0:低电平
Public Const mStateBitINT = &H400 ' 只读,INT#引脚输入状态,1:高电平,0:低电平
Public Const mStateBitSLCT = &H800 ' 只读,SLCT引脚输入状态,1:高电平,0:低电平
Public Const mStateBitSDA = &H800000 ' 只读,SDA引脚输入状态,1:高电平,0:低电平
Declare Function CH341OpenDevice Lib "CH341DLL.DLL" (ByVal iIndex As Long) As Long
' 打开CH341设备,返回句柄,出错则无效
' iIndex 指定CH341设备序号,0对应第一个设备
Declare Sub CH341CloseDevice Lib "CH341DLL.DLL" (ByVal iIndex As Long)
' 关闭CH341设备
' iIndex 指定CH341设备序号
Declare Function CH341GetVersion Lib "CH341DLL.DLL" () As Long
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -