[原创]巧用CH341评估板测试并口接收速率

  总体而言,在沁恒公司各类USB接口芯片中,CH341提供的技术资料应该算是比较全面的一种。但美中不足的缺陷在于并没有提供并口数据传输的监测手段,就是说你完全无法知道在整体的传输过程中,是否可能存在数据丢失的情况,从而采取有效的办法弥补这些损失。

  在一般的应用中,你或者完全不必考虑这些问题可能造成的影响,但在例如等速率采集检测随时、接收无固定变化规律的数据时就必须考虑这些影响,也正因为自己有这种需要才着手进行分析研究,且得出正确的结论。不敢“藏私”,在这里贴出来供大家参考。

  首先建议你购买一块CH341评估板,百多元的价格对于你正在进行的事业,甚至可能形成的定型产品而言实在是微不足道的消费。

  把你的机器和评估板连接好之后打开配套的软件,选择“EPP并口”或“MEM并口”,在“长度”的文本框输入不大于(十六进制)1000H的数值,点击“Read”按扭,在下边的“数据”框中就会充满包含空格的十六进制数据,因为没有连接实际的设备,你能够看到的最多不过那些开关所确定的、完全相同的数字。

  事实上,单纯只依靠这个评估板完全不具备上述检测的能力:你既不可能知道采集数据的速度、更无法确定这些速度的连贯性如何。

  其实,你只要稍微懂得一点硬件的常识就该知道一个最简单的解决办法:只要一个连续的计数器连通芯片的数据口就OK了!

  因为评估板提供了对芯片所有功能的检测和评估,虽然价格不是太高也不必因此而破坏原始的结构来适应你的需求。其实你只要临时拔除U3,切断那些开关组合与芯片的联系就足够了,输入信号建议接入本来为打印口提供的插座P2,具体的做法是找一个26口的插头(随板附带?)连接左边那一列从第二脚开始连续的八个引脚(其实板上标明了DO到D7的)和一个地线引脚(右列从上边数第五个以下全是),这个插座因为本来是配套打印口的所以就没充分利用本来可以空余的一个脚,如果需要VCC你就只好从其他地方引入了。

  我选择计数器的速率是1M,就是说每微秒加一个数,同样的选择你会看到差不多是每五个数值中就会有一个重复一次,就是说芯片正常采集的速度大致为0.8微秒。

  你也不必高兴得太早,这并不意味着每秒可以采集1M以上的数据,因为除了USB协议本身在每毫秒一帧的信号中必然的间隔之外,这些显示的数据也并非一直连贯的,而是只存在每32个数值的连贯性,而在这些分组之间就有比较大的时间间隔,显而易见地可以证明芯片存在32字节的内部缓冲区(虽然好象在说明文档中遗漏了这个数据,但至少在论坛上有过公开的说明)。

  我取最大数值1000H(4096个)连续进行,实际得到的结果是这些间隔少则三、五毫秒,多达60毫秒以上不等。你可以自己验证一下,也许因为条件不同大家的结论有些差异,但相信不会太离谱。当你得到最终结论之后可以考虑自己的产品是否能够忽略这些间隔了。


  事实上一般很少恰好手头上就有八位(或以上)的计数器,专门做一个来配合这种实验还真不如用单片机编制一个小程序来实现。因为有不局限于4096这样小量连续监测的需求,而八位计数最大就只有256个,如果仅仅是这样简单的循环,按USB每毫秒一帧的结构想知道是否有超过1/4帧(甚至跳过一帧)的间隔,要么降低计数速度为5微秒或者更低,要么还要有更高位的计数输入。我选择的是后者。

  呵呵,虽然这种简单的计数实在属于“小儿科”的范畴,连这点小问题也要费什么周折的人物估计也不会到这里来寻求USB口的应用知识,因为“自我感觉良好”还是不惜“班门弄斧”之嫌附带上来,也不说什么“请指教”之类的套话,至少仅用20字节完成的程序还占一个“精简”的优势哈。

              一个只有20字节的连续计数小程序

    ORG 0000H     AJMP CU

    ORG 0030H CU:  MOV A, #80H    ;1     MOV P1, A     ;1     NOP        ;1 CU1:  MOV P1, #7FH   ;2     DJNZ P1, $    ;2     INC A       ;1     MOV P1, A     ;1     JNZ CU1      ;2     SJMP CU      ;2 END

  选用89C2051,配套24M晶振,计数频率恰好为1M。


我也想买一个评估板做进一步的开发工作,但,现在这个CH341就离题了(和我的个人认为有关),我在做并口试验时,得不到想要的端口资源 ,郁闷中........


  请参考我刚刚发表的帖子《[原创]CH341达到“理想”速度完全可以实现!》


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