0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用USBXpress开发包简化应用程序实现USB通信设计

电子设计 来源:网络整理 作者:佚名 2020-01-14 08:02 次阅读

传统的USB设备驱动程序编写异常复杂,程序员往往很难入手。SILICON Laboratories公司提供的USBXpress开发包大大简化了USB通信的应用和相关驱动程序的开发,只要做好开发前的准备工作,USBXpress开发包完全可以实现USB通信的所有功能。本文介绍USB通信开发的全过程,以及在开发过程中需要注意的事项。(主要针对设备端USB通信进行讲解)

1、USBXpress简介

由SILICON Laboratories公司推出的USBXpress开发包涵盖了主机端和设备端的所有函数功能,支持C8051F32X、C8051F34X和CP210X设备的USB通信。USBXpress开发包中包含主机端的设备驱动、主机端设备驱动安装程序、主机端的动态链接库(DLL)和设备端的函数库文件。

设备端的函数库文件提供了支持C805IF32X和C8051F34X设备USB通信的API函数,这些函数可以在Keil uVision3编译环境下被编译通过。编译前需要在工程中添加相关的文件,详见下文。

设备端函数库中主要的API函数如下:

USB Clock Start() -初始化USB时钟

USB Init()-USB接口初始化

Block Write() -向Buffer中写数据

Block Read() -从Buffer中读数据

Get Interrupt Source()-获取API函数的中断标志值

USB Int Enable() -允许API函数中断

USB Int Disable() -不允许API函数中断

USB Disable() -不允许USB接口通信

USB Suspend() -延缓USB中断

2、设备端的电路设计

(1)USB插座引脚识别

在没备端电路设计的过程中,对USB插座引脚必须对应连接,否则将直接影响到与主机端的通信。USB插座一般分为A型插座和B型插座,如图1所示,其引脚说明如表1所列。

利用USBXpress开发包简化应用程序实现USB通信设计

利用USBXpress开发包简化应用程序实现USB通信设计

(2)基于C8051F340的USB通信电路

基于C8051F340的USB通信电路如图2所示。

利用USBXpress开发包简化应用程序实现USB通信设计

(3)USB通信电路说明

①电路中的D-和D+不应连接其他负载电路,因为任何负载将影响数据线路上的电流,从而影响数据传输,直接后果将导致主机端无法识别设备。

②JTAG口线中的VDD引脚为+3 V输入,输入电压过大将损坏器件。USB插口引脚与C8051F340引脚应对应连接,不要有误。

③C8051F340的VBUS、REGIN和VDD引脚的连接有多种方式(稳压器配置),详见表2。

利用USBXpress开发包简化应用程序实现USB通信设计

3、设备端的驱动程序设计

在Keil uVision3编译环境下,用USBXpress 工具包中的API函数设计设备端的USB通信,前提是在工程中添加C8051F340.h、USB_API.h和USBX_F34X.LIB文件(USBXpress工具包提供相关文件)。

下面介绍设备端USB的数据传输。在进行数据传输之前,必须对USB时钟和USB接口初始化:

利用USBXpress开发包简化应用程序实现USB通信设计

(1)USB接口初始化参数定义

①USB_VID,16位二进制卖主ID号,一般用SILICONLab的ID号(OXl0C4)。

②USB_PID,16位二进制产品ID号,一般USBXpress规定为OXEA61。

利用USBXpress开发包简化应用程序实现USB通信设计

④USB_ProductStr,BYTE型指针,指向描述产品的字符串,不能为空。

⑤USB_SerialStr,BYTE型指针,指向描述序列号的字符串,不能为空。

⑥USB_MaxPower,BYTE型,说明总线最大电流,极限为500 mA。若取值0x32,则表示最大电流为100 mA。

⑦USB_PwAttributes,BYTE型,用于供电配置。如果设备自己供电第6位置“1”,若为总线供电则为“O”。如果设备提供弱上拉作用,第5位置“l”,位0~4必须为“O”,位7必须为“1”。

