1.USB虚拟串口代替物理串口的可行性

首先,越来越多带USB接口的器件涌现出来,如带USB接口的单片机,或独立的USB接口器件,而且这些器件的成本已经很接近于使用RS232电平转换芯片所带来的成本。

其次,市场上也出现了一些USB接口转串口的芯片,这些芯片一头为串口,另一头为USB接口,在其内部完成串口到USB协议的转换。该芯片通过USB口连接到个人计算机后,在操作系统中表现为一个串口设备,这意味着USB接口对于传统的串口调试工具(HyperTerninal)和用户基于串口的应用程序是透明的,开发人员完全不用更改PC端的调试和应用程序。

但是这些器件的USB类不属于标准的USB设备类,因此需要在Windows和Linux操作系统上安装额外的设备驱动。另外,由于不是操作系统自带的设备驱动,而且通信经过了由串口到串口,USB从设备到USB主机的多次转换,当调试遇到问题时常常无法确定是串口出了问题还是USB出了问题。因此,应该使嵌入式系统直接和PC通过USB总线接口连接(通过片上的USB接口或片外USB接口芯片),由单片机直接完成USB虚拟串口的协议转换。

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

2.具体实现方式

TI给出的BLE4.0-1.4.0协议栈里是没有这部分的,需要我们自建工程,我们就从SimpleBLEPeripheral这个工程更改成我们想要的工程项目,因为此设备也是做从机的,主机是手机那边,作为从机实现将数据通过USB与电脑通讯,我们调试的时候是通过虚拟串口方式,通过串口助手显示在屏幕上的。

初始化UART和USB

void HalUARTInit(void)

{

#if HAL_UART_USB

HalUARTInitUSB();

#endif

}

将其他与UART相关宏关闭,打开宏HAL_UART_USB=TRUE; 打开UART宏HAL_UART=TRUE;

读写的动作我们还是调用UART的读写函数,只是此时的函数内容已经换了。

uint16 HalUARTWrite(uint8 port, uint8 *buf, uint16 len)

{

#if HAL_UART_USB

HalUARTTx(buf, len);

return len;

#else

#if (HAL_UART_DMA == 0) && (HAL_UART_ISR == 0) && (HAL_UART_SPI == 0)

// UART is not enabled. Do nothing.

(void) port;   // unused argument

(void) buf;   // unused argument

(void) len;   // unused argument

#endif

return 0;

#endif

}

uint16 HalUARTRead(uint8 port, uint8 *buf, uint16 len)

{

#if HAL_UART_USB

return HalUARTRx(buf, len);

#else

#if (HAL_UART_DMA == 0) && (HAL_UART_ISR == 0) && (HAL_UART_SPI == 0)

// UART is not enabled. Do nothing.

(void) port;   // unused argument

(void) buf;   // unused argument

(void) len;   // unused argument

#endif

return 0;

#endif

}

void HalUARTPoll(void)

{

#if HAL_UART_USB

HalUARTPollUSB();

#endif

}

驱动部分的替换,我们可以根据HIDAdvRemoteDongle这个工程里的2540USB工程驱动来替换2540EB的驱动;驱动替换好后,编译没有错误出现,下一步我们就是与电脑通讯这部分了。

怎么实现USB转虚拟串口,能将数据显示在串口助手上呢?前面工程部分我们已经搞定了从设备的USB驱动,现在我们就需要在电脑上安装一个USB转虚拟串口的驱动就OK啦,驱动名为usb_cdc_driver_cc2540.inf,这个可以在安装的协议栈里找到。

这基本实现之后,后面的操作就如串口透传操作是一样的了,我们这里处理的只是接口方式的不同。

