CDC使用参考
1. 概述¶
用户在无法使用网络的同时又有一些通信上的需求,可以利用usb接口,将其枚举为串口设备。usb串口没有波特率、校验位和停止位的概念,无需进行这些参数的设置。
USB CDC应用Demo路径:rtk/proj/sc/application/usb_gadget_app/class/src/cdc_app.c
USB CDC驱动路径:rtk/proj/sc/customer/usb_gadget/class/src/cdc_acm.c
2. 配置¶
2.1. mak配置¶
在相应的product config中修改mak文件的配置,要保证CONFIG_USB_GADGET_SUPPORT = TRUE
以及CONFIG_USB_GADGET_SSTAR_SUPPORT = TRUE
基础USB编译打开。
启用选项CONFIG_USB_GADGET_CDC_SUPPORT = TRUE
。
如果需要一启动便初始化CDC,需要配置CONFIG_USB_GADGET_APP_CUR_CLASS = "4"
。
注意mak修改完成后需要make clean
下再make
。
2.2. 调试¶
-
打开设备管理器,端口列表下新增串行设备
-
使用串口助手或者xshell打开对应的串口号,波特率及校验位选择默认值即可
-
命令行输入:cdc_send_test
-
使用串口助手打开,则显示接受的数据如下:
使用Xshell打开串口,则显示接受数据如下:
-
串口助手发送数据,rtos接受数据并显示其ASCII码值
使用xshell打开串口,则发送数据时直接在窗口输入1(xshell不显示输入的数据),rtos接受数据并显示其ASCII码值
2.3. API 接口¶
code所在路径:
rtk/proj/sc/application/common/inc/st_cdc_acm.h
kernel/rtk/proj/sc/application/common/src/st_cdc_acm.c
-
CDC串口的初始化及枚举过程和反初始化需要调用如下两个接口
MI_BOOL ST_Cdc_Acm_Init(struct cdc_acm_user_ops *ops);
MI_BOOL ST_Cdc_Acm_DeInit(void);
-
发送数据,其中buf指向要发送的缓存,size为发送数据长度,单位Byte
MI_BOOL ST_Cdc_Acm_Send_Packet(MI_U8 *buf, MI_U32 size);