Add files via upload

This commit is contained in:
kristjan-komlosi
2017-06-30 08:16:22 +02:00
committed by GitHub
parent 6685d59fbb
commit 67c0a98ce3
55 changed files with 116432 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,186 @@
; CH341SER.INF
; Driver for CH341 (USB=>SERIAL chip) V3.3
; WDM&VXD for Windows 98/Me/2000/XP/Server2003/Vista/64bit Vista/Server2008/Win7/64bit Win7
; Copyright (C) W.ch 2001-2011
;
[Version]
Signature = "$Chicago$"
Class = Ports
ClassGuid = {4D36E978-E325-11CE-BFC1-08002BE10318}
Provider = %WinChipHead%
DriverVer = 11/04/2011, 3.3.2011.11
CatalogFile.NT = CH341SER.CAT
[ControlFlags]
ExcludeFromSelect = USB\VID_1A86&PID_7523
ExcludeFromSelect = USB\VID_1A86&PID_5523
ExcludeFromSelect = USB\VID_4348&PID_5523
ExcludeFromSelect = USB\VID_4348&PID_5523&REV_0250
ExcludeFromSelect = USBSERPORT\SER5523
ExcludeFromSelect = CH341PORT\SER5523
[Manufacturer]
%WinChipHead% = WinChipHead,NT,NTamd64
[WinChipHead]
%CH340SER.DeviceDesc% = CH341SER_Install, USB\VID_1A86&PID_7523
%CH341ASER.DeviceDesc% = CH341SER_Install, USB\VID_1A86&PID_5523
%CH341SER.DeviceDesc% = CH341SER_Install, USB\VID_4348&PID_5523
%CH340SER.DeviceDesc% = CH341SER_Install, USB\VID_4348&PID_5523&REV_0250
%CH341S98.DeviceDesc% = CH341S98_Install, USBSERPORT\SER5523
%CH341S98.DeviceDesc% = CH341S98_Install, CH341PORT\SER5523
[WinChipHead.NT]
%CH340SER.DeviceDesc% = CH341SER_Install.NT, USB\VID_1A86&PID_7523
%CH341ASER.DeviceDesc% = CH341SER_Install.NT, USB\VID_1A86&PID_5523
%CH341SER.DeviceDesc% = CH341SER_Install.NT, USB\VID_4348&PID_5523
%CH340SER.DeviceDesc% = CH341SER_Install.NT, USB\VID_4348&PID_5523&REV_0250
[WinChipHead.NTamd64]
%CH340SER.DeviceDesc% = CH341SER_Inst.NTamd64, USB\VID_1A86&PID_7523
%CH341ASER.DeviceDesc% = CH341SER_Inst.NTamd64, USB\VID_1A86&PID_5523
%CH341SER.DeviceDesc% = CH341SER_Inst.NTamd64, USB\VID_4348&PID_5523
%CH340SER.DeviceDesc% = CH341SER_Inst.NTamd64, USB\VID_4348&PID_5523&REV_0250
[CH341SER_Install]
DelFiles = CH341S98.DelFiles.SYS
CopyFiles = CH341SER.CopyFiles.SYS, CH341SER.CopyFiles.DLL
AddReg = CH341SER.9X.AddReg, CH341SER.AddReg
[CH341SER_Install.NT]
CopyFiles = CH341SER.NT.CopyFiles.SYS, CH341SER.CopyFiles.DLL
AddReg = CH341SER.NT.AddReg, CH341SER.AddReg
[CH341SER_Install.NT.HW]
AddReg = CH341SER.NT.HW.AddReg
[CH341SER_Inst.NTamd64]
CopyFiles = CH341SER.NT.CopyFiles.SYSA64, CH341SER.CopyFiles.DLLA64
AddReg = CH341SER.NT.AddReg, CH341SER.AddReg
[CH341SER_Inst.NTamd64.HW]
AddReg = CH341SER.NT.HW.AddReg
[CH341S98_Install]
DelFiles = CH341S98.DelFiles.SYS
CopyFiles = CH341S98.CopyFiles.VXD, CH341SER.CopyFiles.SYS
AddReg = CH341S98.9X.AddReg, CH341S98.AddReg
;[CH341S98_Install.NT]
[CH341S98.DelFiles.SYS]
CH341S98.SYS, , , 1
[CH341SER.CopyFiles.SYS]
CH341S98.SYS, , , 2
[CH341SER.NT.CopyFiles.SYS]
CH341SER.SYS, , , 2
[CH341SER.NT.CopyFiles.SYSA64]
CH341S64.SYS, , , 2
[CH341S98.CopyFiles.VXD]
CH341SER.VXD, , , 2
[CH341SER.CopyFiles.DLL]
CH341PT.DLL, , , 2
;安装DLL是可选的,DLL可以用于识别CH341端口和监视CH341端口的插拔事件
[CH341SER.CopyFiles.DLLA64]
CH341PT.DLL, , , 2
;安装DLL是可选的,DLL可以用于识别CH341端口和监视CH341端口的插拔事件
[CH341SER.9X.AddReg]
HKR, , DevLoader, , *NTKERN
HKR, , NTMPDriver, , CH341S98.SYS
[CH341SER.NT.AddReg]
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
[CH341SER.NT.HW.AddReg]
HKR,,"UpperFilters",0x00010000,"serenum"
;上面这行用于枚举接在串口的即插即用设备,启动时将产生DTR和RTS信号,如果需要枚举,请将上面这行的分号去掉
[CH341S98.9X.AddReg]
HKR, , DevLoader, , *vcomm
HKR, , PortDriver, , CH341SER.VXD
HKR, , Contention, , *vcd
HKR, , ConfigDialog, , serialui.dll
HKR, , DCB, 3, 1C,00,00,00, 80,25,00,00, 11,00,00,00, 00,00,0A,00, 0A,00,08,00, 00,11,13,00, 00,00,00,00
HKR, , PortSubClass, 1, 01
HKR, , EnumPropPages, , "serialui.dll,EnumPropPages"
HKR, , Enumerator, , serenum.vxd
;上面这行用于枚举接在串口的即插即用设备,启动时将产生DTR和RTS信号,如果需要枚举,请将上面这行的分号去掉
[CH341SER.AddReg]
HKLM, SOFTWARE\WinChipHead\IC\CH341SER, WDM, 0x00010001, 0x00000032
HKLM, SOFTWARE\WinChipHead\IC\CH341PORT, DLL, 0x00010001, 0x00000010
HKLM, SOFTWARE\WinChipHead\IC\CH341SER, Function, , "USB=>Serial"
;HKLM, SYSTEM\CurrentControlSet\Services\CH341SER, UserRemoval, 0x00010001, 0x00000001
;上面这行用于在系统托盘中显示“安全删除USB转SERIAL硬件设备”便于用户手工删除硬件
[CH341S98.AddReg]
HKLM, SOFTWARE\WinChipHead\IC\CH341SER, VXD, 0x00010001, 0x00000023
[CH341SER_Install.NT.Services]
AddService = CH341SER, 2, CH341SER.Service
AddService = Serenum, , Serenum_Service_Inst
[CH341SER_Inst.NTamd64.Services]
AddService = CH341SER_A64, 2, CH341SER.ServiceA64
AddService = Serenum, , Serenum_Service_Inst
[CH341SER.Service]
DisplayName = "CH341SER"
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %10%\System32\Drivers\CH341SER.SYS
[CH341SER.ServiceA64]
DisplayName = "CH341SER_A64"
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %10%\System32\Drivers\CH341S64.SYS
[Serenum_Service_Inst]
DisplayName = "SerEnum"
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\serenum.sys
LoadOrderGroup = PNP Filter
[DestinationDirs]
DefaultDestDir = 10, System32\Drivers
CH341S98.DelFiles.SYS = 11
CH341SER.CopyFiles.SYS = 10, System32\Drivers
CH341SER.NT.CopyFiles.SYS = 10, System32\Drivers
CH341S98.CopyFiles.VXD = 11
CH341SER.CopyFiles.DLL = 11
CH341SER.CopyFiles.DLLA64 = 10, Syswow64
CH341SER.NT.CopyFiles.SYSA64 = 10, System32\Drivers
[SourceDisksFiles]
CH341SER.SYS = 1
CH341S98.SYS = 1
CH341SER.VXD = 1
CH341PT.DLL = 1
CH341S64.SYS = 1
[SourceDisksNames]
1 = %DISK_NAME%, , ,
[SourceDisksNames.amd64]
1 = %DISK_NAME%, , ,
[Strings]
WinChipHead = "wch.cn"
CH341SER.DeviceDesc = "USB-SERIAL CH341"
CH341S98.DeviceDesc = "USB-SERIAL CH341"
CH340SER.DeviceDesc = "USB-SERIAL CH340"
CH341ASER.DeviceDesc = "USB-SERIAL CH341A"
DISK_NAME = "CH341 Serial Installation Disk"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,55 @@
Attribute VB_Name = "CH341PTDLL"
' 2005.07.28
'****************************************
'** Copyright (C) W.ch 1999-2005 **
'** Web: http:'www.winchiphead.com **
'****************************************
'** DLL for USB interface chip CH341 **
'** C, VC5.0 **
'****************************************
'
' USB总线接口芯片CH341端口应用层接口库 V1.0
' 南京沁恒电子有限公司 作者: W.ch 2005.07
' CH341-Port-DLL V1.0
' 运行环境: Windows 98/ME, Windows 2000/XP
' support USB chip: CH341, CH341A
' USB => Serial, Parallel
'
Public Const MAX_DEVICE_PATH_SIZE = 128 ' 设备名称的最大字符数
Public Const MAX_DEVICE_ID_SIZE = 64 ' 设备ID的最大字符数
Declare Function CH341PtGetVersion Lib "CH341PT.DLL" () As Long ' 获得DLL版本号,返回版本号
Declare Function CH341PtHandleIsCH341 Lib "CH341PT.DLL" (ByVal iPortHandle As Long) As Boolean ' 指定已经打开的端口句柄
' CH341PtHandleIsCH341 检查已经打开的端口是否为CH341端口
' iPortHandle ' 指定已经打开的端口句柄
Declare Function CH341PtNameIsCH341 Lib "CH341PT.DLL" (ByVal iPortName As String) As Boolean
' CH341PtNameIsCH341 检查指定名称的端口是否为CH341端口
' iPortName 指定端口名称,例如"COM3","COM15"等,该端口必须未被占用(指未被其它程序打开)
' 端口设备事件通知回调程序
' sub mPCH341PT_NOTIFY_ROUTINE (byval iDevIndexAndEvent as long) ' 端口设备序号和事件及当前状态(参考下行说明)
' iDevIndexAndEvent: 正数说明是设备插入事件/已经插入, 负数说明是设备拔出事件/已经拔出, 其绝对值是设备序号(1到255)
Declare Function CH341PtSetDevNotify Lib "CH341PT.DLL" (ByVal iDeviceID As String, ByVal iNotifyRoutine As Long) As Boolean ' 指定端口设备事件回调程序,为NULL则取消事件通知,否则在检测到事件时调用该程序
' CH341PtSetDevNotify 设定端口设备事件通知程序
' iDeviceID, 可选参数,指向以\0终止的字符串,指定被监控的设备的ID或者不含序号的主名称,对于串口该参数必须为NULL或者"COM"
' iNotifyRoutine 指定端口设备事件回调程序,为NULL则取消事件通知,否则在检测到事件时调用该程序
'/* 即插即用设备的应用程序编程参考
'1. 主程序启动默认是禁止数据传输的只有在确定有CH341端口可用并且打开端口后才进行数据传输
'2. 调用CH341PtSetDevNotify设置插拔监视如果将来发生CH341端口的插拔事件DLL将会自动调用iNotifyRoutine所指定的子程序或者函数
'3. 从端口1到端口255正常到20即可逐个调用CH341PtNameIsCH341确定是否为CH341端口如果返回是则记忆其端口号并打开后开始传输如果返回否则休息
'4. 如果iNotifyRoutine收到事件通知那么可以在保存事件参数后通知主程序处理也可以在该子程序中处理
' 分析事件参数如果是正数则说明有一个端口插入需要打开时应该首先用CH341PtNameIsCH341判断是否为CH341端口是则记忆其端口号并打开后开始传输
' 如果是负数则说明有一个端口拔出判断其端口号用0减去该负数得端口号是否与记忆的已打开的端口号相同是则应该及时关闭
'5. 当前已经打开的端口号应该保存为全局变量, 如果端口未打开或者被关闭,那么应用程序应该停止数据传输
'6. 如果事先未用CH341PtNameIsCH341确定是否为CH341端口那么在端口已经打开后也可以调用CH341PtHandleIsCH341判断是否为CH341端口
'*/