linux系统串口透传,基于CC2540的USB虚拟串口透传方案相关推荐

  1. linux内核配置usb虚拟串口,Linux USB虚拟串口设备

    Linux内核中usb设备侧驱动程序分成3个层次:UDC驱动程序.Gadget API和Gadget驱动程序.UDC驱动程序(USB控制器)直接访问硬件,控制USB设备和主机间的底层通信,向上层提供与 ...

  2. Linux系统下使用桥接模式,无法ping通外网解决问题方案!

    Linux系统下使用桥接模式,无法ping通外网解决问题方案! 参考文章: (1)Linux系统下使用桥接模式,无法ping通外网解决问题方案! (2)https://www.cnblogs.com/ ...

  3. 研华工控机linux改win7,嵌入式工控机研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5...

    研华工控机用u盘装系统如何设置bios?在虚拟机中的Linux系统中咋挂u盘 我的虚拟机上都没有USB 显示5 在上一篇文章中,小编为您详细介绍了关于<有一个研祥工控机 旧的 想拆里面的视频采集 ...

  4. 扫描枪设置虚拟串口linux,顶码扫描枪全能王TP20Y怎么设置USB虚拟串口模式?

    顶码全能王TP20Y是一款极具性价比的二维影像手持扫描枪,可以读取所有一维.二维条码,外形小巧,价格实惠,卓越的工业保护设计,坚固耐用,适用于超市.便利店的零售收银.自动化办公与文件管理.邮件与包裹的 ...

  5. android usb虚拟串口,USB 虚拟串口简介

    1. USB虚拟串口简介 USB虚拟串口属于USB通信设备类.在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口.在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT ...

  6. USB 虚拟串口简介

    1. USB虚拟串口简介 USB虚拟串口属于USB通信设备类.在物理层通过USB总线,采用虚拟串口的方式为主机提供一个物理串口.在系统内部,USB控制器提供了一个批量传输IN端点和一个批量传输的OUT ...

  7. stm32usb做虚拟串口和键盘_关于stm32f103的USB虚拟串口程序移植

    手边有个项目要用到USB传数据到主机,虽然有很多种方式,但最后还是选择了USB虚拟串口模式,将数据上传至pc端: 然而这就涉及到了移植问题,在keil下官方已经给出了一个完整的USB TO VCOM的 ...

  8. STM32 USB虚拟串口收发任意长度字节例程

    STM32 USB虚拟串口收发任意长度字节例程 创建STM32 CubeMX工程 代码修改 收发任意长度测试 创建STM32 CubeMX工程 基于STM32 CubeMX进行开发,使用USB的高速模 ...

  9. 【正点原子STM32连载】第五十八章 USB虚拟串口(Slave)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

最新文章

  1. 【rnnoise源码分析】compute_frame_feature函数
  2. 【 MATLAB 】Signal Processing Toolbox Functions - By Category
  3. CTFshow 命令执行 web44
  4. 女性人均存款56.3万,中国女性存款为何比男性高?
  5. Model-View-Presenter模式之 Step by Step
  6. c语言switch同时比较多个变量,C语言学习if和switch分支选择结构
  7. LeetCode:136. 只出现一次的数字
  8. 提高 Google 搜索效率的基本语法
  9. 更好地在云上:物联网,大数据和人工智能
  10. OSI参考模型(1)
  11. wunderlist_如何从Wunderlist切换到Microsoft做
  12. xmind 拖拽_GitHub - xdsnet/jsxMind: 基于jsmind 改写的jsxmind插件
  13. win10文件夹加密_Win10系统加密文件夹
  14. 做你的大玩具——轩小样儿的六一
  15. 分享一篇投稿英文期刊该如何回复审稿人的文章
  16. Python PDF转JPG
  17. apache评分标准_危重病人APACHE II评分表(标准)
  18. SAP 可配置BOM创建
  19. 81.一名【合格】前端工程师的自检清单
  20. 负数modulo运算_Java Modulo Operator-Java中的Modulus运算符

热门文章

  1. nodejs爬虫 node + cheerio 爬取滚动加载页面
  2. 【云原生 | 从零开始学istio】六、istio核心功能
  3. mysql 5.6 tokudb 安装_Ubutu 安装tokudb
  4. 【软件测试系列三】《测试用例编写原则与设计方法》
  5. Qt/C++编写安防视频监控系统29-掉线重连
  6. 【毕业设计_课程设计】基于mtcnn的实时高精度人脸检查算法实现
  7. oledb连接mysql_OLEDB 连接 和 效率(MS SQL 、Oracle 、ACESS)
  8. 《例说51单片机(C语言版)(第3版)》——1-5 MCS-51的开发流程与工具
  9. 7.4多元线性回归实例1--python机器学习
  10. Temporal框架学习