SI4463 空中唤醒教程

SI4463 空中唤醒教程

一 无线唤醒的原理

要唤醒无线芯片,必须保证无线芯片在RX mode持续时间内能够检测到有效的数据包。如果发射机发送时间比休眠时间短,那么可能遇到接收机机在休眠而无法唤醒的情况。因此,为了能够保证唤醒无线芯片,发射机发射的时间要大于接收机的运行周期T,以保证接收机进入接收模式时能检测到数据包。示意图如下:
  唤醒原理

二 LDC模式简介

LDC模式(Low Duty Cycle Mode)即占空比模式。是SI446x芯片中的一种运行模式,进入此模式有助于降低无线芯片的功耗。在此模式下,无线芯片在休眠一段时间之后自行唤醒,检测前导码以确定是否有数据包。本文描述使用此模式的教程。
  LDC模式

三 LDC模式详情

在LDC模式持续时间内,接收器周期性地唤醒自己,在Rx(或者TX)状态下工作。如果未检测到有效的前导码、检测到接收错误或未接收到整个数据包,则接收器在LDC模式持续时间结束时返回到WUT状态(即就绪或休眠),并保持在该模式,直到下一个唤醒周期开始。如果检测到有效的前导码或同步字,则接收器会延迟LDC模式持续时间以接收整个数据包。如果在两个LDC模式持续时间内未接收到数据包,则接收器将在最后一个LDC模式持续时间返回到WUT状态,直到下一个唤醒周期开始。休眠时间加上唤醒时间组成一个运行周期。
LDC状态

四 相关API

在Si446x的说明文档里面,与本文有关的寄存器有如下几个:
1. GLOBAL_CLK_CFG(Group: 0x00 Index: 0x01)
2. GLOBAL_WUT_CONFIG(Group: 0x00 Index: 0x04)
3. GLOBAL_WUT_M(Group: 0x00 Indexes: 0x05 … 0x06)
4. GLOBAL_WUT_R(Group: 0x00 Index: 0x07)
5. GLOBAL_WUT_LDC(Group: 0x00 Index: 0x08)
6. GLOBAL_WUT_CAL(Group: 0x00 Index: 0x09)
以下是详细说明
1. GLOBAL_CLK_CFG(Group: 0x00 Index: 0x01)
在这里插入图片描述
在这里插入图片描述
DIVIDED_CLK_EN:选择是否输出时钟。
DIVIDED_CLK_SEL[2:0]:输出时钟的分频
CLK_32K_SEL[1:0]32Kz参考时钟源,本例中选择32K R-C Oscillator
要使用LDC必须有参考时钟源。必须开启时钟。在CLK_32K_SEL[1:0]用来选择时钟源,可以选择内部RC振荡器或者外部晶振。根据实际情况选择。

  1. GLOBAL_WUT_CONFIG
    寄存器详情
    在这里插入图片描述
    WUT_LDC_EN[1:0]:LDC模式选择,本例中选择LDC RX mode

在这里插入图片描述
WUT_CAL_PERIOD[2:0]:选择32K R-C Oscillator的校准周期
在这里插入图片描述
WUT_LBD_EN:检测电池电压
在这里插入图片描述

WUT_EN:选择是否开启定时器。本例中选择开启。
在这里插入图片描述
CAL_EN:选择是否开启32K R-C Oscillator校准
3. GLOBAL_WUT_M
在这里插入图片描述

这是一组两个寄存器,用来设置休眠时间的高低字节。在设置之前需要关闭WUT_EN.
WUT时间根据下面的公式确定:
在这里插入图片描述
4.GLOBAL_WUT_R
在这里插入图片描述
在这里插入图片描述
LDC_MAX_PERIODS[1:0]:设置在检测到有效前导码或同步字之后等待的LDC周期
在这里插入图片描述
WUT_SLEEP:设置WUT之后的状态
在这里插入图片描述
WUT_R[4:0]设置计算公式中的2的指数,最大值为0x14。
例如,设置WUT_R[4:0]=13,那么单位时间就是1s。
5. GLOBAL_WUT_LDC
在这里插入图片描述
此寄存器设置唤醒持续的时间,计算公式如下:
在这里插入图片描述
6. GLOBAL_WUT_CAL
在这里插入图片描述
此寄存器用来设置32K R-C Oscillator的校准间隔,与WUT_CAL_PERIOD[2:0]不同的是,这以为指定的是校准间隔,指定几就是每过几个WUT校准1次。

五 设置流程

设置流程
总结设定WUT的步骤

  1. 设定时钟源
  2. 关闭WUT定时器
  3. 设置休眠时间
  4. 设置单位时间
  5. 设置唤醒时间
  6. 开启WUT定时器
      对于不需要开启LDC模式的一端,只需要考虑发射的持续时间或者接受数据包。例如在本例中,发送端只需要保证每次的发射发射时间大于1s

