【经验】Si4438无线收发芯片调试收发超长数据包的过程

2021-03-27 世强
无线收发芯片,Si4438,Silicon Labs 无线收发芯片,Si4438,Silicon Labs 无线收发芯片,Si4438,Silicon Labs 无线收发芯片,Si4438,Silicon Labs

本文依据【经验】仅需3步,轻松实现Si446x无线收发器的变长包收发 和 编程技巧:轻松实现Si446x超长数据包收发 两篇文章,使用SILICON LABS无线收发芯片Si4438调试收发超长数据包的功能,介绍Si4438如何实现收发超长数据包的过程,方便用户快速实现超长数据包收发功能。

1、下载 Silicon Labs(芯科科技)Si446x模拟SPI接口以及radio驱动代码,并将radio驱动代码Si446x_Drivers文件夹中的代码全部移植到主控MCU程序中。

2、打开WDS软件,选择Empty framework工程,点击Packet,在Packet config页面,确认Packet TX threshold和Packet RX threshold的长度,默认都是48个字节,可以根据实际需要修改长度。

3、点击Variable length config,勾选Enable variable packet length,确认Enable variable packet length下面的参数跟下图红框中的参数一样;总共使用两个field,field 1存放数据的长度,field 2存放数据。

4、点击Interrupts,勾选Packet Handler HW interrupt下面的Enable,点击PSNT使能包发送完成中断,点击PRX使能包接收完成中断,点击TFAE使能发送缓存区几乎空中断,点击RFAF使能接收缓存区几乎满中断,根据实际应用确认是否需要点击CRCE使能CRC校验错误中断。

5、WDS中的其他无线参数根据实际需求配置,点击WDS软件右下角的Generate source,再点击Save custom radio configuration header file;

找到刚才移植到主控MCU程序的radio驱动代码中的radio_config.h文件,点击radio_config文件,再点击保存;


在询问是否替换的页面点击“是”,将radio驱动代码中的radio_config.h文件替换为WDS软件新生成的文件。

6、将radio.h文件中的RADIO_MAX_PACKET_LENGTH改为0xFF,虽然Si4438使用超长包收发数据,理论上每个field可设置的最大长度是2的13次方(8192个字节),但是实际使用中,一般建议每包数据最长不用要超过255个字节,减少丢包的可能性;增加ALMOST EMPTY和ALMOST FULL长度的宏定义,具体长度需要设置跟WDS中的Packet TX threshold和Packet RX threshold一样。

#define RADIO_FIFO_ALMOST_EMPTY_LENGTH 48

#define RADIO_FIFO_ALMOST_FULL_LENGTH   48

7、在radio.h中增加代码“extern U8 customRadioPacket[RADIO_MAX_PACKET_LENGTH]; ”,方便在其他文件中调用customRadioPacket[]数组。

8、打开radio.c文件,如果跟Si4438通信的主控MCU不需要code和xdata来定义变量,可以分别把Radio_Configuration_Data_Array[]前面的code和customRadioPacket[]前面的xdata删除。

9、在radio.c文件中,添加如下变量:

U8 u8NeedSendDataLength = 0;

U8 u8AlreadySendDataLength = 0;

U8 u8NeedRecieveDataLength = 0;

U8 u8AlreadyRecieveDataLength = 0;

10、在radio.c文件的bRadio_Check_Tx_RX()函数中,增加SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_TX_FIFO_ALMOST_EMPTY_PEND_BIT事件的处理代码;当Si4438产生ALMOST EMPTY中断时,MCU判断还需要发送多少字节的数据,并往Si4438的TX FIFO填充数据。

if(Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_TX_FIFO_ALMOST_EMPTY_PEND_BIT)

{

    if((u8NeedSendDataLength - u8AlreadySendDataLength) > 0)

    {

        if(u8NeedSendDataLength - u8AlreadySendDataLength >= RADIO_FIFO_ALMOST_EMPTY_LENGTH)

        {

            si446x_write_tx_fifo(RADIO_FIFO_ALMOST_EMPTY_LENGTH, &customRadioPacket[u8AlreadySendDataLength]);

            u8AlreadySendDataLength += RADIO_FIFO_ALMOST_EMPTY_LENGTH;

        }

        else

        {

            si446x_write_tx_fifo(u8NeedSendDataLength - u8AlreadySendDataLength, &customRadioPacket[u8AlreadySendDataLength]);

            u8AlreadySendDataLength += (u8NeedSendDataLength - u8AlreadySendDataLength);

        }

    }

}

11、在radio.c文件的bRadio_Check_Tx_RX()函数中,增加SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_RX_FIFO_ALMOST_FULL_PEND_BIT事件的处理代码;当Si4438产生ALMOST FULL中断时,MCU读取Si4438的RX FIFO中数据。

if(Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_RX_FIFO_ALMOST_FULL_PEND_BIT)

{

    si446x_read_rx_fifo(RADIO_FIFO_ALMOST_FULL_LENGTH, &customRadioPacket[u8AlreadyRecieveDataLength]);

    u8AlreadyRecieveDataLength += RADIO_FIFO_ALMOST_FULL_LENGTH;

}

12、在radio.c文件bRadio_Check_Tx_RX()函数的SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT事件中,将“si446x_read_rx_fifo(Si446xCmd.FIFO_INFO.RX_FIFO_COUNT, &customRadioPacket[0]);”改为”si446x_read_rx_fifo(Si446xCmd.FIFO_INFO.RX_FIFO_COUNT, &customRadioPacket[u8AlreadyRecieveDataLength]); ”,并增加代码“u8AlreadyRecieveDataLength = 0;”。

13、在radio.c文件的vRadio_StartRX()函数中,添加代码“si446x_set_property(0x12, 0x02, 0x11, 0x00, RADIO_MAX_PACKET_LENGTH);”,设置field 2的长度为RADIO_MAX_PACKET_LENGTH。

14、将radio.c文件的vRadio_StartTx_Variable_Packet()函数修改为如下代码。由于在WDS中使用了field 1来存放需要发送数据的长度,使用field 2存放需要发送的数据,所以在调用si446x_set_property()设置的field 2长度,需要比调用si446x_write_tx_fifo()写入tx fifo的数据少一个字节;在超长数据发送模块下,发送数据的长度由field 1决定,所以在调用si446x_start_tx()发送数据时,把这个函数的数据长度参数写0。

void vRadio_StartTx_Variable_Packet(U8 channel, U8 *pioRadioPacket, U8 length)

{

    /* Clears the length of data that has been sent */

    u8AlreadySendDataLength = 0;

    /* The length of all data that needs to be sent */

    u8NeedSendDataLength = customRadioPacket[0] + 1; 


    /* Leave RX state */

    si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEXT_STATE1_NEW_STATE_ENUM_READY);


    /* Read ITs, clear pending ones */

    si446x_get_int_status(0u, 0u, 0u);


    /* Set Field_2 length */

    si446x_set_property(0x12, 0x02, 0x11, 0x00, customRadioPacket[0]);


    /* Reset the Tx Fifo */

    si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_FIFO_TX_BIT);


    if(u8NeedSendDataLength >= RADIO_FIFO_ALMOST_EMPTY_LENGTH)

    {

        /* Fill the TX fifo with datas */

        si446x_write_tx_fifo(RADIO_FIFO_ALMOST_EMPTY_LENGTH, customRadioPacket);

        u8AlreadySendDataLength += RADIO_FIFO_ALMOST_EMPTY_LENGTH;

    }

    else

    {

        /* Fill the TX fifo with datas */

        si446x_write_tx_fifo(u8NeedSendDataLength, customRadioPacket);

        u8AlreadySendDataLength += u8NeedSendDataLength;

    }

    /* Start sending packet, channel 0, START immediately */

    si446x_start_tx(channel, 0x80, 0);

}

15、需要让Si4438发送数据时,先把需要发送的数据复制到customRadioPacket[]数组,确保customRadioPacket[0]存放的是需要发送数据的长度,然后调用“vRadio_StartTx_Long_Packet(0, 0, 0);”函数将数据发送出去。

16、在while循环中调用bRadio_Check_Tx_RX()读取radio中断状态,当读取到SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT事件时,就可以从customRadioPacket[]数组读取接收到的无线数据,customRadioPacket[0]存放接收到的数据长度。

17、将编译好的程序烧录到MCU后,测试发射模块发送80(0x50)个字节的数据,接收模块可以收到80个字节正确的数据。

授权代理商:世强先进(深圳)科技股份有限公司
技术资料,数据手册,3D模型库,原理图,PCB封装文件,选型指南来源平台:世强硬创平台www.sekorm.com
现货商城,价格查询,交期查询,订货,现货采购,在线购买,样品申请渠道:世强硬创平台电子商城www.sekorm.com/supply/
概念,方案,设计,选型,BOM优化,FAE技术支持,样品,加工定制,测试,量产供应服务提供:世强硬创平台www.sekorm.com
集成电路,电子元件,电子材料,电气自动化,电机,仪器全品类供应:世强硬创平台www.sekorm.com
  • +1 赞 0
  • 收藏
  • 评论 0

本文由潮汕小菜提供,版权归世强硬创平台所有,非经授权,任何媒体、网站或个人不得转载,授权转载时须注明“来源:世强硬创平台”。

评论

   |   

提交评论

全部评论(0

暂无评论

相关推荐

【经验】Silicon Labs无线收发芯片Si4463如何区分芯片版本号?

Si4463是Silicon Labs设计的支持Sub-G频段的无线收发芯片。目前Si4463芯片有B1和C2两种版本,这两个版本芯片radio驱动代码的si446x_patch.h和radio_config.h文件有差别。本文主要介绍Si4463芯片区分芯片版本号的方法。

设计经验    发布时间 : 2021-01-12

【经验】使用Si4463或者Si4438无线收发芯片来解析其他无线设备通信速率的方法

本文使用EFR32FG23无线SoC芯片来模拟老产品,通过按键来触发EFR32FG23芯片发送无线数据包,然后使用Si4438芯片来捉取波形,并介绍使用Si4438无线收发芯片来解析其他无线设备通信速率的方法。

设计经验    发布时间 : 2023-04-19

【经验】在芯科无线收发芯片Si4463开发板的工程中添加串口打印功能的方法

本文以芯科无线收发芯片Si4463开发板的Empty framework工程为例,介绍在Empty framework工程添加串口打印接收到的数据包功能的方法。

设计经验    发布时间 : 2023-03-14

【经验】芯科科技Si4463无线收发芯片硬件设计使用射频开关和不使用射频开关的区别介绍

Si4463是Silicon Labs推出的支持Sub-G频段的无线收发芯片,频率范围142-1050 MHz,最大发射功率为+20dBm,接收灵敏度为-126dBm。在设计Si4463硬件的时候,有使用射频开关和不使用射频开关两种方案可以选择,本文主要介绍这两种方案区别,方便用户选择适合自己产品的方案。

设计经验    发布时间 : 2020-06-30

【经验】芯科Si4463无线收发芯片使用ADC读取芯片内部温度的方法

Silicon Labs的Si4463无线收发芯片内部有一个温度传感器,我们可以使用ADC来读取芯片内部的温度,本文主要介绍如何使用ADC读取Si4463芯片温度的方法。

设计经验    发布时间 : 2022-11-02

【经验】如何通过无线收发芯片Si4438将数据发送到无线SOC芯片EFR32FG23

Silicon Labs推出的EFR32FG23是一款工作在1G赫兹频段以下的一款无线SOC芯片。它的射频参数及其工作频段可以通过软件进行配置,本次主要介绍如何通过Si4438将数据发送到EFR32FG23。

设计经验    发布时间 : 2022-08-31

【应用】Sub-G通讯的Si4463无线收发芯片用于无线测温模块,采用私有协议、小于50nA的待机功耗

本文主要介绍目前大量无线测温模块上使用的无线Sub-G通讯方案,特别是Silicon Labs的无线收发芯片Si4463方案,相对于其他无线技术方案,其特点在于芯片工作在Sub-G频段,通讯距离远;采用私有协议,产品开发更加灵活;待机功耗在50nA以下,功耗极低。

应用方案    发布时间 : 2020-04-01

【应用】宽空中速率的无线收发芯片Si4438在无人机远距离遥控中的应用

远距离遥控应用一直是无人机设计中的一个巨大的挑战。而世强推荐Silicon Labs的433M/915MHz应用方案解决了无人机遥控距离短的缺陷。

新应用    发布时间 : 2016-12-24

【应用】芯科无线收发芯片SI4438应用于路灯控制器,工作频段425–525MHz,实现业界领先的144dB链路预算

智慧城市智能路灯是将城市中的路灯串联起来,实现对路灯的远程控制和管理,控制各个路灯的开与关,而同时能控制上千个路灯实现这一功能我们管它叫路灯控制器,里面用到的主要器件无线收发芯片,本文推荐在这块有大量应用的Silicon Labs的SI4438。

应用方案    发布时间 : 2022-08-19

【经验】Si4438无线收发芯片使用同步直接模式收发数据的方法

Silicon Labs Si4438无线收发芯片在某些不适合使用FIFO模式的应用中,可以使用直接模式(direct mode)来收发无线数据。本文主要介绍Si4438如何使用同步直接模式收发数据的方法。

设计经验    发布时间 : 2021-06-08

【经验】无线收发芯片Si4463收发无前导码数据包的实现方法

Si4463是Silicon Labs设计的支持Sub-G频段的无线收发芯片,在双向通信的无线门铃应用中,由于某些无线门铃使用OOK调制模式,私有协议的数据包,且这些数据包无前导码,所以要求Si4463芯片能够收发无前导码的数据包。本文以“Empty framework”工程为例,介绍Si4463芯片收发无前导码数据包的实现方法。

设计经验    发布时间 : 2020-10-10

【经验】无线SoC芯片EFR32FG14和无线收发芯片Si4463实现互相通信的配置方法

在某些应用中,可以把Silicon Labs的无线SoC芯片EFR32FG14用于主机,无线收发芯片Si4463用于从机,因此需要让EFR32FG14和Si4463芯片相互通信。本文主要介绍如何配置EFR32FG14和Si4463的参数,让这两款芯片实现相互通信。

设计经验    发布时间 : 2020-09-10

双模通道板上面使用Si4438做无线收发芯片,Si4438和Si4463有什么区别?

1、收发频率范围不一样,Si4438是425-525M,Si4463是119-1050M;2、接收灵敏度Si4463会比Si4438好点,Si4463是-126dbm,Si4438是-124dbm;3、数据传输速率不一样,Si4438是100bps-500kbps,Si4463是0.123kbps-1Mbps。

技术问答    发布时间 : 2017-05-10

在使用无线收发芯片Si4438的无线抄表模块发送数据的时候,需要先检测RSSi的值,如何读取实时的RSSi值?

1、把Si4438的状态切换到Ready;2、采用函数Si446x_get_modem_status(0x22);RSSiVAL = Si446xCmd.GET_MODEM_STATUS.CURR_RSSi,来读取实时的RSSi值。

技术问答    发布时间 : 2017-05-10

【应用】支持Sub-G频段的Si4463无线收发芯片用于无线温控器,待机功耗低于50nA

温控器,通常是指用于水采暖,壁挂炉、电供热或者中央空调温度控制器。无线温控器越来越多地应用起来,例如Wifi、Zigebee、Z-Wave、Sub-G等,主要优势是设备安装方便,铺设成本更低。本文主要介绍目前大量使用的Silicon Labs的无线收发芯片Si4463无线Sub-G通讯方案,让产品开发更加快捷。

应用方案    发布时间 : 2020-01-04

展开更多

电子商城

查看更多

品牌:SILICON LABS

品类:Transceiver

价格:¥14.7732

现货: 28,545

品牌:启英泰伦

品类:高性能神经网络智能语音芯片

价格:¥12.0000

现货: 10,000

品牌:博流

品类:无线收发芯片

价格:¥7.0471

现货: 3,451

品牌:G-NiceRF

品类:2.4G无线模块

价格:¥42.3750

现货: 1,000

品牌:G-NiceRF

品类:2.4G无线模块

价格:¥79.1000

现货: 1,000

品牌:沃进科技

品类:无线模块

价格:

现货: 1,000

品牌:芯海

品类:BLE无线收发芯片

价格:¥1.7648

现货: 200

品牌:芯海

品类:BLE无线收发芯片

价格:¥1.8824

现货: 195

品牌:博流

品类:无线收发芯片

价格:¥18.5675

现货: 50

品牌:博流

品类:无线收发芯片

价格:¥18.5675

现货: 50

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌:TI

品类:无线收发芯片

价格:¥7.0742

现货:9,991

品牌:SEMTECH

品类:无线收发芯片

价格:¥300.0000

现货:19

品牌:SILICON LABS

品类:Switch Hall Effect Magnetic Position Sensor

价格:¥2.2924

现货:126,000

品牌:SILICON LABS

品类:Light Sensor

价格:¥20.3400

现货:28,003

品牌:SILICON LABS

品类:8位MCU

价格:¥4.9000

现货:12,000

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥10.1700

现货:10,000

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥3.7900

现货:3,451

品牌:SILICON LABS

品类:Wireless SoC

价格:¥15.1400

现货:1,455

品牌:SILICON LABS

品类:Mixed-Signal MCU

价格:¥11.1200

现货:1,201

品牌:SILICON LABS

品类:8 BIT MCU

价格:¥16.8500

现货:550

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

物联网天线方案设计/虚拟天线芯片方案设计

Ignion可支持多协议、宽频段的物联网天线方案设计,协议:Wi-Fi、Bluetooth、UWB、Lora、Zigbee、2G、3G、4G、5G、CBRS、GNSS、GSM、LTE-M、NB-IoT等,频段范围:400MHz~10600MHz。

最小起订量: 2500 提交需求>

EDA芯片设计软件免费使用

世强深圳实验室提供Robei EDA软件免费使用服务,与VCS、NC-Verilog、Modelsim等EDA工具无缝衔接,将IC设计高度抽象化,并精简到三个基本元素:模块、引脚、连接线,自动生成代码。点击预约,支持到场/视频直播使用,资深专家全程指导。

实验室地址: 深圳 提交需求>

查看更多

授权代理品牌:接插件及结构件

查看更多

授权代理品牌:部件、组件及配件

查看更多

授权代理品牌:电源及模块

查看更多

授权代理品牌:电子材料

查看更多

授权代理品牌:仪器仪表及测试配组件

查看更多

授权代理品牌:电工工具及材料

查看更多

授权代理品牌:机械电子元件

查看更多

授权代理品牌:加工与定制

世强和原厂的技术专家将在一个工作日内解答,帮助您快速完成研发及采购。
我要提问

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

研发客服
商务客服
服务热线

联系我们

954668/400-830-1766(工作日 9:00-18:00)

service@sekorm.com

投诉与建议

E-mail:claim@sekorm.com

商务合作

E-mail:contact@sekorm.com

收藏
收藏当前页面