通信与网络中的一种基于通信与网络中的一种基于USB的通用无线传输接口设计的通用无线传输接口设计
摘 要:本文介绍了一种基于微处理器LPC2210的USB接口的设计,并使用射频收发芯片nRF2401设计了USB接
口的无线通信模块。阐述了该系统的工作原理、硬件构成及软件设计方案。实现了基于USB接口的无线串行通
信。 关键词:LPC2210;USB;nRF2401;CY7C63231 引言 USB为USB设备与USB主机之间大量的
数据传输提供了高速、可靠的传输协议。而射频通信以其优点也应用在越来越多的场合,本文所设计的USB无
线串行接口电路由nRF2401单片射频收发器、LPC2210微控制器和USB接口芯片组成。本系统充分利用USB的
数据传输功能,设备连接方便,系统可用于进行无线串行数
摘 要:本文介绍了一种基于微处理器LPC2210的USB接口的设计,并使用射频收发芯片nRF2401设计了USB接口的无线
通信模块。阐述了该系统的工作原理、硬件构成及软件设计方案。实现了基于USB接口的无线串行通信。
关键词:LPC2210;USB;nRF2401;CY7C63231
引言
USB为USB设备与USB主机之间大量的数据传输提供了高速、可靠的传输协议。而射频通信以其优点也应用在越来越多
的场合,本文所设计的USB无线串行接口电路由nRF2401单片射频收发器、LPC2210微控制器和USB接口芯片组成。本系统
充分利用USB的数据传输功能,设备连接方便,系统可用于进行无线串行数据双向传输,可在仪器仪表、计算机遥测/遥控、家
庭网络等系统中应用。
硬件设计
整个硬件电路设计可以分为两个部分: 使用带并行总线的USB接口器件PDIUSBD12 设计LPC2210的USB接口;使用
Cypress公司的USB外围控制芯片CY7C63231设计射频芯片nRF2401的USB接口。两个部分通过USB口相接。
采用Philips公司的并行USB接口芯片 PDlUSBDl2,符合USB1.1版本规范。 这里以LPC2210微控制器与PDIUSBD12构成
USB设备。
PDIUSBD12使用LPC2210外部存储控制的Bank2部分,其地址如下:数据地址 0x82000000,命令地址 0x82000001。
RST_USB、SUSP为LPC2210输出引脚,PDIUSBD12中断信号为中断输入信号,且为外部中断0。C1、C2和X1为
PDIUSBD12提供工作所需的时钟输入;发光二极管GoodLink在正常通信时闪烁;PDIUSBD12的AD0连接到LPC2210的A0。
当LPC2210在A0引脚输出1时,表示输出到PDIUSBD12数据总线D0 ~ D7上的数据为命令字,当A0引脚输出0时,表示输出
到PDIUSBD12数据总线D0 ~ D7的数据为数据字。
表1? USB驱动程序软件包6个API函数
CY7C63231是8位RISC微处理器,特别适用于USB嵌入式设计,工作电压是5V。nRF2401是单片射频收发芯片,工作模
式有4种:收发模式、配置模式、空闲模式和关机模式。所有配置工作,工作模式选择和收发数据都通过用电压调整芯片
LP2980IM5-3.3产生nRF2401的工作电压3.3V,同时,SN74LVC4245可实现控制口3.3V和5V的电平转换,使工作在不同电压
水平的这两种芯片正常连接。
软件设计
PDIUSBD12驱动软件构架
为了增强驱动软件的可移植性,且容易维护,采用分层的方法编写PDIUSBD12的驱动程序。在LPC2210应用?C/OS-II操
作系统的基础上综合考虑USB协议、PDIUSBD12硬件接线、?C/OS-II的结构来组织驱动软件的构架,图4所示为USB驱动程
序软件分层结构。
USB驱动程序软件包提供给用户6个API函数,这6个函数都在USB应用层中定义。这6个函数如表1所示。????
下面以接收和发送数据任务为例来说明怎样使用表1的API函数,例子演示了一个任务,从端点2发送1024个字节。部分源代码
如下:
#define RW_NUMS 1024 //任务收发数据字节数
void TaskRec1(void *pdata)
{ #if? OS_CRITICAL_METHOD == 3? /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT8U Buff[RW_NUMS]; //接收及发送缓冲区
INT8U ack = 0x01; //应答主机数值
INT8U err; //函数返回值
pdata = pdata;? /* Prevent compiler warning */
for (;;){
OSSemPend(TaskRec1_Sem,0,&err);??? //等待TaskStart的命令
err = WritePort1(1,&ack,200);????????? //应答USB主机
if (err == USB_NO_ERR){??????????
?//应答正确
err = ReadPort2(RW_NUMS, Buff,200);? //接收数据
OSTimeDly(1);????????????????????
//延时一个时钟周期
if (err == USB_NO_ERR){??????????
?//接收正确
Buff[0] = OSPrioCur;???????????????
评论0
最新资源