通信新技术实验报告Word文档下载推荐.docx

上传人:b****2 文档编号:715601 上传时间:2023-04-29 格式:DOCX 页数:96 大小:364.36KB
下载 相关 举报
通信新技术实验报告Word文档下载推荐.docx_第1页
第1页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第2页
第2页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第3页
第3页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第4页
第4页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第5页
第5页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第6页
第6页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第7页
第7页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第8页
第8页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第9页
第9页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第10页
第10页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第11页
第11页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第12页
第12页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第13页
第13页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第14页
第14页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第15页
第15页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第16页
第16页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第17页
第17页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第18页
第18页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第19页
第19页 / 共96页
通信新技术实验报告Word文档下载推荐.docx_第20页
第20页 / 共96页
亲,该文档总共96页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

通信新技术实验报告Word文档下载推荐.docx

《通信新技术实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《通信新技术实验报告Word文档下载推荐.docx(96页珍藏版)》请在冰点文库上搜索。

通信新技术实验报告Word文档下载推荐.docx

1.JN5139最小系统及外围部件

基于JN5139芯片所设计的最小系统。

SPISSZ与SPISSM连接,SPISWP接高电平,JN5139上电自动复位或按键复位,SPIMISO为编程控制端,与复位按键配合使用,经DIO6、DIO7实现程序BIN文件的下载。

JN5139模块提供如下外围部件功能:

5个主SPI选择口;

2个UART串口;

2个带捕获比较功能的可编程定时器计数器;

2个可编程睡眠定时器和1个滴答定时器;

两线串口(兼容SMbus和I2C);

从SPI接口(与数据IO共享);

21个数据IO口(与UART串口、定时器及SPI选择复用);

4通道12位100kbps模数转换输入;

2个11位数模转换输入;

2个可编程模拟比较输入;

内部温度传感及电压监控。

2.开发板

基于JN5139芯片所设计的WSN开发板,其部件如下:

U1:

JN5139系列Zigbee模块;

U2:

板载光照度传感器;

U3:

板载温湿度一体传感器;

J3:

外供电(5VDC)接口;

Swith:

供电开关;

J7:

编程与运行状态选择,左跳并给传感器板加电,则进入可编程状态,或者在加电的情况下,按住RESET按钮,左跳J7,然后放开RESET按钮,再右跳J7,也可进入可编程状态,退出可编程状态,只需要按一下RESET按钮即可;

J8:

Flash写保护跳选,编程与运行都跳选到RUN(右跳);

DB9:

RS232编程接口;

UART0:

串口0;

JP6:

模块所有管脚的引出排线;

LCD:

液晶接口;

Power:

电源指示灯;

REST:

复位按键;

LED3,LED2,LED1,LED0:

可编程LED,分别对应DIO19、DIO18、DIO17、DIO16;

SW3,SW2,SW1,SW0:

可编程按键,分别对应DIO20、DIO11、DIO10、DIO9;

GND:

地。

3.软件的安装与调试

(1)建立开发环境

在光盘中找到software文件夹下的JN-SW-4031-SDK-Toolchain-v1.1.exe文件(或者在Jennic公司网站上获得该文件)并运行。

在安装过程中,最简单的方法是按默认设置安装。

(2)编写程序代码并进行下载与调试

编写代码完成后,可按Ctrl+F9快捷键或选择主菜单Build下的Build子菜单或点击图标建立可执行二进制代码文件。

若工程编译(Build)成功,则可在C:

\Jennic\cygwin\jennic\SDK\Application

\test\JN5139_Build\Release目录下生成test.bin文件。

否则,出错信息会显示在信息窗口中,根据出错信息调试程序。

JennicJN51xxFlash可编程器是用来将编译好的二进制代码文件(*.bin)下载到JN51xx模块中的Flash芯片的代码下载工具,它通过串行总线与JN51xx模块相连。

JennicJN51xxFlash可编程器的用户界面如图1-18所示,它可以将*.bin文件下载到目标板或模块中,下载步骤如下:

