Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177764
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 305
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-07 15:33
文章存档

2015年(23)

2014年(10)

分类: 嵌入式

2015-01-08 15:49:03

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,这个可以在安装的协议栈里找到。
     这基本实现之后,后面的操作就如串口透传操作是一样的了,我们这里处理的只是接口方式的不同。

阅读(6788) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

7220璐璐2015-08-27 10:28:30

您好,我也是按照该方法做的,但是安装USB转虚拟串口的驱动usb_cdc_driver_cc2540,怎么总安装失败呢,您知道为什么吗?