View File

@@ -0,0 +1,67 @@
// 2005.07.28
//****************************************
//** Copyright (C) W.ch 1999-2005 **
//** Web: http://www.winchiphead.com **
//****************************************
//** DLL for USB interface chip CH341 **
//** C, VC5.0 **
//****************************************
//
// USB总线接口芯片CH341端口应用层接口库 V1.0
// 南京沁恒电子有限公司 作者: W.ch 2005.07
// CH341-Port-DLL V1.0
// 运行环境: Windows 98/ME, Windows 2000/XP
// support USB chip: CH341, CH341A
// USB => Serial, Parallel
//
#ifndef _CH341_PORT_H
#define _CH341_PORT_H
#ifdef __cplusplus
extern "C" {
#endif
#define MAX_DEVICE_PATH_SIZE 128 // 设备名称的最大字符数
#define MAX_DEVICE_ID_SIZE 64 // 设备ID的最大字符数
ULONG WINAPI CH341PtGetVersion( ); // 获得DLL版本号,返回版本号
BOOL WINAPI CH341PtHandleIsCH341( // 检查已经打开的端口是否为CH341端口
HANDLE iPortHandle ); // 指定已经打开的端口句柄
BOOL WINAPI CH341PtNameIsCH341( // 检查指定名称的端口是否为CH341端口
PUCHAR iPortName ); // 指定端口名称,例如"COM3","COM15"等,该端口必须未被占用(指未被其它程序打开)
typedef VOID ( CALLBACK * mPCH341PT_NOTIFY_ROUTINE ) ( // 端口设备事件通知回调程序
LONG iDevIndexAndEvent ); // 端口设备序号和事件及当前状态(参考下行说明)
// iDevIndexAndEvent: 正数说明是设备插入事件/已经插入, 负数说明是设备拔出事件/已经拔出, 其绝对值是设备序号(1到255)
BOOL WINAPI CH341PtSetDevNotify( // 设定端口设备事件通知程序
PCHAR iDeviceID, // 可选参数,指向以\0终止的字符串,指定被监控的设备的ID或者不含序号的主名称,对于串口该参数必须为NULL或者"COM"
mPCH341PT_NOTIFY_ROUTINE iNotifyRoutine ); // 指定端口设备事件回调程序,为NULL则取消事件通知,否则在检测到事件时调用该程序
/* 即插即用设备的应用程序编程参考
1. 主程序启动默认是禁止数据传输的只有在确定有CH341端口可用并且打开端口后才进行数据传输
2. 调用CH341PtSetDevNotify设置插拔监视如果将来发生CH341端口的插拔事件DLL将会自动调用iNotifyRoutine所指定的子程序或者函数
3. 从端口1到端口255正常到20即可逐个调用CH341PtNameIsCH341确定是否为CH341端口如果返回是则记忆其端口号并打开后开始传输如果返回否则休息
4. 如果iNotifyRoutine收到事件通知那么可以在保存事件参数后通知主程序处理也可以在该子程序中处理
分析事件参数如果是正数则说明有一个端口插入需要打开时应该首先用CH341PtNameIsCH341判断是否为CH341端口是则记忆其端口号并打开后开始传输
如果是负数则说明有一个端口拔出判断其端口号用0减去该负数得端口号是否与记忆的已打开的端口号相同是则应该及时关闭
5. 当前已经打开的端口号应该保存为全局变量, 如果端口未打开或者被关闭,那么应用程序应该停止数据传输
6. 如果事先未用CH341PtNameIsCH341确定是否为CH341端口那么在端口已经打开后也可以调用CH341PtHandleIsCH341判断是否为CH341端口
*/
#ifdef __cplusplus
}
#endif
#endif // _CH341_PORT_H