a.用串口线连接PC机和目标板或模块。

b.运行Flash可编程器,选择PC机与目标板相连的串行通讯端口。

c.将目标板上的J7跳线至编程(左侧)状态,给目标板上电,按一下RESET按钮后释放,再恢复J7跳线至右侧。

d.在图1-18所示的Flash可编程界面上点击Browse按钮(图中①处)查找并选择要下载的目标文件。

e.选择好目标文件后,点击Progrm按钮(图中②处)开始下载。

在下载的过程中会显示一个下载的进度条,如图1-19所示。

当下载完成后,将显示下载成功或错误,如图1-20所示下载成功对话框。

如果遇到错误,请尝试重新下载。

f.成功下载后,关掉Flash可编程器再给目标板或模块上电、或按Reset按钮,则刚下载的代码自动运行。

4.常用API接口函数介绍

(1)应用程序初始化函数如下:

AppColdStart()

应用程序的入口,相当于标准C中的main函数,结点上电后将从这里开始执行应用程序。

该函数需要完成以下功能:

1.通过设置函数中的参数值来设置信道号(JZS_sConfig.u32Channel)和PANID(JZS_sConfig.u16PanId);

2.调用函数JZS_u32InitSystem(TRUE)来初始化ZigBee协议栈;

3.调用函数vInit()对用户的应用进程进行初始化,包括初始化按钮动作和程序变量,设定绑定等操作;

4.调用bBosRun(TRUE)来启动操作系统BOS。

用户可根据具体的应用设计该函数。

AppWarmStart()

结点从内存供电的休眠模式唤醒的时候将进入这个函数。

启动后所有的内存数据都没有丢失。

如果设备不需要休眠唤醒功能,这个函数可以为空。

一般情况下,该函数会调用AppColdStart()重新启动设备。

(2)应用程序调用协议栈的函数如下:

JZS_u32InitSystem()

初始化JennicZigBee协议栈。

JZS_vStartStack()

设备将作为Coordinator、Router或者EndDevice启动。

如果是Coordinator将启动网络,如果是Router或者EndDevice将加入网络。

JZS_vStartNetwork()

手动控制Coordinate网络启动,相对于自动网络启动,使用该功能,需要设置JZS_sConfig.bAutoJoin=FALSE.该函数执行后,返回的协议栈事件为JZS_EVENT_NWK_STARTEDJZS_EVENT_FAILED_TO_START_NETWORK。

vAppSaveContexts()

保存网络参数以及用户的数据,如果你的应用是固定点的话,建议你进行网络参数的保存。

u16AppGetContextSize()

用来获取保存的网络参数以及用户数据的尺寸。

vAppGetContexts()

读取保存的网络参数的内容。

(3)协议栈调用应用函数的函数如下:

JZA_boAppStart()

让用户可以在协议栈启动前定义endpoint的descriptor,通常开发人员应该在这个函数中调用JZS_vStartStack启动协议栈。

JZA_vStartEvent()

协议栈将通过这个函数反馈网络层的一些网络事件,比如网络启动成功、结点加入成功或者数据发送完成等。

JZA_vPeripheralEvent()

该函数主要用来处理外部的硬件中断,比如按钮、定时器、UART等。

JZA_vAppEventHandler()

BOS周期性地调用该函数处理硬件中断。

用户可以利用它进行网络状态的判断和按钮的检查等,也可以在这个函数中,写入自己的应用程序。

在设计该函数时,要尽可能地使其运行时间短,以便BOS调度其他活动事件。

JZA_vAppDefineTasks()

该函数用于向BOS注册自己的用户任务,一般很少使用该函数。

JZA_bAfMsgObject()

收到其他结点发送来的MSG帧的处理函数。

实验二GPIO及LCD使用实验

1.运用基本GPIO函数设计一个程序,分别通过各按键切换对应LED亮灭状态。

2.设计一个程序,实现LED自动闪烁,周期为1秒。

