Si4463芯片使用小结

Si4463芯片使用小结

一、芯片介绍

Silicon Labs 的 Si4463芯片是高性能的低电流收发器,其覆盖了 119MHz 至 1050 MHz 的 Sub-1GHz频段。还是

EZRadioPRO 系列的一部分,该系列包含覆盖各种应用的完整发射器、接收器和收发器产品线。所有器件都具有杰出的灵敏度 -126 dBm,同时实现了极低的活动和休眠电流消耗。

二、功能实现 1、引脚说明

Si4463有20个引脚,主要引脚功能可以分为两大类:硬件引脚和软件引脚。硬件引脚主要由电源、射频部分组成,软件引脚主要分为SPI、芯片使能以及GPIO。硬件引脚在原理图、PCB设计部分需要注意,此处主要是介绍芯片的程序操作,硬件部分就此带过。下表列举了si4463的21个引脚(包括芯片正下方的Exposed pad引脚)的具体引脚号和功能简述:

表1 Si4463引脚简述

Si446x Pin Number Exposed pad, 18 6, 8 2,3 4,7 16,17 11 1 15 12 Pin Name GND VDD Rxp,Rxn Tx,TXRamp Xin,Xout NIRQ SDN NSEL SCLK Pin Function Ground Supply input used for Rx used for Tx crystal Interrupt output, active low Shutdown input, active high SPI select input SPI clock input 14 13 9 10 19 20 SDI SDO GPIO0 GPIO1 GPIO2 GPIO3

SPI data input SPI data output GPIO GPIO GPIO GPIO 2、功能实现 1)SPI操作

芯片的12-15脚为SPI引脚,最大支持速率达到10MHz.芯片支持标准的SPI总线协议,操作方便。

整个芯片的所有SPI操作都可以分成两种方式:写命令和读数据。SPI操作最需要注意的一点是芯片状态,因为芯片不可能随时随地处在SPI就绪状态,所以每次操作SPI时必须读取芯片的当前状态(CTS),确保操作成功。

图 CTS读取流程

写命令的流程如下:

图 写命令

Si4463至少有28条命令ID,每个命令都有不同的含义,有的可以直接操作芯片执行各项功能,有的可以读取芯片各种状态。上述的读取CTS也是其中一种命令。命令内容详情可参阅Siliconlabs官方文档“AN633.pdf”

读数据流程如下:

图 读数据

有部分命令是读取命令,写完命令后可读出该命令规定的相应字节数据,如上图,SDI在写完0x44读取到CTS信号后,写入0x00(空操作命令)来读取回复字,切忌用有效命令操作(会导致数据异常)!

2)初始化

Si4463不支持上电自动复位功能,因此每次上电后都需认为给出初始化操作,具体可参见下述代码:

void SI446X_RESET( void ) //Si4463复位函数 {

SI_SDN_HIGH( ); //SDN引脚拉高,芯片关断 waitus(10); //延时10us

SI_SDN_LOW( ); //SDN引脚拉低,芯片使能

SI_nSEL_HIGH( ); //nSEL引脚拉高,禁止SPI片选,释放SPI waitms(5); //延时5ms,芯片自动复位 }

在芯片重新复位后可以对芯片进行相应的配置。写配置信息有两种方式,其一查询器件手册,对每一个寄存器进行直接配置;其二,按顺序写入配置信息数组,该数组在头文件中进行定义,而头文件可由Siliconlabs公司的配置软件WDS生成。我们选择方法二,具体操作后面细述。

uint8 Si4463_init( void ) {

SI446X_RESET( ); //SI446X 模块复位

SI446X_CONFIG_INIT( ); //SI446X 模块初始化配置函数 SI446X_INT_STATUS( Si446x_CMD_Buf ); //清除中断状态 SI446X_EN_INT(SI446X_INT_STAUS); //使能中断

SI446X_START_RX( Rx_channel, 0, PACKET_LENGTH,0,0,3 ); //开接收 return (Si4463_diagnose()); //读取芯片状态,返回芯片信息 }

3)发送模式

发送函数比较简单,在初始化结束后只需填数据至TXFIFO,并使能发送,Si4463会自动完成发送功能,在发送完成后产生中断信号(nIRQ引脚)或置位中断状态寄存器,因此在程序实现中可以采用查询方式或中断方式实现发送,具体流程如下:

开始切换芯片至SPI就绪模式开始切换芯片至SPI就绪模式写数据至Tx FIFO写数据至Tx FIFO使能发送使能发送读取芯片中断状态寄存器发送完成中断产生?YN清除中断标志,发送完成N发送完成中断位为1 ?Y清除中断标志,发送完成 发送函数流程图