Binary file not shown.

View File

@@ -0,0 +1,59 @@
unit CH341PTDLL;
interface
// 2005.07.28
//****************************************
//** Copyright (C) W.ch 1999-2005 **
//** Web: http://www.winchiphead.com **
//****************************************
//** DLL for USB interface chip CH341 **
//** C, VC5.0 **
//****************************************
//
// USB总线接口芯片CH341端口应用层接口库 V1.0
// 南京沁恒电子有限公司 作者: W.ch 2005.07
// CH341-Port-DLL V1.0
// 运行环境: Windows 98/ME, Windows 2000/XP
// support USB chip: CH341, CH341A
// USB => Serial, Parallel
//
const MAX_DEVICE_PATH_SIZE = 128 ; // 设备名称的最大字符数
MAX_DEVICE_ID_SIZE= 64 ; // 设备ID的最大字符数
Function CH341PtGetVersion( ):cardinal;stdcall; external 'CH341PT.DLL'; // 获得DLL版本号,返回版本号
Function CH341PtHandleIsCH341( // 检查已经打开的端口是否为CH341端口
iPortHandle:cardinal ):boolean;stdcall; external 'CH341PT.DLL'; // 指定已经打开的端口句柄
Function CH341PtNameIsCH341( // 检查指定名称的端口是否为CH341端口
iPortName:PCHAR ):boolean;stdcall; external 'CH341PT.DLL'; // 指定端口名称,例如"COM3","COM15"等,该端口必须未被占用(指未被其它程序打开)
type mPCH341PT_NOTIFY_ROUTINE=Procedure ( // 端口设备事件通知回调程序
iDevIndexAndEvent:integer );stdcall; // 端口设备序号和事件及当前状态(参考下行说明)
// iDevIndexAndEvent: 正数说明是设备插入事件/已经插入, 负数说明是设备拔出事件/已经拔出, 其绝对值是设备序号(1到255)
Function CH341PtSetDevNotify( // 设定端口设备事件通知程序
iDeviceID:PCHAR; // 可选参数,指向以\0终止的字符串,指定被监控的设备的ID或者不含序号的主名称,对于串口该参数必须为NULL或者"COM"
iNotifyRoutine:mPCH341PT_NOTIFY_ROUTINE):boolean;stdcall; external 'CH341PT.DLL'; // 指定端口设备事件回调程序,为NULL则取消事件通知,否则在检测到事件时调用该程序
{/* 即插即用设备的应用程序编程参考
1. 主程序启动默认是禁止数据传输的只有在确定有CH341端口可用并且打开端口后才进行数据传输
2. 调用CH341PtSetDevNotify设置插拔监视如果将来发生CH341端口的插拔事件DLL将会自动调用iNotifyRoutine所指定的子程序或者函数
3. 从端口1到端口255正常到20即可逐个调用CH341PtNameIsCH341确定是否为CH341端口如果返回是则记忆其端口号并打开后开始传输如果返回否则休息
4. 如果iNotifyRoutine收到事件通知那么可以在保存事件参数后通知主程序处理也可以在该子程序中处理
分析事件参数如果是正数则说明有一个端口插入需要打开时应该首先用CH341PtNameIsCH341判断是否为CH341端口是则记忆其端口号并打开后开始传输
如果是负数则说明有一个端口拔出判断其端口号用0减去该负数得端口号是否与记忆的已打开的端口号相同是则应该及时关闭
5. 当前已经打开的端口号应该保存为全局变量, 如果端口未打开或者被关闭,那么应用程序应该停止数据传输
6. 如果事先未用CH341PtNameIsCH341确定是否为CH341端口那么在端口已经打开后也可以调用CH341PtHandleIsCH341判断是否为CH341端口
*/}
implementation
end.

