[原创]应用CH340的心得

  由于串口传输的速度仅及并口的1/10,所以在前应用单片机编程的时候,特别是需要与微机接口的情况,通常是采取排斥的态度。你很容易想象得出在微机串口速度最高只有9600那个年代,每秒钟只有1K字节的速度真的是什么事情也干不了的,而使用打印口来传递信息却能够很轻易地做到几百K的传输,就不难理解我为什么要这样做的了。

  遗憾的是盖茈的微软公司偏偏把硬件借口与软件隔离开来!在98以前还允许与DOS系统并存,虽然不够方便却还勉强能用;从2000到XP就完全截断了这种联系,对本人造成的结果是十年不去碰微机与单片机的联络这个题目!即使偶然必须用到,也因只能让用户选择使用WIN98操作系统,根本就找不到市场前景。

  还好柳暗花明现在又有了被操作系统支持的USB接口,重新给予微机与外设联系的通路,我也恰好因接到相关的任务开始了USB接口的应用。当然还是从传输速度更理想的并行口开始,同时因为搜索到CH341的相关信息找到了这里。

  因为当时那个任务要求的传输速率至少在1M以上,所以只好另外选择直接利用U盘存贮的CH375(恰好因要求1M的存贮量而放弃直接使用RAM芯片组合的方案)。遗憾的是因为需要600字节以上的RAM配合,所以改选比较灵活的CH374。结果是包括CH372和CH340,手中的样品几乎函盖了公司所有USB产品的类型。

  那个任务太专业其实根本不会存在广泛的市场,但其作用却非常重要,用户在找到我之前曾花费2800元的天价买来一台周立功公司的逻辑分析仪,试图自行解决问题,可见即使为这一套设备专门制版加工PCB板也在所不惜的哈。

  其实,我之所以肯接这“烫手的山芋”,目的不仅仅在于那点微薄的直接报酬,而在于正好完成一直想做而没列入议事日程的利用USB接口传输数据的课题。我需要的传输速度大约在每秒100K那个档次。


  因为自己是那种典型的“土八路”,自然提问题的方式与正宗流派的专业人士有不同,所以在许多时候得不到预期的技术帮助,这也难怪公司的技术人员,如果大家都象我这样什么问题都要得到圆满的答复,恐怕公司真的要为此配备更多的技术人员来专职做此类工作了哈。

  许多事情本来是被逼出来的,因为需要而又没有捷径可找就只好自己多学习一点。具体的转变过程就不多罗嗦了,反正出于成本和足够应用的角度考虑,最终选择了价格更低廉的CH340,这就又回到本来极为排斥的串口通讯,当然与这种芯片竟然可以达到2M这样的高速是有着直接关系的。


  角度不同,思维的方式当然会有所不同。公司的技术人员因为要面面俱到地考虑各种环境,有时候对产品性能的宣传反倒不是很到位,去年曾经看到技术人员回复一个有关串口速度疑问的帖子,就对数据传输的连贯性做出了对我应用范围不够有利的解释,所以直到通过对样片直接测试得出结论之后才正式确定了自己的选择。

  其实许多应用是可以在独占USB接口的环境下进行的,所以传输被隔断1mS的情况实际不会发生,虽然公司人员出于对用户认真负责的角度考虑,宁肯客气一点地介绍“只是模拟而非完全相同”这样的答复,事实上在许多应用范围完全不必考虑这种差异。我所做的第一个实验竟然就是应用STC单片机提供的编程工具,直接使用自己组织的简单电路写入芯片,结果完全成功且“百试百灵”(当然不过借用成语而非真正去做百次无用功哈)。

  虽然在半年前就有下载,却在一个月前才从技术人员回复别人疑问的帖子中看到,原来那个图标上标明是CH375的串口测试工具竟然也通用!这不得不说是公司技术人员的疏漏。不管怎么样反正对我可是派上了大用场,直接用来帮朋友破解了一套应用软件的软件狗。

  既然知道芯片可以达到2M的速率,工具却偏偏只有921K左右的上限!虽然当时正好够用且也能满足我已经定型了的产品需求,仍然希望能够得到全速的应用。所以当时曾提出过修改工具的建议,当然从自己应用的需求也是想自己省点事,在今后可能需要时直接提供用户配套使用就是。


  修改工具当然需要一些时间,但却对自己要求提供直接调用API函数的程序没有得到支持,至少在当时感觉非常失望,虽然也理解技术人员坚持只提供直接针对芯片的技术服务这个原则。没有捷径就只好自己去开路,其实现在想来虽然不得不去重新学习一些知识,但因此把借用工具的办法变成程序的内涵,对将来提供给用户的产品当然更为有利。

  如果仅仅如此,还不至于劳心费神打字发表这个心得,关键在于通过这个被逼出来的简单交换,就有意外的收获:曾经看到一个问题和回复中提到要得到高速和非常规的波特率,必须在300这个低速下直接对芯片发出指令来改变,当时的原因在于测试工具中不包含我的需求,所以改变之后就无法实现我的实际需求,但开始进行的初步实验恰好落入工具提供的范围,这就导致我在改变波特率后转入正常选择,和直接在低速下传输两种情况下实现这种转换,结果是同样的效果。这就说明了一个问题:可能公司提供的API能够直接被操作系统执行转变的指令而不必自己去输入改变。当然这种想法最终得到证实是在我学会使用那个MSComm控件之后。

  其实说起来这个结论非常简单:你只要在控件直接的属性设计中修改为自己的需求就好,完全不必自己去劳神对芯片发出相关的指令。至少在VB下直接改变为1.5M和750000这两个非标准速率,是真正的“百试百灵”而非前所述那样借用成语的。


  发这篇心得的意义,在于起到一个“抛砖引玉”的效果,期望大家在这里踊跃提供自己在芯片应用过程中的实践经验,大家互相学习一下……


只有登录才能回复,可以选择微信账号登录