4)接收模式

接收模式与发送类似也有两种方式可以实现,从产品角度或MCU资源方面考虑,一般不选用查询方式,

5)休眠模式

Si4463低功耗有两种方式:休眠模式以及关断模式,两者的功耗分别为30nA和50nA。休眠模式以关断模式之间的主要区别在于寄存器状态,关断后所有寄存器数据丢失,重新上电需要再次初始化,而休眠模式能够保持,具体使用可根据实际需求自行选择。

至于程序操作,这两种方式都较为简单:关断只需将SDN引脚拉高;休眠需执行寄存器操作:

void SI446X_CHANGE_STATE( uint8 state) //改变芯片状态 {

uint8 cmd[2];

cmd[0] = CHANGE_STATE; //芯片状态 cmd[1] = state&0x0F; SI446X_CMD( cmd, 2 ); }

三、配置说明

Si4463的参数配置主要采用WDS软件进行配置,设置好相应的内容后生成一个参数宏定义的头文件,在程序中只需将该头文件中的参数以相应的命令写入射频芯片即可完成配置。

第一步 选择模拟方式 第三步 选择配置模式

1、频率和功率

第二步 选择芯片

第四步 配置界面

图中标注的几处为必须配置的参数,具体参数芯片数据手册。

2、RF参数

接收端的调制方式、速率、频偏以及带宽必须与发射端匹配,否则无法接收

3、数据包参数

数据包主要有引导码、同步字、数据域以及CRC构成,每项都可选可去,为保证数据可靠接收,同时减少不必要的数据接收,引导码和同步字就十分必要,这两部分中的内容可以自由配置,此处就不细述,具体可参见芯片数据手册以及WDS使用指南。数据域有几种模式,可单域也可多域,一般选用变长发送模式时采用双域,前一域帧长,后一域数据。CRC模式也可采用分域校验和整体校验,一般选用整体,最后两个直接为CRC结果校验由硬件完成,校验通过标志可通过配置设定在这两个直接中任意直接的高位或低位。

4、中断配置

芯片有一个中断引脚,可对应3个中断寄存器,共计22中不同中断状态。在正常发送、接收中一般只用以下3个中断:发送完成、接收、CRC异常,其余中断对应的具体说明可参见芯片用户指导。

5、GPIO和快速寄存器配置

Si4463有4个GPIO引脚外加一个NIRQ和SDO引脚可进行自由配置,具体功能参见用户指导,一般会选用两个引脚作为射频开关的控制引脚,如下图:

快速寄存器主要用于快速读出芯片的某些状态或寄存器值,相对于直接操作普通寄存器,速度要更快,更节省MCU资源,具体配置可根据实际使用进行配置,如RSSI、芯片工作状态等都是比较常用的。

四、问题总结 1、发送功率与功耗

Si4463的发送功率可调,功率越大功耗自然越大,尤其是超过15dBm后发射功率每增加一点,功耗会增加很多,下图是理论参数(横坐标是电流):

实际使用中发现模块功率很难达到20dBm,经过测试排查,发现发射功率受供电电压影响也较大,下图是最大发射功率与供电电压之间的关系:

这也就是造成我们传感器电源波动测试中发射功率不足的主要原因。

2、发射死机问题

2.1现象

无线模块(加天线)在以20dBm发送时出现发送失败现象,程序死在等待发送完成处,接收端无法收到数据;

去除天线,以任何功率、速率都能成功发射; 降低发送功率,低于10dBm时也能正常发射;

模块选用的是32M晶振,程序配置成30M时能发射且不死(中心频率有一定偏移) 出现假死现象概率很高,最频繁时能达到每4~5个包就挂一次! 2.2、测试

1)不加天线20dBm发送时SPI波形

2)加天线时20dBm发射SPI波形(异常)

读取CTS时每次都回复 0x00。

2.3 问题分析

加上天线后射频芯片处于大功率工作状态,发送数据时采用查询方式进行扫描发送完成,及易导致射频芯片操作异常,尤其是还存在中断操作,故芯片死机概率较高。

2.4 解决方案:

方案一:整个程序中在写操作Si4463时不允许被中断(禁止中断),并且增加异常监测,连续发射异常或超时后需重新初始化射频芯片。此方案能够解决这以问题,但是对整个产品来说牺牲是很大的,禁止中断完全有可能导致各种异常,故不是最佳方案。

方案二:采用中断方式监测发送完成、接收等状态,产生相应中断后再读取状态,尽量避免持续操作射频芯片,但同时也需要增加芯片异常监测。实测该方案完全避免了模块死机问题,属于较为理想的方案。

3、其他

后续补充

联系客服:779662525#qq.com(#替换为@)