View File

@@ -0,0 +1,195 @@
CH341的串口方式支持WINDOWS 98/ME/2000/XP/Vista/Linux提供相关驱动程序
CH341的USB转串口支持大多数常用的串口监控及调试工具程序。
驱动安装方法:
1. 标准INF文件安装方法
WINDOWS提示找到新硬件指定驱动程序所在目录DRIVER自动安装驱动
如果WINDOWS没有提示找到新硬件那么在设备管理器的硬件列表中
选择带问号的USB设备更新驱动程序并指定目录。
2. 使用驱动程序安装工具
直接使用CH341SER.EXE安装包可以安装/升级/卸载驱动程序,
该方法更适用于最终用户。
CH341串口使用方法
CH341实现USB转串口在逻辑功能方面的使用方法与普通计算机串口相同。
与普通计算机串口的区别:
CH341提供的是仿真串口所以不支持串口本身的纯硬件操作例如I/O操作
普通计算机串口是静态设备而CH341串口是动态设备理论上随时会断开
CH341的附加功能下面有介绍读取外部串行EEPROM支持更高波特率。
提供“模块调试”工具,启动后将“类型”选择为“手工输入发送”,
打开串口后就可以用于CH341串口或者普通串口的输入输出监控及收发调试。
注意事项:
CH341串口是即插即用的USB设备正在使用CH341串口进行数据传输的过程中
不可以将其断开断开是指从USB插座中取出CH341或者关闭CH341的电源
也就是说必须在应用程序关闭该串口后CH341串口才可以从USB插座中拔出。
如果在应用程序使用CH341串口的过程中CH341串口设备从USB插座中断开
那么应用程序应该尽快关闭CH341串口并退出关闭及退出可能需要数秒时间
如果在CH341串口通讯过程中发生错误极有可能是CH341串口已经物理断开
所以在检测到错误后建议关闭CH341串口稍等两秒后再重新打开串口通讯。
采用设备事件通知的方法可以及时了解CH341串口设备的连接与断开
从而使串口应用程序能够及时打开和关闭CH341串口。
串口动态链接库CH341PT.DLL提供了API可以监视CH341串口插拔事件
可以搜索和识别CH341串口等具体需参考CH341PT.H文件。
如果通讯波特率较高建议设置较大的缓冲区尤其在WINDOWS 98/ME下
线程调度能力和USB实时性都比WINDOWS 2000/XP差如果串口接收缓冲区较小
那么在通讯波特率较高时,接收大量数据会导致串口缓冲区溢出而丢弃数据。
由于底层的USB是将多个字节组成数据包后安插到各个1mS帧中进行传输
所以有可能将串口收发的紧靠着的两个字节实际分割在两个USB数据包甚至
两个USB帧中在最坏情况下这两个字节在时间上有可能相隔1mS甚至2mS。
*******************************************************************************
如果需要速率控制流控制建议不要使用MODEM信号控制因为其效率较低
建议用CH341的TEN#和RDY#实现纯硬件的速率控制其中TEN#为输入RDY#为输出,
当TEN#输入为低电平时允许CH341从串口发送数据高电平时CH341将暂停发送数据
当RDY#输出为低电平时说明CH341可以接收串口数据高电平说明CH341正忙而不能接收。
如果计算机及单片机不忙或者波特率在115200bps以下时通常不需要速率控制
如果波特率再高或者计算机及单片机较忙才需要考虑采用TEN#和RDY#进行速率控制。
CH341用于串口时其硬件最简单时只需要三根线GNDTXDRXD
可以直接与单片机相连波特率支持从50bps到2Mbps例如MCS51单片机
CH341引脚 MCS51单片机引脚
GND <=> GND
TXD <=> RXD
RXD <=> TXD
TEN接GND
与单片机相连时通常将CH341的TEN#引脚直接接地总是允许CH341发送数据
如果预算单片机可能会来不及接收串口数据那么应该将TEN#连接到单片机的I/O引脚
当单片机不忙时由单片机将CH341的TEN#置为低电平允许CH341从串口发出数据
当单片机较忙时由单片机将CH341的TEN#置为高电平CH341将暂停从串口发出数据
CH341的TNOW引脚是收发状态可以用于半双工通讯的收发切换例如RS485的收发切换。
*******************************************************************************
如何识别CH341串口如何知道CH341的串口号COM?
在首次安装CH341串口驱动时CH341串口号由WINDOWS自动分配通常从COM3开始分配
安装完成后可以在设备管理中点其属性修改串口号。由于应用程序事先无法知道CH341的
实际串口号所以必须使用一些特殊方法识别出CH341串口然后才能使用。
在WINDOWS 98/ME系统下CH341串口号与当前硬件资源配置有关默认为自动分配资源
从而排在当前实际串口号之后可以在串口属性中选择CH341资源配置来指定串口号。
在WINDOWS 2000/XP系统下CH341串口号与当前所在USB端口有关由首次安装时分配
WINDOWS记忆各USB端口CH341的串口号可以在串口属性中通过高级选项指定串口号。
比较简单但很费事的方法是在首次安装CH341串口后用程序修改注册表或者点其属性
人为将CH341的串口号修改为COM5避开常用的COM1到COM4该方法简单但是有可能冲突。
常规的识别方法是采用软件查询方法:
尝试以串口名称逐个打开打开成功后通过该串口收发特殊字符串识别CH341串口
该方法是从“COM1”开始接着“COM2”逐个尝试打开串口。如果某个串口打开成功
那么在300bps波特率下向该串口发出特殊字符串“CH341Ser?”如果在约200毫秒之内
收到应答字符“W”那么该串口就是当前已经连接的CH341串口。软件设计方法是
从COM1开始依次打开每个串口如果打开串口失败则跳过串口不存在或正在使用
如果打开成功则设置该串口波特率为300然后向该串口写入ASCII字符串"$CH341Ser?"
注意大小写共10个字符一次写入如果该串口是普通串口那么通常没有任何返回
如果该串口是CH341串口那么应用程序将能接收到一个ASCII字符"W"以此识别CH341。
例如,用串口监控/调试工具软件演示:
将串口的波特率选择为300bps有些工具软件在选择波特率后必须重新打开串口
发出特征字符串为10个ASCII码数据 $CH341Ser?
发送成功后普通串口没有返回而CH341串口将返回1个ASCII码 W
建议使用CH341PT.DLL动态库应用程序可以直接调用DLL中相应的API识别CH341串口
识别速度快效率高。注意CH341PT.DLL在INF中定义为可选安装默认是安装的
*******************************************************************************
关于读取外部串行EEPROM
CH341可以外接I2C接口的器件例如常用的24系列串行非易失存储器EEPROM
支持24C01A24C0224C0424C0824C16等以及与之时序兼容的器件
24系列EEPROM既可以用于配置CH341也可以用于断电期间保存重要数据。
例如保存产品序列号等识别信息,应用程序可以读出用于识别产品功能等。
如果需要支持24C64、24C256、24C512以及更大容量的EEPROM请参考CH341评估板资料。
应用程序可以按串口方式读写CH341所连接的24系列EEPROM方法是
设置CH341串口波特率为300然后以4字节为一组的命令包写串口
命令包的首字节必须是@地址符对应的十六进制数为40H
命令包的第二字节是24系列EEPROM的设备地址位0是方向标志0为写1为读
命令包的第三字节是24系列EEPROM的单元地址
命令包的第四字节是准备写入24系列EEPROM的一个数据如果是读操作则指定为00H
如果是写操作那么命令发送成功就说明写成功对于EEPROM还要延时10mS才能下一个操作
如果是读操作,那么命令发送成功后,可以从串口接收到一个字节的数据,就是读出的数据
例如CH341连接24C0XA2=A1=A0=GND将仿真串口的波特率选择为300bps
可以用串口监控/调试工具软件演示:
1、发出命令包为4个十六进制数据 40 A1 01 00
将24C0X中地址为01H的数据读出可以从串口接收到一个字节的数据
2、发出命令包为4个十六进制数据 40 A0 2A 69
将一个字节的数据69H写到24C0X中地址为2AH的单元通常等待10mS后才能进行下一个操作
3、发出命令包为4个十六进制数据 40 A5 E7 00
将24C0X中地址为02E7H的数据读出可以从串口接收到一个字节的数据
注意只有24C08和24C16中有地址为02E7H的数据单元
*******************************************************************************
关于支持非标准波特率或者更高通讯波特率
对于一些非标准波特率或者常规方法无法设置的高速波持率CH341驱动程序提供特殊方法
应用程序可以按串口写数据的方式间接设置CH341的串口通讯波特率方法是
设置CH341串口波特率为300然后以ASCII码字符串的命令包写串口
命令包的首字节必须是#井字符对应的十六进制数为23H
命令包的中间为不超过7个数字表示的波特率例如字符串9600或者921600等
命令包的尾字节必须是_下划线对应的十六进制数为5FH
也就是说,将要设置的波特率以字符串的形式置于#字符和_字符之间作为一个命令包
在300bps下发送到CH341的串口那么将被CH341驱动程序解释为修改CH341的波特率
而不会被作为数据从串口真正发出,当该操作成功返回后,
CH341实际工作于指定的新波特率当然计算机系统及串口控件仍然以为是工作于300bps
如果需要再次以这种方法改变波特率那么首先要用常规方法将CH341的波特率置为300bps。
例如,用串口监控/调试工具软件演示:
1、将CH341串口的波特率选择为300bps有些工具软件在选择波特率后必须重新打开串口
发出字符串命令包为6个ASCII码数据 #9600_
发送成功后CH341将实际工作于9600bps
2、将CH341串口的波特率选择为300bps有些工具软件在选择波特率后必须重新打开串口
发出字符串命令包为8个ASCII码数据 #460800_
发送成功后CH341将实际工作于460800bps
3、将CH341串口的波特率选择为300bps有些工具软件在选择波特率后必须重新打开串口
发出字符串命令包为9个ASCII码数据 #1000000_
发送成功后CH341将实际工作于1000000bps
CH341串口支持50bps到2Mbps的波特率当应用程序请求CH341改变串口通讯波特率时
CH341驱动程序将波特率换算为波特率除数然后修改CH341芯片内部的波特率除数寄存器
所以设置CH341串口的通讯波特率实际上是设置CH341芯片内部的波特率除数寄存器
由于CH341内部的串口基准位时钟为48/8=6MHz或12MHz并且波特率除数只支持整数
所以在指定波特率时应该考虑实际换算误差在波特率大于19200bps时的计算方法是
X = 6000000 除以波特率后的值
Y = X 四舍五入后的值
误差 = ( Y - X ) / X
以下为CH341支持的常用波特率未注明的基准位时钟为6MHz未注明的误差小于0.16%
921600 (12MHz), 460800, 307200 (12MHz),
230400, 153600, 128000 (0.27%), 115200,
76800, 57600, 56000, 38400, 33600,
28800, 19200, 14400, 9600, 7200,
4800, 3600, 2400, 1800, 1200,
900, 600, 300, 150, 134.5,
110, 100, 75, 50, 2000000,
1500000, 1200000, 1000000, 750000, 500000,
375000, 250000, 200000, 187500, 100000,
93750, 75000, 50000, 25000, 10000
其它波特率只要误差小于2.5%CH341都可以支持计算误差时要考虑两端的误差之和。
但是为了可靠进行通讯建议不要使用误差大于1%的波特率。
*******************************************************************************
USB设备驱动程序与仿真串口驱动程序
CH341串口硬件的默认驱动程序是仿真串口驱动程序
即在计算机端多出一个串口并且在下位机端CH341芯片也使用串口通讯。
计算机端应用程序通过操作仿真串口实现USB数据传输其用法与普通串口相同。
如果不希望在计算机端仿真为串口那么可以使用USB设备驱动程序
即在计算机端多出一个USB设备但是在下位机端CH341芯片仍然使用串口通讯。
计算机端应用程序通过调用DLL提供的API实现USB数据传输,
其用法与CH341并口、CH372、CH375类似可以参考相关的应用程序的源程序。
CH341串口硬件的USB设备驱动与并口硬件的USB设备驱动CH341PAR完全相同
区别仅在于驱动安装信息文件INF中的PID不同参考CH341PAR的INF中的注释行说明
*******************************************************************************

Binary file not shown.