Si4463芯片使用小结24G无线模块Word下载.docx
《Si4463芯片使用小结24G无线模块Word下载.docx》由会员分享,可在线阅读,更多相关《Si4463芯片使用小结24G无线模块Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
![Si4463芯片使用小结24G无线模块Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/31/91395f05-e030-43d2-b681-b0db97d8edd6/91395f05-e030-43d2-b681-b0db97d8edd61.gif)
PinFunction
Exposedpad,18
GND
Ground
6,8
VDD
Supplyinput
2,3
Rxp,Rxn
usedforRx
4,7
Tx,TXRamp
usedforTx
16,17
Xin,Xout
crystal
11
NIRQ
Interruptoutput,activelow
1
SDN
Shutdowninput,activehigh
15
NSEL
SPIselectinput
12
SCLK
SPIclockinput
14
SDI
SPIdatainput
13
SDO
SPIdataoutput
9
GPIO0
GPIO
10
GPIO1
19
GPIO2
20
GPIO3
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不支持上电自动复位功能,因此每次上电后都需认为给出初始化操作,具体可参见下述代码:
voidSI446X_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生成。
我们选择方法二,具体操作后面细述。
uint8Si4463_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引脚)或置位中断状态寄存器,因此在程序实现中可以采用查询方式或中断方式实现发送,具体流程如下:
发送函数流程图
4)接收模式
接收模式与发送类似也有两种方式可以实现,从产品角度或MCU资源方面考虑,一般不选用查询方式,
5)休眠模式
Si4463低功耗有两种方式:
休眠模式以及关断模式,两者的功耗分别为30nA和50nA。
休眠模式以关断模式之间的主要区别在于寄存器状态,关断后所有寄存器数据丢失,重新上电需要再次初始化,而休眠模式能够保持,具体使用可根据实际需求自行选择。
至于程序操作,这两种方式都较为简单:
关断只需将SDN引脚拉高;
休眠需执行寄存器操作:
voidSI446X_CHANGE_STATE(uint8state)//改变芯片状态
{
uint8cmd[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、其他
后续补充