3.设计一个程序,按下按键SW0,LCD显示数据加1;

按下按键SW1,LCD显示数据减1。

1.GPIO使用

Jennic的模块具有21路通用的GPIO,可以通过软件的方式进行设置,这些GPIO口和其他的外围接口是共用的。

其共用关系如表2-1所示:

表2-1:

IO口和其他的外围接口共用关系

DIO引脚

共用关系

DIO0

SPI从选择1(输出)

DIO1

SPI从选择2(输出)

DIO2

SPI从选择3(输出)

DIO3

SPI从选择4(输出)

DIO4-DIO7

UART0

DIO8-DIO10

Timer0

DIO11-DIO13

Timer1

DIO14-DIO15

Serialinterface

DIO16

IPdatain

DIO17-DIO20

UART1

常用函数:

(1)对于GPIO的操作首先需要调用vAHI_DioSetDirection来进行GPIO输入输出方向的设置。

该函数的原型如下:

PUBLICvoidvAHI_DioSetDirection(uint32u32Inputs,uint32u32Outputs);

这里u32Inputs和u32Outputs是设置GPIO输入和输出地mask码。

(2)对于GPIO的输出操作比较简单,通过调用如下原型函数:

PUBLICvoidvAHI_DioSetOutput(uint32u32On,uint32u32Off);

这里u32On和u32Off分别是设置GPIO输出高、低电平的掩码。

(3)对于GPIO的输入操作,通常调用如下原型函数:

PUBLICuint32u32AHI_DioReadInput(void);

返回值对应每个输入DIO的高低电平。

2.LED使用

LED驱动库文件提供了LED的控制方法,在LedControl.);

3.按键使用

按键驱动库文件提供了按键的控制方法,在Button._s*pauTransactions,

APS_TxOptions_eu8txOptions,

NWK_DiscoverRoute_eeDiscoverRoute,

uint8u8RadiusCounter);

各形参描述如下:

eAddrMode:

该参数定义了发送的目标地址模式,它是APS_Addrmode_e枚举类型的数据。

u16AddrDst:

该参数是数据要发送的目标地址,地址范围为0x0000到0xFFFE。

u8DstEP:

目标地址的端口号,范围是0x01到0xF0。

u8SrcEP:

源地址的端口号,范围是0x01到0xF0。

u16Profileid:

所采用的profileID。

u8ClusterId:

所采用的clusterID。

eFrameType:

使用的数据帧类型0x01=KVP,0x02=MSG。

u8TransCount:

本次请求发送的数据事务的数量。

取值范围在0到0x0f。

pauTransactions:

该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着需要发送的数据。

bTxOptions:

指定发送方式,可以选择下列的值,这些值可以进行逻辑或。

u8DiscoverRoute:

设定所采用的路由发现模式。

u8RadiusCounter:

数据发送的深度,即所发送数据包的最大转发次数,如果设置为0,协议栈将采用2倍的MaxDepth发送深度。

4.收到MsgObject调用的函数JZA_bAfMsgObject()

该函数属于协议栈调用应用程序的函数,用来处理来自其他结点发送来的MSG帧。

该函数的原型为:

PUBLICbool_tJZA_bAfMsgObject(APS_Addrmode_eeAddrMode,

uint16u16AddrSrc,

uint8u8SrcEP,

uint8u8LQI,

uint8u8DstEP,

uint8u8ClusterID,

uint8*pu8ClusterIDRsp,

AF_Transaction_s*puTransactionInd,

AF_Transaction_s*puTransactionRsp)

该参数定义了发送的目标地址模式,它是APS_Addrmode_e枚举类型的数据.

u16AddrSrc:

该参数是数据发送方的源短地址,地址范围为0x0000到0xFFFE。

源端口号,范围是0x01到0xF0。

u8LQI:

接收帧的链路质量。

目标端口号,范围是0x01到0xF0。

*puTransactionInd,:

该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着接收的数据。

*puTransactionRsp:

