README.TXT
上传用户:xnx168
上传日期:2013-01-18
资源大小:97k
文件大小:10k
源码类别:

系统设计方案

开发平台:

Visual C++

  1. CH341的串口方式支持WINDOWS 98/ME/2000/XP,提供相关驱动程序,
  2. CH341的USB转串口支持大多数常用的串口监控及调试工具程序。
  3. 驱动安装方法:
  4. 1. 标准INF文件安装方法
  5.     WINDOWS提示找到新硬件,指定驱动程序所在目录DRIVER,自动安装驱动,
  6.     如果WINDOWS没有提示找到新硬件,那么在设备管理器的硬件列表中,
  7.     选择带问号的USB设备,更新驱动程序并指定目录。
  8. 2. 使用驱动程序安装工具
  9.     直接使用CH341SER.EXE安装包,可以安装/升级/卸载驱动程序,
  10.     该方法更适用于最终用户。
  11. CH341串口使用方法:
  12.     CH341实现USB转串口,在逻辑功能方面的使用方法与普通计算机串口相同。
  13.     与普通计算机串口的区别:
  14.       CH341提供的是仿真串口,所以不支持串口本身的纯硬件操作,例如I/O操作,
  15.       普通计算机串口是静态设备,而CH341串口是动态设备,理论上随时会断开,
  16.       CH341的附加功能(下面有介绍):读取外部串行EEPROM,支持更高波特率。
  17.     提供“模块调试”工具,启动后将“类型”选择为“手工输入发送”,
  18.       打开串口后就可以用于CH341串口或者普通串口的输入输出监控及收发调试。
  19. 注意事项:
  20.     CH341串口是即插即用的USB设备,正在使用CH341串口进行数据传输的过程中,
  21.     不可以将其断开(断开是指从USB插座中取出CH341或者关闭CH341的电源),
  22.     也就是说,必须在应用程序关闭该串口后,CH341串口才可以从USB插座中拔出。
  23.     如果在应用程序使用CH341串口的过程中,CH341串口设备从USB插座中断开,
  24.     那么应用程序应该尽快关闭CH341串口并退出(关闭及退出可能需要数秒时间)。
  25.     如果在CH341串口通讯过程中发生错误,极有可能是CH341串口已经物理断开,
  26.     所以在检测到错误后建议关闭CH341串口,稍等两秒后再重新打开串口通讯。
  27.     采用设备事件通知的方法可以及时了解CH341串口设备的连接与断开,
  28.     从而使串口应用程序能够及时打开和关闭CH341串口。
  29.     串口动态链接库CH341PT.DLL提供了API,可以监视CH341串口插拔事件,
  30.     可以搜索和识别CH341串口等,具体需参考CH341PT.H文件。
  31.     如果通讯波特率较高,建议设置较大的缓冲区,尤其在WINDOWS 98/ME下,
  32.     线程调度能力和USB实时性都比WINDOWS 2000/XP差,如果串口接收缓冲区较小,
  33.     那么在通讯波特率较高时,接收大量数据会导致串口缓冲区溢出而丢弃数据。
  34. *******************************************************************************
  35. CH341外围元器件说明:
  36. 振荡部分: 一个12MHz的晶体,两个15pF的振荡电容,引线尽量简短,
  37. 电源退耦: 一个0.1uF的电源退耦电容104,接于VCC与GND之间,非常必要,
  38. 内部电源: 一个0.01uF的电容103,接于V3引脚与GND之间,可选,用于降低EMI,
  39. 上电复位: 一个0.47uF的电容474,接于RSTI引脚与VCC之间,建议,用于可靠复位。
  40. 如果需要速率控制(流控制),建议不要使用MODEM信号控制,因为其效率较低,
  41. 建议用CH341的TEN#和RDY#实现纯硬件的速率控制,其中TEN#为输入,RDY#为输出,
  42. 当TEN#输入为低电平时允许CH341从串口发送数据,高电平时CH341将暂停发送数据,
  43. 当RDY#输出为低电平时说明CH341可以接收串口数据,高电平说明CH341正忙而不能接收。
  44. 如果计算机及单片机不忙,或者波特率在115200bps以下时,通常不需要速率控制,
  45. 如果波特率再高或者计算机及单片机较忙,才需要考虑采用TEN#和RDY#进行速率控制。
  46. CH341用于串口时,其硬件最简单时只需要三根线:GND,TXD,RXD,
  47. 可以直接与单片机相连,波特率支持从50bps到2Mbps,例如MCS51单片机:
  48.    CH341引脚        MCS51单片机引脚
  49.       GND     <=>       GND
  50.       TXD     <=>       RXD
  51.       RXD     <=>       TXD
  52.       TEN接GND
  53. 与单片机相连时,通常将CH341的TEN#引脚直接接地,总是允许CH341发送数据,
  54. 如果预算单片机可能会来不及接收串口数据,那么应该将TEN#连接到单片机的I/O引脚,
  55. 当单片机不忙时,由单片机将CH341的TEN#置为低电平,允许CH341从串口发出数据,
  56. 当单片机较忙时,由单片机将CH341的TEN#置为高电平,CH341将暂停从串口发出数据
  57. CH341的TNOW引脚是收发状态,可以用于半双工通讯的收发切换,例如RS485的收发切换。
  58. *******************************************************************************
  59. 如何识别CH341串口,如何知道CH341的串口号COM?
  60. 在首次安装CH341串口驱动时,CH341串口号由WINDOWS自动分配(通常从COM3开始分配),
  61. 安装完成后可以在设备管理中点其属性修改串口号。由于应用程序事先无法知道CH341的
  62. 实际串口号,所以必须使用一些特殊方法识别出CH341串口,然后才能使用。
  63. 在WINDOWS 98/ME系统下,CH341串口号与当前硬件资源配置有关,默认为自动分配资源,
  64.   从而排在当前实际串口号之后,可以在串口属性中选择CH341资源配置来指定串口号。
  65. 在WINDOWS 2000/XP系统下,CH341串口号与当前所在USB端口有关,由首次安装时分配,
  66.   WINDOWS记忆各USB端口CH341的串口号,可以在串口属性中通过高级选项指定串口号。
  67. 比较简单但很费事的方法是,在首次安装CH341串口后,用程序修改注册表或者点其属性,
  68. 人为将CH341的串口号修改为COM5,避开常用的COM1到COM4,该方法简单但是有可能冲突。
  69. 建议的识别方法是采用软件查询方法:
  70.    尝试以串口名称逐个打开,打开成功后通过该串口收发特殊字符串识别CH341串口,
  71.    该方法是从“COM1”开始,接着“COM2”逐个尝试打开串口。如果某个串口打开成功,
  72.    那么在300bps波特率下向该串口发出特殊字符串“CH341Ser?”,如果在约200毫秒之内
  73.    收到应答字符“W”,那么该串口就是当前已经连接的CH341串口。软件设计方法是:
  74.    从COM1开始依次打开每个串口,如果打开串口失败则跳过(串口不存在或正在使用),
  75.    如果打开成功则设置该串口波特率为300,然后向该串口写入ASCII字符串"$CH341Ser?",
  76.    注意大小写,共10个字符一次写入,如果该串口是普通串口,那么通常没有任何返回,
  77.    如果该串口是CH341串口,那么应用程序将能接收到一个ASCII字符"W",以此识别CH341。
  78.    例如,用串口监控/调试工具软件演示:
  79.      将串口的波特率选择为300bps(有些工具软件在选择波特率后必须重新打开串口),
  80.      发出特征字符串,为10个ASCII码数据: $CH341Ser?
  81.      发送成功后,普通串口没有返回,而CH341串口将返回1个ASCII码: W
  82. *******************************************************************************
  83. 关于读取外部串行EEPROM
  84. CH341可以外接I2C接口的器件,例如常用的24系列串行非易失存储器EEPROM,
  85. 支持24C01A,24C02,24C04,24C08,24C16等,以及与之时序兼容的器件,
  86. 24系列EEPROM既可以用于配置CH341,也可以用于断电期间保存重要数据。
  87. 例如保存产品序列号等识别信息,应用程序可以读出用于识别产品功能等。
  88. 应用程序可以按串口方式读写CH341所连接的24系列EEPROM,方法是:
  89.   设置CH341串口波特率为300,然后以4字节为一组的命令包写串口,
  90.   命令包的首字节必须是@,地址符,对应的十六进制数为40H,
  91.   命令包的第二字节是24系列EEPROM的设备地址,位0是方向标志,0为写,1为读,
  92.   命令包的第三字节是24系列EEPROM的单元地址,
  93.   命令包的第四字节是准备写入24系列EEPROM的一个数据,如果是读操作则指定为00H,
  94.   如果是写操作,那么命令发送成功就说明写成功,对于EEPROM还要延时10mS才能下一个操作,
  95.   如果是读操作,那么命令发送成功后,可以从串口接收到一个字节的数据,就是读出的数据
  96. 例如,CH341连接24C0X,A2=A1=A0=GND,将仿真串口的波特率选择为300bps,
  97. 可以用串口监控/调试工具软件演示:
  98. 1、发出命令包,为4个十六进制数据: 40 A1 01 00
  99.    将24C0X中地址为01H的数据读出,可以从串口接收到一个字节的数据
  100. 2、发出命令包,为4个十六进制数据: 40 A0 2A 69
  101.    将一个字节的数据69H写到24C0X中地址为2AH的单元,通常等待10mS后才能进行下一个操作
  102. 3、发出命令包,为4个十六进制数据: 40 A5 E7 00
  103.    将24C0X中地址为02E7H的数据读出,可以从串口接收到一个字节的数据
  104.    注意,只有24C08和24C16中有地址为02E7H的数据单元
  105. *******************************************************************************
  106. 关于支持非标准波特率或者更高通讯波特率
  107. 对于一些非标准波特率或者常规方法无法设置的高速波持率,CH341驱动程序提供特殊方法,
  108. 应用程序可以按串口写数据的方式间接设置CH341的串口通讯波特率,方法是:
  109.   设置CH341串口波特率为300,然后以ASCII码字符串的命令包写串口,
  110.   命令包的首字节必须是#,井字符,对应的十六进制数为23H,
  111.   命令包的中间为不超过7个数字表示的波特率,例如字符串9600或者921600等,
  112.   命令包的尾字节必须是_,下划线,对应的十六进制数为5FH,
  113.   也就是说,将要设置的波特率以字符串的形式置于#字符和_字符之间,作为一个命令包,
  114.   在300bps下发送到CH341的串口,那么将被CH341驱动程序解释为修改CH341的波特率,
  115.   而不会被作为数据从串口真正发出,当该操作成功返回后,
  116.   CH341实际工作于指定的新波特率,当然,计算机系统及串口控件仍然以为是工作于300bps,
  117.   如果需要再次以这种方法改变波特率,那么首先要用常规方法将CH341的波特率置为300bps。
  118. 例如,用串口监控/调试工具软件演示:
  119. 1、将CH341串口的波特率选择为300bps(有些工具软件在选择波特率后必须重新打开串口),
  120.    发出字符串命令包,为6个ASCII码数据: #9600_
  121.    发送成功后,CH341将实际工作于9600bps
  122. 2、将CH341串口的波特率选择为300bps(有些工具软件在选择波特率后必须重新打开串口),
  123.    发出字符串命令包,为8个ASCII码数据: #460800_
  124.    发送成功后,CH341将实际工作于460800bps
  125. 3、将CH341串口的波特率选择为300bps(有些工具软件在选择波特率后必须重新打开串口),
  126.    发出字符串命令包,为9个ASCII码数据: #1000000_
  127.    发送成功后,CH341将实际工作于1000000bps
  128. CH341串口支持50bps到2Mbps的波特率,当应用程序请求CH341改变串口通讯波特率时,
  129. CH341驱动程序将波特率换算为波特率除数,然后修改CH341芯片内部的波特率除数寄存器,
  130. 所以设置CH341串口的通讯波特率实际上是设置CH341芯片内部的波特率除数寄存器,
  131. 由于CH341内部的串口基准位时钟为48/8=6MHz(或12MHz),并且波特率除数只支持整数,
  132. 所以在指定波特率时,应该考虑实际换算误差,在波特率大于19200bps时的计算方法是:
  133.     X = 6000000 除以波特率后的值
  134.     Y = X 四舍五入后的值
  135.     误差 = ( Y - X ) / X
  136. 以下为CH341支持的常用波特率,未注明的基准位时钟为6MHz,未注明的误差小于0.16%
  137.     921600 (12MHz),   460800,   307200 (12MHz),
  138.     230400,  153600,  128000 (0.27%),    115200,
  139.     76800,   57600,   56000,    38400,   33600,
  140.     28800,   19200,   14400,    9600,    7200,
  141.     4800,    3600,    2400,     1800,    1200,
  142.     900,     600,     300,      150,     134.5,
  143.     110,     100,     75,       50,      2000000,
  144.     1500000, 1200000, 1000000,  750000,  500000,
  145.     375000,  250000,  200000,   187500,  100000,
  146.     93750,   75000,   50000,    25000,   10000
  147. 其它波特率只要误差小于2.5%,CH341都可以支持,计算误差时要考虑两端的误差之和。
  148. 但是为了可靠进行通讯,建议不要使用误差大于1%的波特率。
  149. *******************************************************************************
  150. USB设备驱动程序与仿真串口驱动程序
  151. CH341串口硬件的默认驱动程序是仿真串口驱动程序,
  152. 即在计算机端多出一个串口,并且在下位机端CH341芯片也使用串口通讯。
  153. 计算机端应用程序通过操作仿真串口实现USB数据传输,其用法与普通串口相同。
  154. 如果不希望在计算机端仿真为串口,那么可以使用USB设备驱动程序,
  155. 即在计算机端多出一个USB设备,但是在下位机端CH341芯片仍然使用串口通讯。
  156. 计算机端应用程序通过调用DLL提供的API实现USB数据传输,
  157. 其用法与CH341并口、CH372、CH375类似,可以参考相关的应用程序的源程序。
  158. CH341串口硬件的USB设备驱动与并口硬件的USB设备驱动CH341PAR完全相同,
  159. 区别仅在于驱动安装信息文件INF中的PID不同(参考CH341PAR的INF中的注释行说明)。
  160. *******************************************************************************