14
NetUSB-2401开发指南V3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波 NetUSB-2401 模块是本公司自行研发的PC端无线数据收发 模块,其并配备CYPRESS公司的USB SLAVE芯片EZUSB_FX2LP68013 和射频芯片RF2401,以2.4Ghz(2400~2485Mhz)的无线频段进行 无线数据传输,并通过USB2.0协议同PC进行高速通信,保证了 高速通信质量,并且可以在无线通信协议上实现严格的数据校 验机制,保证数据的可靠通信。 NetUSB-2401 模块可进行本机地址和发送地址的配置(以 及2401全部寄存器的配置),实现多点PC和PC,PC和电子系统的 数据传输。只要PC上都配有本公司的NetUSB2401无线USB模块和 相应的应用软件,即可实现PC和PC间的无线数据传输,实现方 便,简单;若要实现PC和电子系统的数据传输,应该在电子系 统上配置本公司的RF2401模块,即可实现。 本文介绍了PC和电子系统的数据传输时,电子系统上应该配 备的RF2401模块的驱动函数。

NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

  • Upload
    others

  • View
    28

  • Download
    0

Embed Size (px)

Citation preview

Page 1: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

NetUSB-2401开发指南V3.0 作者:刘春伟 胡文明 翁建永

陈佳 高良 李凡 陈林波

NetUSB-2401模块是本公司自行研发的PC端无线数据收发

模块,其并配备CYPRESS公司的USB SLAVE芯片EZUSB_FX2LP68013

和射频芯片RF2401,以2.4Ghz(2400~2485Mhz)的无线频段进行

无线数据传输,并通过USB2.0协议同PC进行高速通信,保证了

高速通信质量,并且可以在无线通信协议上实现严格的数据校

验机制,保证数据的可靠通信。

NetUSB-2401 模块可进行本机地址和发送地址的配置(以

及2401全部寄存器的配置),实现多点PC和PC,PC和电子系统的

数据传输。只要PC上都配有本公司的NetUSB2401无线USB模块和

相应的应用软件,即可实现PC和PC间的无线数据传输,实现方

便,简单;若要实现PC和电子系统的数据传输,应该在电子系

统上配置本公司的RF2401模块,即可实现。

本文介绍了PC和电子系统的数据传输时,电子系统上应该配

备的RF2401模块的驱动函数。

Page 2: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

一、模块介绍

NetUSB-2401

特点:

(1) 2.4Ghz 全球开放ISM 频段免许可证使用

(2) 最高工作速率1Mbps,高效GFSK 调制,抗干扰能力强,特

别适合工业控制场合

(3) 可以多点通信和跳频通信需要

(4) 内置硬件CRC 检错和点对多点通信地址控制

(5) 低功耗1.9 - 3.6V 工作,待机模式下状态仅为1uA

(6) 收发模式切换时间 < 200us

(7) 可软件设地址,只有收到本机地址时才会输出数据(提供

中断指示),可直接接各种单片机使用,软件编程非常方便

Page 3: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

二、原理简介

NetUSB-2401采用了RF2401芯片进行无线传输,默认情况下,一

次传输的有效载荷数据包的大小为28 字节,地址宽度为2 字节, CRC

校验启用,CRC模式16位 (PAYLOAD +ADDR_W+CRC_L = 32 BYTES)。

这些默认参数可以通过pc端的NETUSB.DLL提供的API进行设置。

NetUSB2401为设备间通信提供一个基础环境。

三、驱动函数说明

本公司已经做好了非常方便移植的驱动头文件,只要在您的工

程中包含NRF2401.C文件,并在主函数中包含NRF2401.H头文件,即

可实现。

该驱动是以AT89C2051 单片机进行制作的,您只需修改

NRF2401.H和NRF2401.C文件中的部分代码,即可快速的实现不同微

处理器的移植工作,并且在NRF2401.H文件中已经做了详细的介绍,

这里,我们再做简单地介绍。

