我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1147|回复: 0

无线USB的设计与实现 - 通信/网络 - 电子工程师俱乐部

[复制链接]

该用户从未签到

1万

主题

1292

回帖

936

积分

管理员

积分
936

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 09:27:13 | 显示全部楼层 |阅读模式
1 引言
USB(Universal Serial Bus通用串行总线)是一种快速、灵活的总线接口。与其它通信接口比较,USB接口的最大特点是易于使用,支持热插拔,并且所有的配置过程都由系统自动完成,无需用户干预。USB接口已成为现代微型计算机的标准配置。

短距离无线通信,具有抗干扰能力强、可靠性高、安全性好、受地理条件限制较少、安装施工简便灵活等特点,应用非常广泛,如汽车遥控门钥、无线抄表、饭店的无线点菜、遥控遥测、小区自动化等等。

结合上述两种技术的优点,本文提出了一种无线USB的实现方案,可进行短距离数据的高速传输。以此为基础,可快速开发出相关的短距离无线通信产品。

2 应用芯片

PDIUSBD12 是一款Philips公司生产的高性价比USB 器件,其内部集成有320 bit的FIFO存储器、时钟发生器、串行接口引擎(SIE)、收发器和3.3 V电压转换器,完全符合USB1.1版的规范,可进行12M bit/s的数据传输。它还提供与微控制器进行通信的高速通用并行接口,并支持本地的DMA传输。
PDIUSBD12有三个端点:控制端点、通用端点和主端点,可配置成四种模式以满足不同的需要。片上集成一个6~48 MHz的倍频锁相环(PLL),允许使用6 MHz的低频晶振,从而使电磁干扰大大减小,给PCB布线带来了极大方便。它所提供的GoodLink接口可接LED,根据通信的状况间歇闪烁,指示USB的连接状况。

PDIUSBD12所具有的低挂起功耗连同LazyClock输出,可以满足ACPI、OnNOW和USB 电源管理的要求。低的操作功耗可以应用于使用总线供电的外设。此外,它还集成了 SoftConnetTM、可编程时钟输出和终止寄存器集合等多种特性,不仅为系统节约了成本,而且使USB 功能在外设上的应用变得更加容易。

nRF401是挪威Nordic公司最新推出的数传频段 433MHz单片无线收发一体芯片。采用FSK调制解调技术,最高数据传输率达20k bit/s,最大发射功率为+10dBm,接收灵敏度高达-105dBm,开阔地的使用距离最远可达1000m。天线接口设计为差分天线,可以采用低成本的PCB天线。该芯片为低功耗设计且支持待机模式,接受状态下的功耗为250mA,发射状态下的功耗为8mA,等待状态功耗仅为8mA。它的工作电压范围很宽,可以从2. 7~5V。它的外围元件很少,只包括一个基准晶振和几个无源器件,没有调试部件,可以直接与单片机串口连接,给设计和生产带来了极大的方便。

3 硬件设计

本文设计的无线USB方案的硬件结构如图1所示。


微控制器MCU采用PHILIPS的P89C58UBP,具有32k EEPROM、256 Byte RAM和三个定时/计数器,最高时钟可达33MHz。MCU的串口与 nRF401的RX、TX直接相连,TXEN(发送接收控制)、PWR_UP(芯片挂起)、CS(发射频率选择)分别由MCU的I/O脚控制。 PDIUSBD12接在MCU的数据总线上,中断引脚/INT接在MCU的中断输入上。PDIUSBD12会对USB总线上的数据自动进行处理,将事件写入自身的中断寄存器,并拉低/INT通知MCU。MCU响应中断,并读取中断寄存器的内容进行判断处理。如果是要求数据发送,则将数据通过串口发往nRF401,由其发射出去。同样nRF401接收到数据后触发串口中断, MCU响应中断将数据送入USB总线。整套系统使用USB总线供电。

4 软件设计

该系统的软件设计包括P89C58UBP中的固件设计和微机端的通信软件设计。其中,固件部分的流程图如图2所示。


后台D12中断服务程序和nRF401中断服务程序与前台主循环程序之间的数据交换,通过事件标志和数据缓冲区来实现。后台中断服务程序由中断触发,通过标志位与主模块通信。主模块循环扫描各标志位,对相应的标志位做出处理。例如,nRF401 接受到有效数据后,送入串口触发串口中断,进入nRF401中断服务程序,将数据接收后放入数据缓冲区,然后设置UART_DATA标志,退出子模块。主模块查询到UART_DATA被置位,则调用 writendpoint()程序将数据发往PC。

值得注意的是,nRF401在接受状态下即使没有数据接受,也会有随机码输出。因此需要在所需传输的数据前加入标识头,如55AAH。当检测到从串口进入的数据为55AAH时,再开始有效数据的接受。

对PC而言,无线USB传输模块是它的一个USB外设,因此必须提供USB设备的驱动程序。驱动程序的设计采用WDM模型,使用DriverStudio 进行开发。DriverStudio是一款优秀的驱动程序开发软件。启动DriverStudio中DriverWizard,填写USB设备的端点配置,便会自动生成驱动程序原代码和相应的测试程序原代码,只需稍做改动便可用VC6.0编译运行[5]。驱动程序向用户程序提供标准的IO接口:WriteFile ()、 ReadFile() 、DeviceIoControl ()。用户程序调用相应的函数,即可实现对USB设备的访问。下面的例子是实现向USB总线写数据的功能。

hFile = open_file(threadParam->pipe_name); //打开需要使用的端点
……
bResult = WriteFile(hFile,
threadParam->pcIoBuffer,
//等待传送的数据缓冲区地址
threadParam->uiLength, //数据长度
&nBytes,
NULL); //向该端点写入数据

if (bResult != TRUE) { //出错处理 DeviceIoControl(hFile, //复位该端点
IOCTL_D12_RESET_PIPE,
0, 0, 0, 0,
&nBytes,
NULL);}

编程过程中要注意串口波特率要一致,否则会造成接受数据错误。nRF401周围的布线和天线的设计很有讲究,一定要按照手册的要求进行设计。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

论坛开启做任务可以
额外奖励金币快速赚
积分升级了


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

平平安安
TOP
快速回复 返回顶部 返回列表