基于USB单片机CH558的虚拟串口应用实例

一、摘要

      CH55X系列内置USB全速主从控制器,可用于各种USB主机和设备应用。本文主要介绍CH55X虚拟串口的实现和相关应用。

二、总体概述

      在USB标准子类中,有一类称之为CDC类,可以实现虚拟串口通信的协议,而且由于大部分的操作系统(Windows和Linux)都带有支持CDC类的设备驱动程序,可以自动识别CDC类的设备,这样不仅免去了写专用设备驱动的负担,同时简化了设备驱动的安装。

(1)、CDC类简介

       USB的CDC类是USB通信设备类(Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。根据CDC类所针对通信设备的不同,CDC类又被分成以下不同的模型:USB传统纯电话业务(POTS)模型,USB ISDN模型和USB网络模型。其中,USB传统纯电话业务模型,有可分为直接线控制模型(Direct Line Control Model)、抽象控制模型(Abstract Control Model)和USB电话模型(USB Telephone Model)。

1.jpg

(2)、CH34X简介

CH34X在USB转串口方面应用非常广泛,市场份额也比较大,作为沁恒公司比较典型的USB接口芯片,市场的接受度和认可度都比较高。CH34X是一种类似于USB CDC类的厂商自定义设备类,通过USB虚拟串口的方式和操作系统进行数据交换。

(3)、CH55X模拟CH34X

随着手持设备日益普遍和一些应用或者测试条件的变化,部分应用希望将USB转串作为一个模块功能做到主控当中,这样既能节省硬件成本,PCB走线布板也精简很多,以下将主要介绍CH55X模拟CH34X的实现关键点。 

(4)、USB设备接入主机主要包括以下几个阶段

*设备插入并且主机供电;

*主机和设备USB标准命令交互阶段;

*主机和设备USB类命令交互阶段;

*主机和设备非控制端点数据通讯;

*设备移除;

A.检测设备连接

当设备没有插入时,集线器下游端口的D+和D-线上都是低电平,协议定义为SE0(Single-Ended 0)。

当有设备接入到集线器下游端口时,D+和D-有一个由低变高电平的状态阶段,这个状态阶段一般为2.5us。

当设备移除时,D+和D-同样也会有一个由高到底的状态阶段,同样持续约2.5us。

B.主机和设备标准命令交互阶段

       一般包括获取设备描述符、设置设备地址、获取配置描述符、获取语言描述符、设置设备接口;

C.主机和设备类命令交互阶段

       USB设备分类,USB-IF将具有相同/相似功能的设备归为一类,并制定和相关设备类规范,这样在操作系统端就无需为每种设备提供独立的设备驱动程序,同时也会简化上层驱动的处理。但是USB-IF制定的设备类规范并不能涵盖所有的电子设备,市场上也有很多非标准的USB设备,这是就要求厂商提供单独的客户端驱动程序。

       CH34X就是厂商自定义设备类型,所有需要安装驱动,驱动下载地址会在源码部分给出。

三、硬件设计

     模拟CH34X主要是软件工作,硬件上用CH551/CH552/CH553/CH558/CH559都可以实现,都可以使用芯片内置晶振,基本上无需其他外围器件。

       CH559/CH558是兼容MCS51的增强型E8051内核单片机,79%的指令是单字节单周期指令,内置60K Code Flash,6K+256B Ram。CH559 内嵌USB控制器和双USB收发器,支持 USB-Host 主机模式和 USB-Device 设备模式,支持 USB 2.0 全速 12Mbps 或者低速 1.5Mbps,USB 主机模式下可以通过双端口 Root-HUB 同时管理两个 USB 设备。支持最大 64 字节数据包,内置 FIFO,支持 DMA。

       CH554/CH553/CH552/CH551是兼容MCS51的增强型E8051内核单片机,79%的指令是单字节单周期指令,内置24MHz时钟源,内置1K+256B RAM,16KB iFlash-ROM。CH554提供丰富的接口资源,包括ADC模数转换、3组定时器和信号捕捉及PWM、双异步串口、SPI等。CH554提供6通道电容检测模块,互电容方式支持最多15个触摸按键。CH554内嵌全速USB控制器,支持USB HOST主机模式和USB DEVICE设备模式。

四、软件设计

      (1)、USB设备功能开启

      (2)、CH55X连接PC

2.jpg

3.jpg

4.jpg

此处列举部分USB类命令。


(3)、其他端点数据通讯

5.jpg

五、可拓展功能

CH55X模拟CH34X,主机安装驱动后可以直接通过串口调试工具进行数据收发的演示,可以拓展功能如下:

      A.CH55X同时可以扩展并口、SPI、串口、GPIO、PWM、定时器等接口;

      B.提供的安卓APP方便与Android手持终端的数据交互;

六、应用场合

      汽车电子、手机周边、游戏产品,刷卡器,智能家居等。

七、源码

icon_rar.gifUSB模拟串口.rar

请问:CH552的头文件可以用CH554.h吗?还有,CH552有没有虚拟串口例程?


哪位大佬能否注释一下下面的USBCDC配置值,各个配置值表示的意义?谢谢!

UINT8C DevDesc[18]={
0x12,//
0x01,//
0x10,//
0x01,//
0xff,//
0x00,//
0x02,//
0x08,                   //设备描述符
0x86,//
0x1a,//
0x23,//
0x55,//
0x04,//
0x03,//
0x00,//
0x00,//
0x00,//
0x01//
};

UINT8C CfgDesc[39]={
0x09,//
0x02,//
0x27,//
0x00,//
0x01,//
0x01,//
0x00,//
0x80,//
0xf0, //配置描述符,接口描述符,端点描述符
0x09,//
0x04,//
0x00,//
0x00,//
0x03,//
0xff,//
0x01,//
0x02,//
0x00,  //     
0x07,//
0x05,//
0x82,//
0x02,//
0x20,//
0x00,//
0x00,//批量上传端点
0x07,0x05,0x02,0x02,0x20,0x00,0x00,//批量下传端点      
0x07,0x05,0x81,0x03,0x08,0x00,0x01 //中断上传端点
};                      

UINT8C DataBuf[26]={
0x30,0x00,//
0xc3,0x00,//
0xff,0xec,//
0x9f,0xec,//
0xff,0xec,//
0xdf,0xec,//
0xdf,0xec,//
0xdf,0xec,//
0x9f,0xec,//
0x9f,0xec,//
0x9f,0xec,//
0x9f,0xec,//
0xff,0xec//
};



您好

可以参考该链接:https://www.wch.cn/bbs/thread-65023-1.html 

例程13


那有没有CH552的HID+CDC例程?




您好,请将公司信息和项目应用发至邮箱syl@wch.cn,我将提供您demo。



我看CDC例程中的串口波特率是固定的,请问如何修改为波特率自适应的?


下载了CH552的HID+CDC例程中的固件,CDC串口号在电脑中始终能认,但只能第一次加载驱动时能正常通讯,重新拔插后,无法通讯,电脑系统是6位win7,芯片是CH552T, CDC驱动用的是 https://www.wch.cn/bbs/thread-84547-1.html 这个网页上的驱动,用WCH-Link-SERIAL也一样。不知是什么原因。


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