该参数是一个指向AF_Transaction_s结构体类型的指针,在该结构体类型的变量中,存放着response信息。

5.简单设备描述函数afmeAddSimpleDesc()

该函数属于AFME(AFSub-layerManagementEntity)类函数,在增加设备描述符函数vAddDesc(void)中调用,其功能是为一个endpoint增加一个简单描述符(simpledescriptor)。

如果一个endpoint上没有正确定义的简单描述符,那么它将不能正确地接收来自其他结点的数据,通常简单描述符应该在设备建立网络成功或者加入网络成功后添加。

三、软件设计

1.分别为Coordinator和EndDevice设计一个程序,分别用按键控制切换对方对应LED亮灭状态。

如Coordinator的SW3控制EndDevice的LED3,EndDevice的SW0控制Coordinator的LED0。

Coordinator:

程序首先执行AppColdStart()函数,设置信道号和PANID,然后调用vInit()函数,初始化系统、按键、LED灯和协议栈,若启动成功,则硬件上的标志位LED0灭,其次再判断是否有新的结点加入,若有新结点加入,硬件上得标志位LED1灭;

判断是否有按键被按下,若按下了则调用vSendData()函数向enddevice发送一个数据,在程序运行过程中若接收到MSG信息,则调用vLedControl(0,bToggle)控制灯的亮灭。

Coordinator主程序流程图:

Enddevice:

程序首先执行AppColdStart()函数,设置信道号和PANID,然后调用vInit()函数,初始化系统、按键、LED灯和协议栈,并且启动BOS定时时钟;

其后判断是否加入网络成功,若加入成功,则硬件上的标志位LED0灭;

主程序流程图如下图所示:

Enddevice主程序流程图:

2.分别为Coordinator和EndDevice设计一个程序,其功能为:

按下Coordinator的SW0,某变量X(初始值0)显示在LCD上,同时将X发送给EndDevice,EndDevice收到该数据后进行数据处理(加1),等待1秒后再将其发送给Coordinator,Coordinator收到后将该值赋予X并显示在LCD上,同时再次发送给EndDevice,如此重复运行。

程序首先执行AppColdStart()函数,设置信道号和PANID,然后调用vInit()函数,初始化系统、按键、LED灯和协议栈,并且启动BOS定时时钟;

其后判断网络是否启动成功,若启动成功,硬件上得标志位LED1灭;

判断是否有按键被按下,若按下了,调用函数vSendData()向EndDevice发送x;

在程序运行过程中若接收到EndDevice发送的数据,调用LED显示,再调用函数vSendData()向EndDevice发送x。

判断若接收到Coordinator发送的数据,将接收的数据加1,最后调用BOS时钟周期性调用vAppTick函数,函数中调用vSendData()向Coordinator发送x,这样就能实现定时发送。

四、实验结果与分析

1.在实验一中分别按动Coordinator的SW0~SW3,在Enddevice上的LED0~LED3能够实现相应的亮灭,同样地,分别按动Enddevice上的SW0~SW3,也能使得Coordinator上相应的LED0~LED3亮灭。

可以达到按键控制双方的效果,符合题目要求,说明程序设计正确。

2.在实验二中按动Coordinator的SW0,可以看见LCD液晶显示频上数据从0开始自加一,说明Coordinator和Enddevice之间相互发送数据了,符合题目要求,说明程序设计正确。

五、存在问题和解决方法

1.在下载完程序上电测试时,发现Coordinator和Enddevice的LED0、LED1均不灭,那就说明网络建立没有成功,不能实现相互间的通信,考虑到这有可能是信道干扰的问题,和其他人的信道相冲突了。

于是,我将信道改成了21,同时将网络号也改掉了,重新进行下载,上电后,测试灯均灭掉了,说明网络建立成功,可以实现通信。

2.在实验一中,当按下SW0是LED0亮时,必须按两次SW1才能使LED1亮,先开始以为是按键的问题,可是后来发现自己程序中指定义了一个变量bToggle,所以只有当LED0灭了后,那么按一下SW1则LED1就亮了,这是程序中需要改进的地方。