以下是可能需要修改的部分:

在NRF2401.H文件中:

1. 模块引脚接口定义部分,可自行修改引脚配置,但切记不要修改

宏定义的变量名。

2. 若想在 I/O口有方向寄存器的单片机 上进行移植,请定义I/O的

位的方向,并在NRF2401.C文件中相关地方去掉有关的方向设置

语句的注释符。

Page 4: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

在NRF2401.C文件中:

1 TxAddress[] 数组,其存放了发送目标的地址,可进行修改其中

数值来选择发送目标。

2.定义本机地址部分,定义了本机的地址,可进行修改其中数值来

配置本机地址,但切 记不要修改宏定义的变量名

3 .600us 的延时函数,若您需要在其它微处理器上进行移植,则需

要修改该函数,实现600US的延时

以下是函数的声明:

1. Config2401 函数,其实现了初始化NRF2401,并配置好本机地址

等工作,在您的主函数开始时,需要调用一下

2. unsigned char nRF2401_RxPacket( unsigned char *RxBuf) 函

数,实现无线接收数据。RxBuf[]数组大小应为有效数据宽度

(DATA1_W),默认情况下,应为28字节。函数返回0,则代表没有数据

可以接收和接收数据失败,函数返回1则代表成功接收数据。接收道

得数据存放在RxBuf[]数组中。

3. void nRF2401_TxPacket( unsigned char *TxBuf)函数,实现无

线发送数据。需要发送的数据存放于TxBuf[]数组中,数组长度应该

与2401配置得有效数据宽度(DATA1_W)一致,默认应该为28字节。

如果发送数据少于配置得有效数据宽度(DATA1_W)(比如28字节),

那么在有发送数长度之外的数据是无效数据,接收方接收到的数据

包还是一个长度为配置有效数据长度(DATA1_W)的数据包。 函数

无返回值。

4. void SetTxMode(void)函数,设置无线收发器为发送状态,在

发送数据,即nRF2401_TxPacket前调用。

5. void SetRxMode(void)函数,设置无线收发器为接受状态,在

进行数据接收前,通过调用此函数,让无线收发器为接收数据状态。

在接收函数,即nRF2401_RxPacket前调用。

Page 5: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

四、下位机通信部分参考电路图

五、PC端编程环境设定说明

用户在PC端编程可以选用VC++、VB、Delphi、C++Builder、

Visual C#、 Java等可以调用标准C 语言接口函数的编程工具进行

编程。

VC7 下编程环境下设置:

(1).在(VC7)"项目->属性->链接器->输入->附加依赖项"中加入

NetUSB.lib 或在

(VC6)"Project->Settings->Link->Object/library" 中加入

NetUSB.lib

Page 6: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

(2).在你的程序中包含头文件NetUSB.h , 即#inlcude " NetUSB.h"

注:以上假定NetUSB.lib, NetUSB.h, NetUSB.DLL 都在当前目录,

如果不是请更改路径设置。

六、PC端编程环境设定说明

函数说明:

1)设置回调函数(数据接收)

原型:void NetUSB_SetCallback(NETUSB_PFUNC pFunc) 说明:每

次有数据收到,就调用pFunc,回调函数的类型为 voidCallback

(unsigned char* buff, size_t n) 返回值:没有返回值。

2)初始化USB,并启动监听线程

原型:int NetUSB_Init(HANDLE handle , int ps) 说明: 在使用

NetUSB 设备前,调用此函数进行初始华,同时启动了监听线程,当

有数据包收到时,将回调NetUSB_SetCallback 设置的回调函数。 其

中,handle为窗口句柄,ps 无线发送数时每个数据包的大小,单位

为字节,这个数值应该要和NETUSB参数设置的有效载荷数据宽度一

致。 返回值: 0 表示调用成功,-1表示调用失败。

3)停止监听线程(可恢复)

原型:int NetUSB_StopListen() 说明:调用此函数停止监听线程,