⑧USB_bcdDevice,无符号int型,用BCD码表示设备的版本号,如2.13版为Ox0213。

(2)USB中断函数

设备端USB通信中API函数的功能,都在一个中断模块里面实现,为此必须提供一个中断向量。其中,0x008B(Interrupt 17)是F34X设备的中断向量。在main函数中,只有允许了USB中断(调用USB Int Enable函数),才能进入中断。一旦进入中断服务程序,必须先获得中断标志(调用Get_Interrupt_Source函数,返回BYTE型中断标志),后续操作根据获得的中断标志值与工具包自定义的中断标志值判断执行。自定义的中断标志值主要有:USB_RESET(复位中断)、TX_COMPLETE(发送完成中断)、RX_COMPLETE(允许接收中断)、DEVICEOPEN(设备实例在主机端打开)、DEVICE SUSPEND(延缓信号)等。

中断函数如下:

利用USBXpress开发包简化应用程序实现USB通信设计

在main函数中进行初始化之后,若中断允许,通过函数Block_write来发送数据,发送数据的字节数不能超过4096。发送结束后将触发中断,从而进入中断服务程序进行判断操作。如果主机端向设备端的Buffer写入数据完成,也将触发中断,判断执行Block_Read操作将Buffer中的数据存入指定的存储单元。

发送数据的函数原型为:Block_write(数据存储单元首地址,发送的字节数)。

(3)主机端USB应用程序设计

在VC++6.O编译环境下开发主机端的USB通信应用程序,需要注意在编译之前向工程中添加开发包提供的SiUSBXp.dll、SiUSBXp.h和SiUSBXp.lib文件。

为了能让主机端识别USB设备并与之通信,在运行应用程序之前,要安装主机端的驱动程序(开发包已提供)。安装了驱动程序,主机端才能识别USB设备,在设备管理器中可以找到USB设备的相关描述信息

对USB设备的描述信息,除了可以修改设备端发送过来的描述符之外,还可以修改在主机端驱动安装目录下*.inf文件中的信息。

结语

本文详细介绍了USB通信的开发过程、电路设计和设备端的驱动设计,简单说明了USBXpress开发包在主机端应用的条件设置。所有设计思路和方法都通过了实验验证,可以直接用于工程项目开发。通过此方法,程序员可以很容易地进行一系列USB通信应用的设计和编程

责任编辑:gt


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • usb
    usb
    +关注

    关注

    59

    文章

    7377

    浏览量

    257471
  • 时钟
    +关注

    关注

    10

    文章

    1477

    浏览量

    130273
  • 应用程序
    +关注

    关注

    37

    文章

    3105

    浏览量

    56191