六 参考设置

对于发射机
  发射机无线速率为1200bps,前导码24字节,同步字2字节,packet14字节,一共40字节共计320bit发送一次的时间为约为266ms,因此设置连续发送四次。
  对于被接收机:
  在本例中设置休眠0.75s,唤醒0.25s。

void WUT_CONFIG(void)
{
	unsigned char p[12];
	p[0] = 0x11;  
	p[1] = 0x00;    
	p[2] = 0x01;    
	p[3] = 0x01;  
	p[4] =0x41;		//GLOBAL_CLK_CFG, enable 32kHz RC clock
	spi_write(5, p);
	p[0] = 0x11;
	p[1] = 0x00;
	p[2] = 0x05;
	p[3] = 0x04;
	
	p[4]=0x00;//GLOBAL_WUT_CONFIG,在设置时间前关闭WUT定时器
	p[5]=0;//GLOBAL_WUT_M,设置休眠时间的高字节
	p[6]=3;//休眠时间的低字节
	p[7] = 0x6b;//GLOBAL_WUT_R设置单位时间,这里设置的是0.25s
	p[8]=1;//GLOBAL_WUT_LDC wake up time
	spi_write(9, p);
	p[0] = 0x11;
	p[1] = 0x00;
	p[2] = 0x01;
	p[3] = 0x04;
	
	p[4]=0x42;	//开启WUT定时器(选择LDC RX Mode、WUT_EN)
	spi_write(5, p);
}

七 验证

设置完成之后,我们需要验证我们设置的是否正确。通过观察无线芯片的状态以及相应的持续时间,可以确定我们的配置是否正确。而446x芯片提供了GPIO的映射功能,可以把芯片状态,数据等输出到某一个GPIO上。通过GPIO_PIN_CFG命令,可以设置芯片的GPIO的作用。
    首先了解GPIO的有关命令GPIO_PIN_CFG
    在这里插入图片描述
      上图即为该命令以及命令的参数。其中GPIO_MODE[5:0]是设置对应GPIO的模式位,可选的模式共有39种,限于篇幅不在此一一列出。用到的设置有:
IN_SLEEP 28 This output goes high when the chip is NOT in SLEEP state, and goes low when in SLEEP state.芯片状态指示。
VALID_PREAMBLE 24 This output goes high when a valid preamble is detected, and returns low after the packet is received or Sync Word timeout occurs.有效前导码指示
TX_STATE 32 This output is set high while in TX state and is low otherwise. The TX_STATE and RX_STATE signals are typically used for control of peripheral circuits (e.g., a T/R Switch).发射状态指示,可以用来判断发射机是否处于发射状态。
GPIO参考设置

void pinconfig(void)
{
	p[0] = 0x13;
	p[1] =24;// ;有效前导码指示
	p[2] = 28;//状态指示
	p[3] = 32;//TX_STATE
	p[4]=33;//RX_STATE
	
	
	p[5]=0;//NIRQ保持默认
	p[6]=0;//SDO保持默认
	p[7] = 0;//GPIO驱动能力选择
	
	spi_write(8, p);
	
}

通过GPIO_PIN_CFG设置,可以把无线芯片的状态映射到一个GPIO上,本例中把GPIO1设为睡眠状态指示,如果睡眠状态输出低,活跃状态下输出高,抓取此GPIO的波形(接收机未收到数据包状态),如图:
  空闲状态的IO电平
  符合设置的时间。
接着,进行唤醒测试。
发送方设置为连续发送4次,发送的持续时间大于1s,满足唤醒要求。
抓取的波形如图。
有数据包的接收机和发射机状
图中,第一行是接收机的有效前导码指示(接收到有效前导码为高),第二行是接收机状态指示(接收状态为高),第三行为发射机的发射指示(发射状态为高),对比可见,每次发射机发射的时候都成功唤醒了接收机。
值得注意的是,如果在即将进入休眠模式时无线芯片正处于高电流状态(例如 TUNE or RX mode),无线芯片将保持此状态而不会进入休眠模式,因此需要用户在接收处理完之后进入休眠模式。

八 设置的位置

在本例中,发射机不使用LDC模式,无需配置相关寄存器。
对于接收机
  在进入主循环之前调用已经写好的设置函数,设置接收机进入休眠模式,最后在while循环里面等待接收中断即可。在配置WUT之前,应确保无线芯片已经完成初始化。
进入主循环之前的设置
在这里插入图片描述
主循环里面的处理,若有中断,表明收到了数据包,MCU应做处理,处理完成之后初始化接收为下一次接收做准备,然后休眠无线。
在这里插入图片描述

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值