此时有数据到达时,将不回调NetUSB_SetCallback 设置的回调函

数。但此时,NetUSB 设备前的发送不受影响。 返回值: 0 表示调

用成功,-1表示调用失败。

4)重新启动监听

Page 7: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

原型: int NetUSB_ResumeListen() 说明: 用于重新启动监听线

程。只能用于因NetUSB_StopListen()的调用而停止线程的重新启

动。 返回值: 0 表示调用成功,-1表示调用失败。

5)主机向USB 发送数据,继而USB 将数据通过无线收发器发送数据

原型:int NetUSB_Send(char* buf, long length) 说明:发送缓

冲区buf 中length 字节的数据。调用前,length 表示将要发送的

自己长度;

返回值: 0 表示调用成功,-1表示调用失败。 注意,在一次发送还

没结束,即函数还没返回时,不能再次调用此函数.(尤其发送大块数

据时需要注意,函数具有自动分包的机制,将数据分成若干个包,消

耗时间将有所延长)

6)清理NetUSB

原型:int NetUSB_Fini() 说明:必须重新调用 NetUSB_Init 后,

才能使用NetUSB。 返回值: 0 表示调用成功,-1表示调用失败。

7)配置设备地址

原型:int NetUSB_SetAddress(char* buf, bool b) 说明:buf 中

保存配置地址,以字符串形式提供,比如 “DD CC CC BB AA”, 其

中 DD表示地址的最高位字节,AA 表示最低位字节,各字节间用空

格分割。

Page 8: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

b ==true,配置本端接收地址 Rx; b==false,配置发送目标地址

Tx。返回值: 0 表示调用成功,-1表示调用失败。

8)测试USB 硬件是否和软件相互连接

原型: int NetUSB_Check( );

说明: return 0 表示连接正常; return -1 表示连接不正常,应该

重新连接NETUSB(通过调用NetUSB_ReConnecting函数)。

9)重新连接设备

原型: int NetUSB_ReConnecting 说明: 一般NetUSB_Check 返回

-1 时候调用 返回值:函数返回值没意义。

10)设置pc 端发送的每个数据包大小

原型: int NetUSB_PacketSize(int ps=28); 说明: 参数ps 和 int

NetUSB_Init(HANDLE handle , int ps) 中的ps意义一致。PS不能

超过无线收发器接收发送的最大有效载荷数据包产度,具体参见各

收发器Datasheet。 返回值: 0 表示调用成功,-1表示调用失败。

11)配置 2401 全部配置寄存器 原

型: int NetUSB2401_RfSettingConfig(nRf2401Setting nfr); 说明:

// 配置 2401 寄存器(具体信息见下述结构体) 返回值: 0 表示调用

成功,-1 表示调用失败。

struct nRf2401Setting // 2401 配置寄存器结构体

Page 9: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

{unsigned char TEST_2; // Reserved for testing (芯片测

试用,无需修改)

unsigned char TEST_1; // Reserved for testing

unsigned char TEST_0; // Reserved for testing

unsigned char DATA2_W; // Length of data payload section

Rx channel 2

unsigned char DATA1_W; // Length of data payload section

Rx channel 1

unsigned char ADDR2_4; // Up to 5 byte address for Rx

channel 1

unsigned char ADDR2_3;

unsigned char ADDR2_2;

unsigned char ADDR2_1;

unsigned char ADDR2_0;

unsigned char ADDR1_4; // Up to 5 byte address for Rx

channel 1

unsigned char ADDR1_3;

unsigned char ADDR1_2;

unsigned char ADDR1_1;

unsigned char ADDR1_0;

unsigned char ADDR_W; // Number of address bits(both Rx

channels)

unsigned char CRC_L; // 8 or 16 bit CRC

unsigned char CRC_EN; // Enable on-chip CRC

generation/checking

unsigned char RX2_EN; // Enable two channel receive mode

unsigned char CM; // Communication mode( Direct or

