📄 ch341dll.bas
字号:
Declare Function CH341WriteRead Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iWriteLength As Long, ByRef iWriteBuffer As Any, ByVal iReadStep As Long, ByVal iReadTimes As Long, ByRef oReadLength As Long, ByRef oReadBuffer As Any) As Boolean
' CH341WriteRead 执行数据流命令,先输出再输入
' iIndex, 指定CH341设备序号
' iWriteLength, 写长度,准备写出的长度
' iWriteBuffer, 指向一个缓冲区,放置准备写出的数据
' iReadStep, 准备读取的单个块的长度, 准备读取的总长度为(iReadStep*iReadTimes)
' iReadTimes, 准备读取的次数
' oReadLength, 指向长度单元,返回后为实际读取的长度
' oReadBuffer 指向一个足够大的缓冲区,用于保存读取的数据
Declare Function CH341SetStream Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iMode As Long) As Boolean
' CH341SetStream 设置串口流模式
' iIndex, 指定CH341设备序号
' iMode 指定模式,见下行
' 位1-位0: I2C接口速度/SCL频率, 00=低速/20KHz,01=标准/100KHz,10=快速/400KHz,11=高速/750KHz
' 位2: SPI的I/O数/IO引脚, 0=单入单出(D5出/D7入),1=双入双出(D5出D4出/D7入D6入)
' 其它保留,必须为0
Declare Function CH341SetDelaymS Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iDelay As Long) As Boolean
' CH341SetDelaymS 设置硬件异步延时,调用后很快返回,而在下一个流操作之前延时指定毫秒数
' iIndex, 指定CH341设备序号
' iDelay 指定延时的毫秒数
Declare Function CH341StreamI2C Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iWriteLength As Long, ByRef iWriteBuffer As Any, ByVal iReadLength As Long, ByRef oReadBuffer As Any) As Boolean
' CH341StreamI2C 处理I2C数据流,2线接口,时钟线为SCL引脚,数据线为SDA引脚(准双向I/O),速度约56K字节
' iIndex, 指定CH341设备序号
' iWriteLength, 准备写出的数据字节数
' iWriteBuffer, 指向一个缓冲区,放置准备写出的数据,首字节通常是I2C设备地址及读写方向位
' iReadLength, 准备读取的数据字节数
' oReadBuffer 指向一个缓冲区,返回后是读入的数据
Declare Function CH341ReadEEPROM Lib "CH341DLL.DLL" (ByVal iIndexas As Long, ByVal iEepromID As EEPROM_TYPE, ByVal iAddr As Long, ByVal iLength As Long, ByRef oBuffer As Any) As Boolean
' CH341ReadEEPROM 从EEPROM中读取数据块,速度约56K字节
' i Index 指定CH341设备序号
' iEepromID 指定EEPROM型号
' iAddr 指定数据单元的地址
' iLength 准备读取的数据字节数
' oBuffer 指向一个缓冲区,返回后是读入的数据
Declare Function CH341WriteEEPROM Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iEepromID As EEPROM_TYPE, ByVal iAddr As Long, ByVal iLength As Long, ByRef iBuffer As Any) As Boolean
' CH341WriteEEPROM 向EEPROM中写入数据块
' iIndex, 指定CH341设备序号
' iEepromID, 指定EEPROM型号
' iAddr, 指定数据单元的地址
' iLength, 准备写出的数据字节数
' iBuffer 指向一个缓冲区,放置准备写出的数据
Declare Function CH341GetInput Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByRef iStatus As Long) As Boolean
' CH341GetInput 通过CH341直接输入数据和状态,效率比CH341GetStatus更高
' iIndex, 指定CH341设备序号
' iStatus 指向一个双字单元,用于保存状态数据,参考下面的位说明
' 位7-位0对应CH341的D7-D0引脚
' 位8对应CH341的ERR#引脚, 位9对应CH341的PEMP引脚, 位10对应CH341的INT#引脚, 位11对应CH341的SLCT引脚, 位23对应CH341的SDA引脚
' 位13对应CH341的BUSY/WAIT#引脚, 位14对应CH341的AUTOFD#/DATAS#引脚,位15对应CH341的SLCTIN#/ADDRS#引脚
Declare Function CH341SetOutput Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iEnable As Long, ByVal iSetDirOut As Long, ByVal iSetDataOut As Long) As Boolean
' CH341SetOutput 设置CH341的I/O方向,并通过CH341直接输出数据
' ***** 谨慎使用该API, 防止修改I/O方向使输入引脚变为输出引脚导致与其它输出引脚之间短路而损坏芯片 *****
' iIndex, 指定CH341设备序号
' iEnable, 数据有效标志,参考下面的位说明
'// 位0为1说明iSetDataOut的位15-位8有效,否则忽略
'// 位1为1说明iSetDirOut的位15-位8有效,否则忽略
'// 位2为1说明iSetDataOut的7-位0有效,否则忽略
'// 位3为1说明iSetDirOut的位7-位0有效,否则忽略
'// 位4为1说明iSetDataOut的位23-位16有效,否则忽略
' iSetDirOut, 设置I/O方向,某位清0则对应引脚为输入,某位置1则对应引脚为输出,并口方式下默认值为0x000FC000,参考下面的位说明
' iSetDataOut 输出数据,如果I/O方向为输出,那么某位清0时对应引脚输出低电平,某位置1时对应引脚输出高电平,参考下面的位说明
'// 位7-位0对应CH341的D7-D0引脚
'// 位8对应CH341的ERR#引脚, 位9对应CH341的PEMP引脚, 位10对应CH341的INT#引脚, 位11对应CH341的SLCT引脚
'// 位13对应CH341的WAIT#引脚, 位14对应CH341的DATAS#/READ#引脚,位15对应CH341的ADDRS#/ADDR/ALE引脚
'// 以下引脚只能输出,不考虑I/O方向: 位16对应CH341的RESET#引脚, 位17对应CH341的WRITE#引脚, 位18对应CH341的SCL引脚, 位29对应CH341的SDA引脚
Declare Function CH341Set_D5_D0 Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iSetDirOut As Long, ByVal iSetDataOut As Long) As Boolean
' CH341Set_D5_D0 设置CH341的D5-D0引脚的I/O方向,并通过CH341的D5-D0引脚直接输出数据,效率比CH341SetOutput更高
' ***** 谨慎使用该API, 防止修改I/O方向使输入引脚变为输出引脚导致与其它输出引脚之间短路而损坏芯片 *****
' iIndex, 指定CH341设备序号
' iSetDirOut, 设置D5-D0各引脚的I/O方向,某位清0则对应引脚为输入,某位置1则对应引脚为输出,并口方式下默认值为0x00全部输入
' iSetDataOut 设置D5-D0各引脚的输出数据,如果I/O方向为输出,那么某位清0时对应引脚输出低电平,某位置1时对应引脚输出高电平
'// 以上数据的位5-位0分别对应CH341的D5-D0引脚
Declare Function CH341StreamSPI3 Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iChipSelect As Long, ByVal iLength As Long, ByRef ioBuffer As Any) As Boolean
' CH341StreamSPI3 处理SPI数据流,3线接口,时钟线为DCK2/SCL引脚,数据线为DIO/SDA引脚(准双向I/O),片选线为D0/D1/D2,速度约51K字节
' SPI时序: DCK2/SCL引脚为时钟输出, 默认为低电平, DIO/SDA引脚在时钟上升沿之前输出, DIO/SDA引脚在时钟下降沿之后输入
' iIndex, 指定CH341设备序号
' iChipSelect,片选控制, 位7为0则忽略片选控制, 位7为1则参数有效: 位1位0为00/01/10分别选择D0/D1/D2引脚作为低电平有效片选
' iLength, 准备传输的数据字节数
' ioBuffer 指向一个缓冲区,放置准备从DIO写出的数据,返回后是从DIO读入的数据
Declare Function CH341StreamSPI4 Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iChipSelect As Long, ByVal iLength As Long, ByRef ioBuffer As Any) As Boolean
' CH341StreamSPI4 处理SPI数据流,4线接口,时钟线为DCK/D3引脚,输出数据线为DOUT/D5引脚,输入数据线为DIN/D7引脚,片选线为D0/D1/D2,速度约68K字节
' SPI时序: DCK/D3引脚为时钟输出, 默认为低电平, DOUT/D5引脚在时钟上升沿之前输出, DIN/D7引脚在时钟下降沿之后输入
' iIndex, 指定CH341设备序号
' iChipSelect,片选控制, 位7为0则忽略片选控制, 位7为1则参数有效: 位1位0为00/01/10分别选择D0/D1/D2引脚作为低电平有效片选
' iLength, 准备传输的数据字节数
' ioBuffer 指向一个缓冲区,放置准备从DOUT写出的数据,返回后是从DIN读入的数据
Declare Function CH341StreamSPI5 Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iChipSelect As Long, ByVal iLength As Long, ByRef ioBuffer As Any, ByRef ioBuffer2 As Any) As Boolean
' CH341StreamSPI5 处理SPI数据流,5线接口,时钟线为DCK/D3引脚,输出数据线为DOUT/D5和DOUT2/D4引脚,输入数据线为DIN/D7和DIN2/D6引脚,片选线为D0/D1/D2,速度约30K字节*2
' SPI时序: DCK/D3引脚为时钟输出, 默认为低电平, DOUT/D5和DOUT2/D4引脚在时钟上升沿之前输出, DIN/D7和DIN2/D6引脚在时钟下降沿之后输入
' iIndex, 指定CH341设备序号
' iChipSelect,片选控制, 位7为0则忽略片选控制, 位7为1则参数有效: 位1位0为00/01/10分别选择D0/D1/D2引脚作为低电平有效片选
' iLength, 准备传输的数据字节数
' ioBuffer, 指向一个缓冲区,放置准备从DOUT写出的数据,返回后是从DIN读入的数据
' ioBuffer2 指向第二个缓冲区,放置准备从DOUT2写出的数据,返回后是从DIN2读入的数据
Declare Function CH341BitStreamSPI Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iLength As Long, ByRef ioBuffer As Any) As Boolean
' CH341BitStreamSPI 处理SPI位数据流,4线/5线接口,时钟线为DCK/D3引脚,输出数据线为DOUT/DOUT2引脚,输入数据线为DIN/DIN2引脚,片选线为D0/D1/D2,速度约8K位*2
' iIndex, 指定CH341设备序号
' iLength, 准备传输的数据位数,一次最多896,建议不超过256
' ioBuffer 指向一个缓冲区,放置准备从DOUT/DOUT2/D2-D0写出的数据,返回后是从DIN/DIN2读入的数据
'/* SPI时序: DCK/D3引脚为时钟输出, 默认为低电平, DOUT/D5和DOUT2/D4引脚在时钟上升沿之前输出, DIN/D7和DIN2/D6引脚在时钟下降沿之后输入 */
'/* ioBuffer中的一个字节共8位分别对应D7-D0引脚, 位5输出到DOUT, 位4输出到DOUT2, 位2-位0输出到D2-D0, 位7从DIN输入, 位6从DIN2输入, 位3数据忽略 */
'/* 在调用该API之前,应该先调用CH341Set_D5_D0设置CH341的D5-D0引脚的I/O方向,并设置引脚的默认电平 */
Declare Function CH341SetBufUpload Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iEnableOrClear As Long) As Boolean ' 为0则禁止内部缓冲上传模式,使用直接上传,非0则启用内部缓冲上传模式并清除缓冲区中的已有数据
' CH341SetBufUpload ' 设定内部缓冲上传模式
' iIndex, 0指定CH341设备序号,0对应第一个设备
' iEnableOrClear 为0则禁止内部缓冲上传模式,使用直接上传,非0则启用内部缓冲上传模式并清除缓冲区中的已有数据
' 如果启用内部缓冲上传模式,那么CH341驱动程序创建线程自动接收USB上传数据到内部缓冲区,同时清除缓冲区中的已有数据,当应用程序调用CH341ReadData后将立即返回缓冲区中的已有数据
Declare Function CH341QueryBufUpload Lib "CH341DLL.DLL" (ByVal iIndex As Long) As Long
' CH341QueryBufUpload 查询内部上传缓冲区中的已有数据包个数,成功返回数据包个数,出错返回-1
' iIndex 指定CH341设备序号,0对应第一个设备
Declare Function CH341SetBufDownload Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iEnableOrClear As Long) As Boolean
' CH341SetBufDownload 设定内部缓冲下传模式
' iIndex, 指定CH341设备序号,0对应第一个设备
' iEnableOrClear 为0则禁止内部缓冲下传模式,使用直接下传,非0则启用内部缓冲下传模式并清除缓冲区中的已有数据
' 如果启用内部缓冲下传模式,那么当应用程序调用CH341WriteData后将仅仅是将USB下传数据放到内部缓冲区并立即返回,而由CH341驱动程序创建的线程自动发送直到完毕
Declare Function CH341QueryBufDownload Lib "CH341DLL.DLL" (ByVal iIndex As Long) As Long ' 指定CH341设备序号,0对应第一个设备
' CH341QueryBufDownload 查询内部下传缓冲区中的剩余数据包个数(尚未发送),成功返回数据包个数,出错返回-1
' iIndex 指定CH341设备序号,0对应第一个设备
Declare Function CH341ResetInter Lib "CH341DLL.DLL" (ByVal iIndex As Long) As Boolean
' CH341ResetInter 复位中断数据读操作
' iIndex 指定CH341设备序号
Declare Function CH341ResetRead Lib "CH341DLL.DLL" (ByVal iIndex As Long) As Boolean
' CH341ResetRead 复位数据块读操作
' iIndex 指定CH341设备序号
Declare Function CH341ResetWrite Lib "CH341DLL.DLL" (ByVal iIndex As Long) As Boolean
' CH341ResetRead 复位数据块读操作
' iIndex 指定CH341设备序号
'typedef VOID ( CALLBACK * mPCH341_NOTIFY_ROUTINE ) ( ' 设备事件通知回调程序
' ULONG iEventStatus ); ' 设备事件和当前状态(在下行定义): 0=设备拔出事件, 3=设备插入事件
Public Const CH341_DEVICE_ARRIVAL = 3 ' 设备插入事件,已经插入
Public Const CH341_DEVICE_REMOVE_PEND = 1 ' 设备将要拔出
Public Const CH341_DEVICE_REMOVE = 0 ' 设备拔出事件,已经拔出
Declare Function CH341SetDeviceNotify Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByRef iDeviceID As String, ByVal iNotifyRoutine As Long) As Boolean
' CH341SetDeviceNotify 设定设备事件通知程序
' iIndex, 指定CH341设备序号,0对应第一个设备
' iDeviceID, 可选参数,指向字符串,指定被监控的设备的ID,字符串以\0终止
' iNotifyRoutine (函数地址)指定设备事件回调程序, 为NULL则取消事件通知, 否则在检测到事件时调用该程序
Declare Function CH341SetupSerial Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iParityMode As Long, ByVal iBaudRate As Long) As Boolean
' CH341SetupSerial 设定CH341的串口特性,该API只能用于工作于串口方式的CH341芯片
' iIndex, 指定CH341设备序号,0对应第一个设备
' iParityMode, 指定CH341串口的数据校验模式: NOPARITY/ODDPARITY/EVENPARITY/MARKPARITY/SPACEPARITY
' iBaudRate 指定CH341串口的通讯波特率值,可以是50至3000000之间的任意值
'/* 以下API可以用于工作于串口方式的CH341芯片,除此之外的API一般只能用于并口方式的CH341芯片
' CH341OpenDevice
' CH341CloseDevice
' CH341SetupSerial
' CH341ReadData
' CH341WriteData
' CH341SetBufUpload
' CH341QueryBufUpload
' CH341SetBufDownload
' CH341QueryBufDownload
' CH341SetDeviceNotify
' CH341GetStatus
' 以上是主要API,以下是次要API
' CH341GetVersion
' CH341DriverCommand
' CH341GetDrvVersion
' CH341ResetDevice
' CH341GetDeviceDescr
' CH341GetConfigDescr
' CH341SetIntRoutine
' CH341ReadInter
' CH341AbortInter
' CH341AbortRead
' CH341AbortWrite
' CH341ReadI2C
' CH341WriteI2C
' CH341SetExclusive
' CH341SetTimeout
' CH341GetDeviceName
' CH341GetVerIC
' CH341FlushBuffer
' CH341WriteRead
' CH341ResetInter
' CH341ResetRead
' CH341ResetWrite
'*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -