USB
基本功能
在本设计中,数据的处理可以使用PC机的MATLAB等功能强大的软件,但是这类现有的数据处理软件并不能对特有的数据采集系统的下位机采集模块进行直接控制,因此需要针对特定的数据采集系统编写对应的上位机软件,上位机软件是针对上述目的而设计与编写的,是整个采集系统的控制前端和数据存储及处理中心。控制功能主要包括控制下位机采集的开始与终止,采集的频率等,数据处理功能主要包括绘制波形图,将数据显示于列表,将数据存储于文件,其中将数据存储于文件将便于使用现有的数据处理软件对数据进行一些数值算法处理,以达到科学研究,结论验证等目的。
开发环境
C++程序设计语言可以很好地实现面向对象的编程思想,采用C++编写上位机程序,可以将每一个功能模块封装成一个类,修改某个类的实现,增加类的功能不会影响整个程序的框架,这样就很容易维护和扩展功能;加之我们要实现的软件功能中需要调用大量的windows API函数库,所以采用VC++6.0作为上位机的开发环境。
程序功能模块划分
总的功能模块主要包括三个模块,即HID设备读写模块,数据采集模块,数据处理模块。
HID设备的查找与读写
(1)枚举
USB主机在检测到USB设备插入后,就要对设备进行枚举了。枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。
(2)HID
人机接口设备(HID)是指直接和人进行互动的设备,如鼠标、键盘等. 在Windows 中,具有相似属性和提供相似服务的设备被归为一种设备类型,一种类型的设备可以使用一个通用的设备驱动程序. 在运行Windows 98 或更高版本的PC 机上,应用程序可以使用操作系统内置的HID 类驱动程序与HID 通信. 这样使得符合HID 类的USB 设备很容易开发与运行.
(3)HID设备的查找
在Windows操作系统中内置很多与HID有关的API函数,调用这些函数,就可以开始对指定的HID设备进行查找,查找HID设备的最终目的是获得该设备的路径名,设备的存取容量等信息,为以后对该设备进行读写做好准备。
(4)HID设备的读写
在取得了HID设备的路径全面后,即可开始对HID设备进行读写,对设备的读写也是通过调用相应的函数来实现的。
控制下位机进行数据采集
上位机向下位机发送命令,控制下位机进行数据采集,并从下位机获取数据,在这个过程中,要处理好两个线程的同步的问题,即数据采集线程和数据处理线程能够协调工作,保正系统能正确稳定的工作。具体的解决方法是实现对某些数据访问的原子操作,即一个线程在对公共数据进行访问时,另一个线程不能打扰,直到操作线程操作完成,放弃对数据的使用权,另一个线程才能够访问数据。
下位机获取了关于采集的有关参数后,即可开始采集,每隔一定时间采集一个数据,当采集数据数目达到限制值个数后,本次采集完成,此时下位机才开始将采集数据发送给上位机。
上位机对采集的数据的处理
上位机在将数据采集命令发送给下位机后,所要做的就是等待下位机采集完成并接收数据,因此上位机将循环查询下位机工作状态,一旦检测到下位机采集结束的标志,上位机就开始对数据进行处理。
数据处理分为三种:
(1)绘制波形图
绘制波形图的要求有两点:第一是不能频繁闪烁,影响观察;二是波形图是动态的,因为绘制区域有限,而所采集的数据是源源不断增加的,因此要求波形图能够动态的更新。
(2)添加到列表显示
可直观地查看目前所采集的所有数据。
(3)保存到文件
运用功能强大的数据处理软件对数据进行更深的处理。
界面显示
采集单极性正弦波工作界面
转自:markmin214
1、引言
USB接口以其数据传输快、连接简单、易于扩展、支持热插拔等特点已成为外设与PC通信的主要方式之一。随着嵌入式系统的发展,嵌入式微处理器需增加通用的USB接口,以便实现与PC等USB主机系统的通信。针对这样的需求,这里采用PHILIPS公司的USB接口器件PDIUSBD12和Atmel公司的AVR系列单片机ATmega8设计一种通用的USB接口模块。该模块可方便为各种嵌入式微处理器增加USB接口,从而实现与USB主机系统的高速通信。
2、系统硬件设计
该系统模块的控制核心是AVR高速单片机ATmega8。AVR单片机是新一代基于哈佛结构的高速RISC微控制器,具有速度快、价格低、可靠性高,I/O口线驱动能力强和片内集成外设资源丰富等特点,其内部集成有可进行ISP下载编程的Flash,EEPROM、熔丝位和锁定位。AVR单片机的ISP下载电缆制作简单、成本低廉,还有免费的下载软件(例如PONyProg)支持。PDIUSBD12是一款高性价比USB接口器件,完全符合USB1.l规范,易于与各种微处理器接口。
由于AVR单片机具有高速性,可利用I/O端口线以软件方式模拟PDIUSBD12的时序,对其读写。这种方式可根据不同的微处理器速度灵活控制PDIUSBD12的时序和地址,无需译码电路,从而简化硬件设计,降低成本。
由于ATmega8片内集成了UART,SPI,I2C等接口,该接口模块可利用这些接口与其他系统通信,使得该接口模块成为通用的接口转换器。
3、USB固件程序设计
本系统模块的USB固件程序采用符合ANSI C标准的GCC编译器设计,结合分层次的模块化结构,可移植性强,只需稍微修改硬件接口层即可将其移植到别的硬件平台,可重复利用代码。
USB固件程序设计是基于状态机和标准的前后台式程序架构。整个同件程序的模块化层次结构如图3所示。首先编写硬件接口层hal.c和PDIUSBD12器件的命令接口层,以供上层模块调用。硬件接口层含有对PDIUSBD12写指令和读写数据的函数,以供上层模块调用。当CPU不同时,只需修改这些函数即可。由于CPU访问PDIUS-BD12与普通存储器一样,只需根据硬件连接关系,在硬件抽象层中编写对PDIUSBD12写指令、写读数据的函数,供上层调用即可。实现PDIUSBD12的命令接口层需调用硬件抽象层函数,供上层模块调用。再设计前后台程序及标准设备请求程序模块。
先利用C语言的共用体与位域定义一个全局状态变量如下所示:
用户可根据需要增加相应的状态标志位,如UART,SPI,I2C等接口收发数据完成标志来满足各种情况下的需要,然后定义一个结构体变量用于存放USB的标准设备请求。
在前台主程序中首先初始化全局变量和其他外围设备,然后在while(1)的死循环中检测状态变量值有无变化,根据不同的状态变量值调用下层的相应函数完成相关操作。在后台的中断服务程序中,根据读取的中断寄存器值一方面将PDIUSBD12接收到的数据移入CPU内存或将内存中的数据写入PDIUSBD12发送端点的缓冲区;另一方面根据具体情况改变状态变量值。
以下给出了前台主程序的程序代码:以下为后台中断服务程序:
当前台主程序检测到状态变量收到SETUP包事件bEvent_flags.bits.setup_packet为1时,该标志位清零,再调用标准设备请求模块stdreq.c的control_handler()函数完成对USB设备的枚举。
设计标准设备请求模块,首先利用结构体定义USB枚举所需的各种描述符,以供不同设备请求使用,其次编写11个标准的设备请求处理函数。本层请求模块重要函数是协议控制子程序control han-dler(),它根据ControlData中标识的不同USB设备请求类型调用11个函数中的任意一个。除此之外,本层请示求模块还实现中断服务程序调用的控制端点接收与发送中断处理函数。
4、系统集成与应用
4.1 PC机驱动程序与应用程序的设计
利用该系统模块实现PC机通讯,需对PC机编写相关驱动程序和应用程序,可利用DriverStudio软件生成该系统模块在Windows环境下的驱动程序。应用程序的设计可使用诸如VB、VC、Delphi以及应用普遍的虚拟仪器软件开发工具LabVIEW等软件开发工具,直接调用驱动程序生成的动态链接库中的API函数,可根据具体任务编写相关应用程序。
4.2 应用于其他系统
利用AVR单片机的多种外设接口特点,例如UART、SPI、I2C接口等可以有效地实现与其他微处理器的通信,将该模块嵌入各种系统,实现与其他器件的通讯。固件程序中预留有UART、SPI、I2C等接口程序,只需通过简单的跳线连接就可选择相应的接口,从而实现应用系统增加USB接口。
4.3 固件程序移植其他平台
由于固件程序最大限度考虑到可移植性,所以将固件程序稍加修改即可应用于各种已拥有C语言编译器的微处理器,实现PDIUSBD12直接与微处理器的通讯。
移植固件程序主要工作有:根据硬件连接关系,修改硬件抽象层中的3个读写函数,实现CPU与器件之间的通信;通过调用PDIUSBD12命令接口层的读取芯片ID函数返回值是否为0x1012,测试CPU与器件之间的通讯是否正常。
5、在数据采集器中的应用
由于ATmega8片内集成有逐次比较型ADC,具有6路的模拟输入通道,所以只需要针对采集的物理量选用相应传感器,并将输出信号调整至0~Vcc的范围内就可利用该模块实现USB数据采集器。AVR单片机集成有ADC自带采样保持电路,具有内部参考电压和基于睡眠模式的噪声抑制器,从而大大提高ADC精度,实现高精度的数据采集。而设计只需在相应的固件程序巾增加获取ADC结果的函数,并设置相应的状态标志位即可完成USB数据采集器的设计。
6、结束语
以ATmega8和PDIUSBD12为核心,实现通用的USB接口模块设计,并应用于基于USB接口的数据采集器中。实验结果表明,该USB接口模块运行稳定可靠,通信速度快,易于修改移植,满足嵌人式系统对USB接口的需求,并能快速为各种微处理器增加USB接口,具有广泛的应用前景。
来源:21ic
Holtek新推出HT45R0072 USB Wired Keyboard MCU,继HT82B40R之后再度推出键盘MCU产品,针对USB有线键盘产品应用,最大34根I/O支持键盘扫描与LED显示。
HT45R0072兼容USB 2.0 Low Speed规范,工作电压3.3V~5.5V、系统频率为内建振荡器提供之6MHz/12MHz,可减少外围组件。HT45R0072规格包含有4Kx16 OTP ROM、160 Bytes RAM、Low Speed USB、3个Endpoints、最多34根双向I/O、1组8-bit Timer、1组16-bit Timer以及内建Regulator 3.3V输出提供外围应用,提供Dice与46-pin QFN封装形式选择,46-pin QFN封装与HT82B40R脚位相容。
来源: HOLTEK
STM32 提供了丰富的接口资源,其中包括 USB FS、USB HS、OTG FS 和 OTG HS。对于高速 USB,由于信号速率相对较高。在开发过程中,会对高速 USB 信号质量进行测试,例如运用广泛的眼图测试。STM32 的高速 USB/OTG IP 遵循USB 2.0 规范,能够配合实现眼图等信号质量测试项。本文中,首先介绍眼图等信号质量测试的实现框架,然后以 Cube 软件包中 USB 设备类的 HID 例程为基础,提供软件层面的修改。最后通过 USB 官方提供的 HSETT 工具,一步一步呈现如何使STM32 实现的 USB 设备进入测试模式,以便使其输出用以获取眼图等测试项的信号。
一 信号质量测试背景介绍
高速 USB 信号质量测试,实现框架如下图。
根据测试需要,利用电脑端测试软件工具 HSETT,使 STM32 实现的 USB 设备进入相应的测试模式。然后利用示波器抓取测试信号,进行信号质量分析。本文中不包含示波器抓取信号的实现描述,读者可以通过文末的参考文档进行了解。
其中,HSETT 全称 High-speed Electrical Test Tool,是 USB 官方组织发布的一个发包工具(官网 www.usb.org 下载)。
STM32 的高速 USB IP 遵循 USB2.0 规范,支持多种测试模式,包括 Test_J 模式、Test_K 模式、Test_SE0_NAK 模式、Test_Packet 模式和 Test_Force_Enable 模式。更多测试模式内容的介绍请参考 USB2.0 规范。 更多内容请参考对应型号的参考手册。其中,如果是进行眼图测试,需要进入 Test_Packet 测试模式。
二 软件层面支持
本文中实现环境如下:
硬件平台: STM32F469I-EVAL
Cube 软件包版本: v1.16.0
HID 例程文件路径 :
STM32Cube_FW_F4_V1.16.0\Projects\STM32469I_EVAL\Applications\USB_Device\HID_Standalone.HS Electrical Test Tool (HSETT)
通过上述介绍可以了解到高速 USB 的信号质量测试,需要 USB 器件进入测试模式,提供符合测试的信号输出。基于此,下面列出例程中添加及修改处,以实现 HID 设备对测试模式的支持。
完成上述修改,编译生成执行文件,并加载到 STM32F469I-EVAL 板。注: 工程中包含三个子工程,分别是STM32469I-EVAL_USBD-FS、STM32469I-EVAL_USBD-HS-IN-FS 和 STM32469I-EVAL_USBD-HS,选择 STM32469IEVAL_USBD-HS实现高速 USB 的 HID 设备功能。
三 测试模式进入
利用 USB 数据线将 STM32F469I-EVAL 板上的高速 USB 口与电脑连接。如果 HID 例程运行正常,电脑会对将其识别为HID 设备,可在电脑的设备管理器中查看,如下图。
打开 HS Electrical Test Tool,出现主控制器选择界面,如下图。界面中内容及出现情况与电脑有关,如果电脑仅包含一个主控制器,不会出现选择界面。注意 HSETT 工具用于 USB2.0,如果电脑只有 USB3.0 主控制器,会出现无法找到USB2.0 主控制器的提示,并且不能使用。
从设备管理器进入,查看主控制器属性中的位置路径。查找与 HID 设备的位置路径关联的主控制器,如下图(主控制器的总线、设备和功能号信息,在下图界面的“常规”标签中)。
根据图中信息确定选择 “PCI 总线 0、设备 29、功能 7”,出现选择测试类型的界面,如下图。
本文中介绍 USB 设备的测试实现。选择 “Device”,单击“TEST”,进入测试模式的界面,如下图
界面中列出了挂载在主控制器上的 USB 设备硬件 ID,选择对应的设备。(实验时,对应 USB 主控制器上只挂载了STM32 实现的 HID 设备。)
点击 “Enumerate Bus”重新与设备建立枚举。枚举成功出现如下提示。
HSETT 提供了多种设备命令,如下图。为了实现眼图测试,选择“TEST_PACKET ”,单击“EXECUTE”,向 USB 设备发送设置 Test_Packet 模式的命令。
发送成功,并被 USB 设备正确响应后,出现如下提示。然后可以单击“Return To Main” “Exit”退出 HSETT,释放主控制器的控制。
STM32 高速 USB 进入测试模式,通过 USB 接口连续循环地向外输出测试需要的信号。在进入测试模式后,信号的发送不受 USB 数据线连接的影响,断开 USB 数据线,依然会发送信号,以便获取眼图等测试信号。
四 小结
本文简略的从 STM32 角度,描述了高速 USB 信号质量测试中,涉及到的修改及实现。对于具体的测试及分析,不在本文介绍范围内,读者可以通过提供的参考文档 Universal Serial Bus Implementers Forum Device Hi-Speed Electrical TestProcedure,更加全面的了解信号质量测试的步骤及实现。另外,文件中以 HID 设备为例,但需知测试实现与哪种类型 USB设备无关。
独具无比伦比灵活性的Microchip新款器件,客户设计的绝佳选择
随着车载信息娱乐系统的兴起,汽车制造商需要在汽车显示屏和多台智能手机或者平板电脑之间建立可靠而智能的连接。
Microchip Technology Inc.是提供支持此类连接的集成电路(IC)的业界翘楚,推出的5款新型USB 2.0智能集线器IC为用户提供了多种选择。这些器件有各种架构,能够非常灵活地适应汽车制造商的设计需求,满足消费者对系统易于使用而且直观的要求。
如需了解有关这些新器件的更多信息,请访问: www.microchip.com/USB4914 。
这5款新器件支持各种架构,因此制造商可以轻松地将其特定设计连接至所有主流智能手机操作系统。这些系统支持将手机或者平板电脑的图形用户界面显示在车辆屏幕上,与车内语音命令集成,同时还能对移动设备进行充电,并支持手机上的辅助驾驶应用程序与汽车信息娱乐系统相集成。
Microchip新款智能集线器IC支持集线器级联到第二和第三排座位,数据可同时出现在所有端口上,并具备充电功能。例如,如果有两个USB端口,一个端口可以把手机或者平板电脑连接到汽车主机,而另一个端口既可以充电也可以上传/下载数据。采用Microchip的新款USB4914、USB4916、USB4925和USB4927智能集线器IC,汽车制造商可以定制自己的解决方案以满足其设计需求。随着汽车越来越成为一种娱乐环境,制造商可以开发新颖的解决方案——支持消费者使用一部手机进行导航,而另一部用于听音乐或者看视频。
Microchip的USB和联网产品部副总裁Mitch Obolsky说:“Microchip是汽车行业USB集线器IC的领导者。我们的长期投入取得了专利技术,为手持设备与车辆的连接提供独特的主机/设备总线配置,更好地获得信息,实现更安全的辅助驾驶和通信功能。”
Microchip新款USB4715、USB4914、USB4916、USB4925和USB4927 USB 2.0智能集线器IC独特的USB配置包括了单路和双路总线实现,能够很好地连接信息娱乐系统。所有器件都使用大多数汽车主机系统的标准USB驱动程序,以便更迅速地开发和验证系统,进行现场更新。每一器件还集成了一个32位单片机,用于高级桥接、音频应用支持和USB供电(USB PD)。
开发支持
每一新款USB 2智能集线器IC都提供应用演示电路板和评估电路板。应用演示电路板模拟了一级供应商或者原始设备制造商(OEM)在其实际应用中使用的一个系统。Microchip还演示了一个USB供电应用,按照USB PD 3.0规范进行充电。
供货
USB4715、USB4914和USB4925提供48引脚QFN封装。USB4916和USB4927提供64引脚QFN封装。该器件目前已经量产,10,000片起可批量供货。
STM32 提供了丰富的接口资源,其中包括 USB FS、USB HS、OTG FS 和 OTG HS。对于高速 USB,由于信号速率相对较高。在开发过程中,会对高速 USB 信号质量进行测试,例如运用广泛的眼图测试。STM32 的高速 USB/OTG IP 遵循USB 2.0 规范,能够配合实现眼图等信号质量测试项。本文中,首先介绍眼图等信号质量测试的实现框架,然后以 Cube 软件包中 USB 设备类的 HID 例程为基础,提供软件层面的修改。最后通过 USB 官方提供的 HSETT 工具,一步一步呈现如何使STM32 实现的 USB 设备进入测试模式,以便使其输出用以获取眼图等测试项的信号。
一 信号质量测试背景介绍
高速 USB 信号质量测试,实现框架如下图。
根据测试需要,利用电脑端测试软件工具 HSETT,使 STM32 实现的 USB 设备进入相应的测试模式。然后利用示波器抓取测试信号,进行信号质量分析。本文中不包含示波器抓取信号的实现描述,读者可以通过文末的参考文档进行了解。
其中,HSETT 全称 High-speed Electrical Test Tool,是 USB 官方组织发布的一个发包工具(官网 www.usb.org 下载)。
STM32 的高速 USB IP 遵循 USB2.0 规范,支持多种测试模式,包括 Test_J 模式、Test_K 模式、Test_SE0_NAK 模式、Test_Packet 模式和 Test_Force_Enable 模式。更多测试模式内容的介绍请参考 USB2.0 规范。 更多内容请参考对应型号的参考手册。其中,如果是进行眼图测试,需要进入 Test_Packet 测试模式。
二 软件层面支持
本文中实现环境如下:
硬件平台: STM32F469I-EVAL
Cube 软件包版本: v1.16.0
HID 例程文件路径 :
STM32Cube_FW_F4_V1.16.0\Projects\STM32469I_EVAL\Applications\USB_Device\HID_Standalone.
HS Electrical Test Tool (HSETT)
通过上述介绍可以了解到高速 USB 的信号质量测试,需要 USB 器件进入测试模式,提供符合测试的信号输出。基于此,下面列出例程中添加及修改处,以实现 HID 设备对测试模式的支持。
完成上述修改,编译生成执行文件,并加载到 STM32F469I-EVAL 板。注: 工程中包含三个子工程,分别是
STM32469I-EVAL_USBD-FS、STM32469I-EVAL_USBD-HS-IN-FS 和 STM32469I-EVAL_USBD-HS,选择 STM32469I-EVAL_USBD-HS实现高速 USB 的 HID 设备功能。
三 测试模式进入
利用 USB 数据线将 STM32F469I-EVAL 板上的高速 USB 口与电脑连接。如果 HID 例程运行正常,电脑会对将其识别为HID 设备,可在电脑的设备管理器中查看,如下图。
打开 HS Electrical Test Tool,出现主控制器选择界面,如下图。界面中内容及出现情况与电脑有关,如果电脑仅包含一个主控制器,不会出现选择界面。注意 HSETT 工具用于 USB2.0,如果电脑只有 USB3.0 主控制器,会出现无法找到USB2.0 主控制器的提示,并且不能使用。
从设备管理器进入,查看主控制器属性中的位置路径。查找与 HID 设备的位置路径关联的主控制器,如下图(主控制器的总线、设备和功能号信息,在下图界面的“常规”标签中)。
本文中介绍 USB 设备的测试实现。选择 “Device”,单击“TEST”,进入测试模式的界面,如下图。
界面中列出了挂载在主控制器上的 USB 设备硬件 ID,选择对应的设备。(实验时,对应 USB 主控制器上只挂载了STM32 实现的 HID 设备。)
点击 “Enumerate Bus”重新与设备建立枚举。枚举成功出现如下提示。
HSETT 提供了多种设备命令,如下图。为了实现眼图测试,选择“TEST_PACKET ”,单击“EXECUTE”,向 USB 设备发送设置 Test_Packet 模式的命令。
发送成功,并被 USB 设备正确响应后,出现如下提示。然后可以单击“Return To Main” “Exit”退出 HSETT,释放主控制器的控制。
STM32 高速 USB 进入测试模式,通过 USB 接口连续循环地向外输出测试需要的信号。在进入测试模式后,信号的发送不受 USB 数据线连接的影响,断开 USB 数据线,依然会发送信号,以便获取眼图等测试信号。
四 小结
本文简略的从 STM32 角度,描述了高速 USB 信号质量测试中,涉及到的修改及实现。对于具体的测试及分析,不在本文介绍范围内,读者可以通过提供的参考文档 Universal Serial Bus Implementers Forum Device Hi-Speed Electrical TestProcedure,更加全面的了解信号质量测试的步骤及实现。另外,文件中以 HID 设备为例,但需知测试实现与哪种类型 USB设备无关。
来源:ST