zigbee学习之JN5169通用函数

本文详细介绍了JN5169在Zigbee应用中的通用函数,包括API初始化、无线电配置、天线多样性、随机数生成器、访问内部NVM以及休眠状态下保留调试信息的操作。重点讲解了传输功率设置、天线切换机制和随机数生成的模式。
摘要由CSDN通过智能技术生成

通用函数general functions主要包括:
(1)API初始化;
(2)无线电传输功率的配置;
(3)使用随机数生成器;
(4)访问内存非易失性内存;
(5)保留休眠状态下的调试信息

1、API初始化

在调用来自JN516x集成外设API的任何其他函数之前,必须调用函数**u32AHI_Init()**来初始化API。这个函数必须在JN516x微控制器的每次复位和唤醒(退出休眠模式)之后调用。


注意:如果您使用JenOS (Jennic操作系统),则不能在代码中显式地调用u32AHI_Init(),因为该函数由JenOS内部调用。这主要适用于正在开发ZigBee PRO应用程序的用户。


2、无线电

2.1 传输功率

JN516x设备的无线电传输功率可以改变。您可以使用NXP 802.15.4堆栈API中的**eAppApiPlmeSet()**函数来设置传输功率(在所有JN516x sdk中AppApi.h中提供)。所需的函数调用是:

eAppApiPlmeSet(PHY_PIB_ATTR_TX_POWER, x);

其中x是一个6位的补码功率电平,对应的输入范围是-32到31dbm。实际中,这个值被映射到一个实际的传输水平:
(1)JN5168,JN5164,JN5161,它映射到一个四个级别:-32,-20,9和0 dBm。
(2)JN5169,-32到10dBm.
**注意:函数bAHI_PhyRadioSetPower()已经从JN516x集成外围设备API中删除。如果更新之前使用函数调用bAHI_PhyRadioSetPower(y)**的现有代码,则上述对eAppApiPlmeSet()调用中的x可以计算为34+10*y。

2.2 接收功率(仅限JN5169)

JN5169可以在输入饱和之前接收功率高达10 dBm的无线电信号。然而,可以将设备配置为在输入信号功率降低为0 dBm时饱和,这具有吸收较少电流和延长电池寿命的优点。这个减少的最大输入级别可以使用函数**vAHI_RadioSetReducedInputPower()**来启用。

3、天线多样性

JN516x设备提供了天线分集设施,允许两个天线连接到设备上。如果实现此特性,并且通过当前天线的发射和/或接收性能被认为较差,则自动启动到替代天线的切换。
如果要使用天线分集,两个天线必须通过2状态开关连接到JN516x设备,该设备由DIO引脚上的互补信号输出对控制。默认情况下,这些引脚是DIO12和DIO13,但是,在JN5169设备上,可以使用**vAHI_AntennaDiversitySetPinLocation()**函数选择性地选择DIO0和DIO1。在一个位置(如DIO12-13 = 10),交换机将JN516x器件的RF_IN引脚连接到一个天线,在另一个位置(如DIO12-13 = 01),交换机将这个引脚连接到另一个天线。此连接如下面的图2所示。

在这里插入图片描述
DIO12和DIO13引脚(或JN5169上的DIO0和DIO1)必须首先通过调用函数**vAHI_AntennaDiversityOutputEnable()**来启用天线分集。天线分集通过调用该函数在应用程序中启用。
vAHI_AntennaDiversityEnable()。这个功能允许天线分集为发射和接收路径单独启用(或为两种路径)。天线分集在发射和接收情况下的操作概述如下:
(1)发送:决定是否切换天线是依赖于内部使用IEEE 802.15.4 MAC确认提供服务。一旦IEEE 802.15.4包被传输,无线电收发器将进入接收模式,并等待目标节点的确认。如果没有收到确认,设备将在替代天线上重试传输(重试的次数在IEEE 802.15.4 MAC中是可配置的)。选定的天线在每次后续重试时都被切换。
(2)接收:JN516x设备每40µs测量相关广播频道接收到的能量。将测量到的能量等级与预先设定的能量阈值进行比较。如果测量结果低于这个阈值,则切换天线,且满足一下条件:
1.无线电不处于接收数据包的过程;
2.在40us内没有检测到信号质量大于最小阈值;
3.无线电没有等待之前传输的确认;

通过**vAHI_AntennaDiversityControl()函数可以确定信号能量和信号质量阈值;
当前的天线分集状态可以通过函数
u8AHI_AntennaDiversityStatus()获得。这个函数返回最后一个传输包使用的天线,最后一个接收包使用的天线和当前选择的天线。
当前选择的天线可以通过调用函数
vahi_antennadiversitswitch()来手动切换。通常不需要调用这个函数,因为预计大多数应用程序将使用通过调用vAHI_AntennaDiversityEnable()**来启用的自动发送和/或接收天线分集控制特性。

4、随机数生成器

JN516x设备具有随机数生成器,可以产生16位随机数的两种模式之一:
(1)单发模式:发生器产生一个随机数后停止;
(2)连续模式:连续运行并生成一个新随机数发生器每256µs。
可以使用**vAHI_StartRandomNumberGenerator()函数在上述任意一种模式中启动随机数生成器。这个函数也允许启用一个中断,当一个随机数变得可用时就会产生一个中断——这是通过使用函数vAHI_SysCtrlRegisterCallback()注册的回调函数作为一个系统控制器中断来处理。
随后可以使用函数
u16AHI_ReadRandomNumber()读取随机生成的值。新随机数的可用性,以及因此需要调用’ read '函数,可以通过以下任意一种方法确定:
(1)等待一个随机数字生成器中断,如果启用;
(2)定期调用函数
bAHI_RndNumPoll()调查可用性的一个新的随机值;
在连续模式下运行时,可以使用函数
vAHI_StopRandomNumberGenerator()**停止随机数生成器。
**注意:**随机数发生器使用32kHz时钟域(见3.1节),如果使用高精度的外部32kHz时钟源,将无法正常工作。因此,如果在应用程序中产生随机数,建议使用内部RC振荡器或低精度的外部时钟源。在切换到高精度外部时钟之前,您也可以在您的应用程序中生成随机数。

5、访问内部NVM

JN516x设备包含一个小块的非易失性存储器(NVM),它被组织为4个32位的字,编号为0,1,2和3。当JN516x RAM没有通电时,这个内存可以用来保存重要的数据(例如计数器值)——例如,在没有保持RAM的休眠期间。
提供了两个函数来访问这段内存:
(1)**vAHI_WriteNVData()**的数据可以用来写一个32位字的四个内存位置
(2)**u32AHI_ReadNVData()**可以用来读取的数据从一个32位字四个内存位置
**注意:**这个JN516x NVM的内容不维护当微控制器完全断电。但是,他们是通过设备复位来维护的。

6、休眠状态下保留调试信息

在调试期间,在JN516x CPU中有几个寄存器。这些寄存器的内容在睡眠期间不会被保存(不管是否持有RAM),尽管它们在深睡眠模式中被保存。
在休眠期间,这些寄存器的内容可以存储在RAM中,以便调试信息不会丢失——例如,允许配置的断点在睡眠后继续工作。在JN516x设备进入睡眠状态(通过调用vAHI_Sleep())之前,应该使用**vAHI_StoreDebug()**函数将寄存器的内容保存到RAM中的数组中。当从睡眠中醒来时,这些数据应该通过AppWarmStart调用函数vAHI_RestoreDebug()从RAM恢复到调试寄存器。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高咩咩在人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值