收藏 人收藏

    评论

    相关推荐

    博通公司利用WICED开发包为物联网锦上添花

    物联网产品开发的新捷径。智能开发包为低功耗客户端设备提供了集成智能蓝牙(即低功耗蓝牙)的软件栈和应用程序概要,为OEM提供了便捷、经济的嵌入式无线解决方案,其占用空间极小,同时增加了支持连接设备种类。
    发表于 05-15 18:39 806次阅读

    [转帖]USB电脑红外遥控器 原理框图 及二次开发包

    ,外围电路简单稳定,方便了批量生产和不良率的控制。★不需要外加电源,直接取USB电源供电。 关于二次开发包★ 功能: 将USB接收器的红外遥控信号,接收、解析出来,送给应用程序
    发表于 12-13 15:40

    如何利用STM32的USB实现通信

    如何利用STM32的USB实现通信
    发表于 02-21 06:50

    Visual C++ 6.0利用ADO开发数据库应用程序

    Visual C++ 6.0利用ADO 开发数据库应用程序:如图,这个Demo程序简单的实现了SQL语言查询分析器功能,下面我们就以这个
    发表于 05-10 10:57 84次下载

    利用OPC实现VC应用程序与PLC的数据交换

    利用OPC实现VC应用程序与PLC的数据交换   VC(Visual  C++)是功能强大的一种Windows应用程序可视化软件开发
    发表于 04-17 18:04 4728次阅读
    <b class='flag-5'>利用</b>OPC<b class='flag-5'>实现</b>VC<b class='flag-5'>应用程序</b>与PLC的数据交换

    USBXpress WinCE60 Development Kit (开发包-含Win7)

    USBXpress WinCE60 Development Kit软件说明: 适用于操作系统:WinCE60
    发表于 04-16 09:07 69次下载

    利用FTP实现应用程序的远程更新

    FTP (File Transfer Protocol),是用于Internet上的控制文件的双向传输的协议。同时,它也是一个应用程序。本方案主要介绍如何利用网络(以太网、GPRS上网),通过FTP协议来实现
    发表于 06-09 16:08 46次下载

    利用LabWindowsCVI实现串口通信_labview程序案例

    程序案例 利用LabWindowsCVI实现串口通信
    发表于 01-12 15:44 131次下载

    USB通信程序开发

    USB通信程序开发,有需要的朋友可以下来看看 。
    发表于 01-25 10:26 17次下载

    Android应用程序开发USB数据采集系统的设计

    协议。本文结合两者的突出优点设计了一种新型数据采集系统,以下将详细阐述Android 3. 1平台下的USB 应用程序开发的完整过程,以及与LPC2142之间的USB
    的头像 发表于 11-09 09:10 3863次阅读
    Android<b class='flag-5'>应用程序</b><b class='flag-5'>开发</b>及<b class='flag-5'>USB</b>数据采集系统的设计

    MATLAB串口调试助手应用程序和基于MATLAB开发USB的串口通信源代码

    本文档的主要内容详细介绍的是MATLAB串口调试助手应用程序和基于MATLAB开发USB的串口通信源代码。
    发表于 11-05 08:00 94次下载
    MATLAB串口调试助手<b class='flag-5'>应用程序</b>和基于MATLAB<b class='flag-5'>开发</b><b class='flag-5'>USB</b>的串口<b class='flag-5'>通信</b>源代码

    USBXpress开发包简化USB通信的应用开发及注意事项

    传统的USB设备驱动程序编写异常复杂,程序员往往很难入手。SILICON Laboratories公司提供的USBXpress开发包大大
    的头像 发表于 01-21 17:14 4813次阅读
    <b class='flag-5'>USBXpress</b><b class='flag-5'>开发包</b><b class='flag-5'>简化</b><b class='flag-5'>USB</b><b class='flag-5'>通信</b>的应用<b class='flag-5'>开发</b>及注意事项

    嵌入式Linux应用程序开发-(9)UDP网络通信应用程序(UDP-Socket)

    基于UDP协议的网络通信应用程序(UDP-Socket)前两篇文章介绍了基于TCP/IP协议的网络通信应用程序。嵌入式Linux应用程序
    发表于 11-02 12:21 34次下载
    嵌入式Linux<b class='flag-5'>应用程序</b><b class='flag-5'>开发</b>-(9)UDP网络<b class='flag-5'>通信</b><b class='flag-5'>应用程序</b>(UDP-Socket)

    MG82G5E32开发包(应用.开发板.范例程序)

    MG82G5E32 开发包 (应用, 开发板, 范例程序)免费下载。
    发表于 07-01 09:41 0次下载
    MG82G5E32<b class='flag-5'>开发包</b>(应用.<b class='flag-5'>开发</b>板.范例<b class='flag-5'>程序</b>)

    USB RFM应用程序

    电子发烧友网站提供《USB RFM应用程序.zip》资料免费下载
    发表于 07-20 17:10 1次下载
    <b class='flag-5'>USB</b> RFM<b class='flag-5'>应用程序</b>