找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9155|回复: 1
打印 上一主题 下一主题
收起左侧

USB双虚拟串口,全双工收发!

[复制链接]
跳转到指定楼层
楼主
ID:75926 发表于 2015-4-4 01:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
背景资料
众所周知,国内开发学习板80%以上的市场,已被意法半导体占领,铺天盖地的中文资料,众多新生力量
的加入,使意法半导体的DSC芯片逆袭成为众多高校电子信息工程的必修科目。事实上,NXP等众多厂家
芯片的实力更强,然而意法半导体在价格上以绝对优势占领了市场,尘埃落定,其它IC厂家只剩眼红而已。

桂林电子科技大学,主要使用NXP的Cortex-M3,北航各家都有,主要是ST的,清华大学2014年开始
布局ST公司的芯片研究,同时也不放弃50MHz以下的Cortex-M0,江苏的大学主要研究其它厂商的
Cortex-M4。现在随随便便一个电子专业的毕业生,都对Cortex-M3芯片了如指掌。

一、USB Serial tools 软件简介
USB Serial tools 是本人于2012-2013年业余制作的开发调试工具软件包,通过注册WINDOWS消息通知,
具备了USB虚拟串口设备插拔检测的能力,不同于传统的调试工具,该软件还可以让技术开发人员便捷地
查看USB虚拟串口设备的生产厂商信息。

二、USB双虚拟串口简介
意法半导体官方在2007-2013年,在多个Cortex-M3系列上实现了各种USB设备,其中包含 CDC 设备,即
USB虚拟串口,经过多年数个版本的更新,意法半导体的USB CDC例程仍然存在很多不足之处,和一些
BUG,本人参考了国外大牛的基本通讯例程,和意法半导体最新的4.0版本CDC例程,经过大约1个星期
断断续续的改进,终于实现了USB双虚拟串口,测试硬件平台为大虾开发板
(STM32F103VCT6核心板),软件平台为MDK-ARM 4.74。

国外大牛实现的双虚拟串口,使用自己编写的驱动文件,没有经过微软数字签名,而且收发通讯只做演示,
并没有设置任何缓冲,不能作为产品。本人在前人的基础上修改而成的USB双虚拟串口,驱动文件在ST
官方inf文件的基础上修改,能通过微软数字签名。

USB Serial tools和通过微软数字签名认证的USB双虚拟串口这一套组合产品

USB Serial tools软件正准备申请软件著作权专利。

三、USB双虚拟串口的测试
利用USB Serial tools软件对USB双虚拟串口的部分测试,如图1-1所示。


图1-1 USB双虚拟串口全双工收发压力测试



图1-2  USB Serial Tools对USB双虚拟串口设备的识别信息


图1-3   WIN7-X64对 USB双虚拟串口的识别信息(驱动程序通过微软数字签名)



图1-4  专业工具Bus Hound对USB双虚拟串口通讯过程的监视情况


Bus Hound对虚拟串口(COM16)的监视及说明:


图1-5  64字节数据包循环发送测试(10次循环)
备注:
1. 发送方为虚拟串口COM15,发送周期: 30毫秒 数据包长度: 64字节
2. 之所以测试64字节,是因为USB 2.0 Full Speed (USB1.1)通讯数据包最大只有64字节;
    数据包小于64字节时,Windows知道这个包收完就没有了,会马上读取;
   数据包等于64字节时,Windows不知道后面还有没有发完,要求USB虚拟串口设备再发一个空包,告诉它数据包结束了。


图1-5  129字节数据包循环发送测试2(5次循环2Mbps)


图1-5  129字节数据包循环发送测试1(5次循环2Mbps)
备注:
1.Windows驱动每次都读到129字节,但实际的USB传输还是按照3次传输,一般是(64+64+1)。
2.注意这里测试波特率提高到1-2Mbps是为了减少数据传输时间。
   串口波特率不能提高到1Mbps以上,主要是受到RS485物理层收发芯片及高速光藕的价格影响,另外串口
  速度高,通讯距离也收到限制,常规应用串口波特率基本都在500kbps以内。

四、USB CDC设备可靠性的决定性因素

  USB 双虚拟串口属于USB复合设备中的其中一种,也成为双CDC通讯设备。
  USB CDC设备可靠性,取决于软硬件系统的整体设计。不管是X893的inf还是stmcdc.inf,
  实际上都是调用微软的驱动文件usbser.sys,usbser.sys不会出现问题,所以CDC设备的
  可靠性就取决于上位机上层软件和下位机的整体设计水平。
  上位机有多种CDC设备的工具软件,可以相互取代,因此下位机底层驱动软件的鲁棒性及
   硬件的可靠性设计就显得尤为重要(这也是为什么我花很多时间去测试的原因)。

  
   硬件方面,USB的TVS保护和布线,由于时钟信号只有12MHz,处理比较简单。

   软件方面,主要是看设计者对通信的各种情况考虑的是否周全,是否会有bug。
   比如ST公司的工程师参考了中国设计者的代码,但没有理解的很深刻,将63字节
   的缓冲定义改为64字节,但在数据包刚好是64字节时,未添加空字节包确认,这个bug至今未修改。

   如无人值守的场合,可以利用USB双虚拟串口的其中之一,提供一个周期性的信号,
   利用STM32或外部独立的芯片,监视这个周期性信号是否存在,从而通知STM32F103
   "移除设备",延时一段时间后再恢复工作。当然还需上位机的配合,上位机必须要
   具备USB设备移除和插入的检测功能,防止自己崩溃,才能恢复正常的工作。

   一般场合,USB设备出现故障的概率很低,不需要另外的监控信号。








分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:272158 发表于 2021-4-14 09:19 | 只看该作者
上例程看看效果,样品板卡有吗???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表