ShorckBurst)

unsigned char RFDR_SB; // RF data rate (1Mbps requires 16Mhz

crystal)

unsigned char XO_F; // Crystal frequency

unsigned char RF_PWR; // Rf output power

unsigned char RF_CH; // Frequency channel

unsigned char RXEN; // Rx or Tx operation

};

12)配置2401全部配置寄存器

Page 10: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

原型: int NetUSB2401_RfSettingConfig2(char* buf); 说明:为

方便其他语言,参数使用一个指针,指针指向的内存必须至少

有25 字节的配置值:

[TEST_2,TEST_1,TEST_0,DATA2_W,DATA1_W,ADDR2_4,ADDR2_3,ADDR

2_2,ADDR2_1,ADDR2_0,ADDR1_4,ADDR1_3,ADDR1_2,ADDR1_1,ADDR1_

0,

ADDR_W,CRC_L,CRC_EN,RX2_EN,CM,RFDR_SB,XO_F,RF_PWR,RF_CH,RX

EN] 共25 个字节,必须严格安装顺序! 其中,开始三个字节为测试用,

在本设置中可以随便设置. 返回值: 0 表示调用成功,-1表示调用

失败。

13)配置 Frequency channel (Channel RF 频率)

原型:int NetUSB2401_SetRF_CH(unsigned char RF_CH=0x2); 说明:

Channel rf =2400Mhz +RF_CH * 1.0 Mhz 返回0,表示成功, -1表示

失败

七、示例程序

1) 初始化:使用VC6.0 建立一个基于对话框的工程,然后在

BOOLCDemoDlg::OnInitDialog() 函数的加入如下代码进行初始

化:

// TODO: Add extra initialization here

NetUSB_SetCallback(CallbackFunc,28);

Page 11: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

NetUSB_Init(this->GetSafeHwnd()); 其中,CallbackFunc 为一

个回调函数,在本实例中,为 static void CallbackFunc

(unsigned char* buf, size_t n) { // buf 为缓冲区,n为buf 中

的有效字节数 }

这样,NetUSB已经初始化,并开始工作,当有时间到达时,我们可

以在CallbackFunc中进行处理。 一旦有数据接收到,CallbackFunc

被调用,演示程序将显示收到的数据,十六进制显示,如下:

2)发送: 在界面上放置一个Button,双击,产生一个函数,

在其中加入

unsigned char buf[]

={2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}

;

Page 12: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

long len=sizeof(buf);

NetUSB_Send(buf,len); 这样,当NetUSB_Send返回时,主机就

向USB发送了buf中的数据,同时,NetUSB确保数据通过无线发送成

功。(第一字节为数字2,在演示板上右LED灯闪烁)

注意,在发送长的数据包时,要灯数据发送完成,即发送程序返回,才

能再次发送数据.

3)设置地址: unsigned char buf=“cc cc cc cc AA”; long length

=strlen(buf)+1;

NetUSB_SetAddress(buf, true); 如上函数,就设置了本NetUSB

接收的地址。

Page 13: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

4)程序退出清理工作 比如在此VC演示程序中 void

CConfigPaneDlg::PostNcDestroy() {

// TODO: Add your specialized code here and/or call the base

class

NetUSB_Fini();

CDialog::PostNcDestroy();

}

补充说明1:

NetUSB第一次在电脑上使用的时候,需要拷贝dirver到硬盘,

然后选择USb.inf 进行pc 端驱动的安装,和普通驱动安装一样;

Page 14: NetUSB-2401开发指南V3img08.b2b.hc360.com/pic-8/handbook-pic-6/8-6-1642286.pdf · netusb-2401开发指南v3.0 作者:刘春伟 胡文明 翁建永 陈佳 高良 李凡 陈林波

补充说明2:

PC 端动态库 NETUSB.DLL,可以在C、C++,delphi,c#等编程语

言或环境中使用,我们提供delphi和vc演示程序。