无线USB的设计与实现

时间:2013-10-26来源:网络


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

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

对PC而言,无线USB传输模块是它的一个USB外设,因此必须提供USB设备的驱动程序。驱动程序的设计采用WDM模型[5],使用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周围的布线和天线的设计很有讲究,一定要按照手册的要求进行设计。

参考文献:

[1] Universal Serial Bus Specification Revision 1.1. http:/
/www.usb.org/developers/docs.html , 1998.

[2] Philips Semiconductors PDIUSBD12 Specification. http://www.semiconductors.philips.com /, 1999.

[3] Nordic 433Mhz Single Chip RF Transceiver nRF401 datasheet. http:// www.nvlsi.no/thenRF401.htm, 2000.

[4] 徐爱钧.单片机高级语言C51 Windows环境编程与应用[M].北京: 电子工业出版社, 2001.

[5] KRULINSKI D J. Programming Microsoft Visual C++6. 0技术内幕[M].北京: 希望电子出版社,1999.

[6]PDIUSBD12 datasheethttp://www.dzsc.com/datasheet/PDIUSBD12+_544412.html.


[7]PCBdatasheethttp://www.dzsc.com/datasheet/PCB_1201640.html.


[8]nRF401datasheethttp://www.dzsc.com/datasheet/nRF401_521026.html.

1 2

关键词: 无线USB P89C58UBP 数据传输率

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版