实验四两个EndDevice之间的无线通信实验

1.分别为Coordinator和EndDevice设计一个程序,其功能为:

Coordinator负责建立网络和分配短地址。

按下EndDeviceA的按钮SW0发送广播请求绑定信息,LED0闪烁,收到该信息的EndDeviceB的LED0闪烁,按下其按钮SW0则返回绑定应答信息,同时LED0处于点亮状态,EndDeviceA收到应答后LED0也处于点亮状态,表示双方绑定成功。

之后按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮灭状态。

如果按下任何EndDevice的SW1则解除绑定,各EndDevice的LED0灭,且LED1闪烁3秒。

Coordinator负责建立网络和分配短地址及绑定的媒介。

按动EndDevice按钮SW0,向Coordinator发送绑定请求信息,LED0闪烁10秒,Coordinator收到该信息后记录其短地址并定时10秒,按动另外一个EndDevice的按钮SW0向Coordinator发送绑定应答信息,LED0闪烁5秒,在有效定时时间10秒内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个短地址发送给两个对应EndDevice,两个EndDevice收到短地址后分别点亮LED0(不再闪烁),若在规定时间内没有建立绑定关系,超时后灭LED0。

绑定状态下按动每个EndDevice的按钮SW2、SW3可分别切换对方对应LED亮灭状态。

1.通过对方的MAC地址获得它的16位短地址

在基于JennicZigBee协议栈中,每个设备必须知道对方的16位短地址,才能进行直接通信,而16位短地址是在EndDevice或Router加入网络时由Coordinator动态分配的。

如果一个设备(请求者)知道另一个设备的MAC地址时,则请求者可通过调用zdpNwkAddrReq()函数广播查寻与该MAC地址相匹配的结点,当匹配的结点收到该数据包则返回自己的短地址给请求者,请求者即可用该短地址与其进行通信。

2.通过广播请求对方绑定获得它的16位短地址

在使用afdeDataRequest()函数发送数据包时,将16位的目标地址设置为0xffff,即可以广播的形式将数据包发送出去。

一个设备(请求者)想获取另一个设备的16位短地址的方法是:

发送一个广播请求绑定指令数据包,符合条件的结点(如判断指令包内容,按下按钮等)发送应答包(含自己的短地址)给请求者,请求者即可用该短地址与其进行通信。

3.通过发送请求应答绑定信息给Coordinator获得对方的16位短地址

按动EndDevice或Router按钮,调用afdeDataRequest()函数向Coordinator发送绑定请求信息,Coordinator收到该信息后记录其短地址并定时,按动另外一个结点的按钮使用afdeDataRequest()函数向Coordinator发送绑定应答信息,在有效定时时间内若Coordinator收到该应答信号,则记录其短地址,分别将记录的两个段地址发送给两个对应结点,两个结点收到短地址后便可以相互直接通信。

4.高功率模式

M02与M04高功率模块使用时,需要进行高功率配置,一般在初始化阶段设置。

高功率模块配置函数原型为:

VoidvAHI_HighPowerModuleEnable(bool_tbRFTXEn,

Bool_tbRFRXEn);

5.网络地址请求函数zdpNwkAddrReq()

在Coordinator与EndDevice实现的点对点实验介绍了Coordinator获取16位短地址的方法,而对于EndDevice和Router,当一个结点知道另一个结点的MAC地址后,则可以通过网络地址请求函数zdpNwkAddrReq()以广播的方式发送数据包,查找与该MAC地址相匹配的结点在网络中的短地址。

协议栈可通过调用JZA_vZdpResponse()函数处理响应消息。

6.网络地址请求响应函数JZA_vZdpResponse()

JZA_vZdpResponse()是一个协议栈调用应用程序的函数,当一个结点通过zdpNwkAddrReq()发送查找另一个结点的短地址后,匹配的结点发送的应答消息可通过请求者的协议栈调用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2