编程技巧:轻松实现Si446x超长数据包收发

2016-05-11 世强 紫云
无线收发器,Sub-GHz,Si446x,Si4460 无线收发器,Sub-GHz,Si446x,Si4460 无线收发器,Sub-GHz,Si446x,Si4460 无线收发器,Sub-GHz,Si446x,Si4460

SILICON LABS EZRadioPro 系列的Si446x 无线收发器,TX FIFO 和 RX FIFO只有64字节。那么如何实现超过64字节的数据包收发呢?需要繁琐的去把长包拆分成小于等于64字节的小包,每个小包单独发送,然后接收端把这些小包数据拼接回原始的长包数据吗?回答是:不!因为长包的收发在Si446x 收发芯片实现是非常简单的。


打开WDS软件或者查看API寄存器描述文档,有两个中断非常有用,就是TX_FIFO_ALMOST_EMPTY_PEND 和 RX_FIFO_ALMOST_FULL_PEND,这个两个中断代表的意思就是TX FIFO 的数据即将发送完,或者RX FIFO即将被填充满。那么我们只需要根据这两个中断,就可以实现超长数据包收发了。


例如,在TX_FIFO_ALMOST_EMPTY_PEND中断产生时,立刻填充数据到TX FIFO中,新填充的数据会紧跟着之前的数据发送出去,直到数据包完全发送完成,最终产生一个发送完成中断,表示这包数据发完。接收时也是类似,当收到的数据不断往RX FIFO中填充,快要填满的时候,就会产生RX_FIFO_ALMOST_FULL_PEND中断,这时立刻把RX FIFO读取出来,那么空出来的FIFO又可以继续接收新的数据,直到接收到的总数据等于整个完整的数据包长度,产生一个接收完成中断。整个过程都是连续的,根据包长度和设定的阀值,会产生多个TX_FIFO_ALMOST_EMPTY_PEND和RX_FIFO_ALMOST_FULL_PEND中断,但是每包数据发送完成和接收完成中断只会有一个,和短包的收发是一样的。


超长数据包的具体实现步骤如下:

1)使用WDS 配置TX_FIFO_ALMOST_EMPTY和RX_FIFO_ALMOST_FULL 阀值,如图:



2)使能TX_FIFO_ALMOST_EMPTY和RX_FIFO_ALMOST_FULL中断。如图:


 


3)在收到 TX_FIFO_ALMOST_EMPTY_PEND中断时,添加对应的填充TX FIFO 代码。

   if (Si446xCmd.GET_INT_STATUS.PH_PEND &       SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_SENT_PEND_BIT)

    {

      /* Nothing is sent to TX FIFO */

      bPositionInPayload = 0u;

      /* Position to the very beginning of the custom long payload */

      pPositionInPayload = (U8*) &pRadioConfiguration->Radio_Custom_Long_Payload;

      return TRUE;

    }

   if (Si446xCmd.GET_INT_STATUS.PH_PEND &         SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_TX_FIFO_ALMOST_EMPTY_PEND_BIT)

    {

        /* Calculate the number of remaining bytes has to be sent to TX FIFO */

        bNumOfRestBytes = RadioConfiguration.Radio_PacketLength - bPositionInPayload;

        if(bNumOfRestBytes > RADIO_TX_ALMOST_EMPTY_THRESHOLD)

        { // remaining byte more than threshold

          /* Fill TX FIFO with the number of THRESHOLD bytes */

          si446x_write_tx_fifo(RADIO_TX_ALMOST_EMPTY_THRESHOLD, pPositionInPayload);

          /* Calculate how many bytes are sent to TX FIFO */

          bPositionInPayload += RADIO_TX_ALMOST_EMPTY_THRESHOLD;

          /* Position to the next first byte that can be sent to TX FIFO in next round */

          pPositionInPayload += RADIO_TX_ALMOST_EMPTY_THRESHOLD;

        }

        else

        { // remaining byte less or equal than threshold

          /* Fill TX FIFO with the number of rest bytes */

          si446x_write_tx_fifo(bNumOfRestBytes, pPositionInPayload);

          /* Calculate how many bytes are sent to TX FIFO */

          bPositionInPayload += bNumOfRestBytes;

          /* Position to the next first byte that can be sent to TX FIFO in next round */

          pPositionInPayload += bNumOfRestBytes;

        }

    }


4)在收到 RX_FIFO_ALMOST_FULL_PEND中断时,添加对应的读取RX FIFO 代码。

if (Si446xCmd.GET_INT_STATUS.PH_PEND &    SI446X_CMD_GET_INT_STATUS_REP_PH_PEND_PACKET_RX_PEND_BIT)

    {

      /* Blink once LED3 as CRC OK or not enabled */

      vHmi_ChangeLedState(eHmi_Led3_c, eHmi_LedBlinkOnce_c);

      /* Calculate the number of free bytes in the array */

      bNumOfFreeBytes = RADIO_MAX_LONG_PACKET_LENGTH - bPositionInPayload;

      if (bNumOfFreeBytes >= RADIO_MAX_PACKET_LENGTH)

      {// free space in buffer more than RX FIFO size

        /* Read the RX FIFO with the number of RX FIFO size */

        si446x_read_rx_fifo(RADIO_MAX_PACKET_LENGTH, pPositionInPayload);

        /* Calculate how many bytes are already stored in the array */

        bPositionInPayload += RADIO_MAX_PACKET_LENGTH;

        /* Position to the next free byte that can be written in the next RX FIFO reading */

        pPositionInPayload += RADIO_MAX_PACKET_LENGTH;

      }

      else

      {

        /* Read the RX FIFO with the number of free bytes */

        si446x_read_rx_fifo(bNumOfFreeBytes, pPositionInPayload);

        /* Calculate how many bytes are already stored in the array */

        bPositionInPayload += bNumOfFreeBytes;

        /* Position to the next free byte that can be written in the next RX FIFO reading */

        pPositionInPayload += bNumOfFreeBytes;

      }

      /* Calculate how many bytes are already stored in the array */

       bPositionInPayload = 0u;

       /* Set writing pointer to the beginning of the array */

       pPositionInPayload = &fixRadioPacket[0u];

       /* free space */

       bNumOfFreeBytes = RADIO_MAX_LONG_PACKET_LENGTH;

       /* Start the radio */

       vRadio_StartRX(pRadioConfiguration->Radio_ChannelNumber);

      return TRUE;

    }

    if(Si446xCmd.GET_INT_STATUS.PH_PEND &       SI446X_CMD_GET_INT_STATUS_REP_PH_STATUS_RX_FIFO_ALMOST_FULL_BIT)

    {

      /* Calculate the number of free bytes in the array */

      bNumOfFreeBytes = RADIO_MAX_LONG_PACKET_LENGTH - bPositionInPayload;

      if (bNumOfFreeBytes >= RADIO_RX_ALMOST_FULL_THRESHOLD)

      { // free space in the array is more than the threshold

        /* Read the RX FIFO with the number of THRESHOLD bytes */

        si446x_read_rx_fifo(RADIO_RX_ALMOST_FULL_THRESHOLD, pPositionInPayload);

        /* Calculate how many bytes are already stored in the array */

        bPositionInPayload += RADIO_RX_ALMOST_FULL_THRESHOLD;

        /* Position to the next free byte that can be written in the next RX FIFO reading */

        pPositionInPayload += RADIO_RX_ALMOST_FULL_THRESHOLD;

      }

      else

      {

        /* Not enough free space reserved in the program */

        ERROR_HOOK;

      }

}

更多的详细参考代码,可以使用WDS,选择long packet TX 和 long packet RX工程生成并参考。

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

相关研发服务和供应服务

评论

   |   

提交评论

全部评论(2

  • FENT Lv8. 研究员 2019-08-23
    学习
  • 海绵宝宝 Lv7. 资深专家 2018-08-26
    真的好用
没有更多评论了

相关推荐

【经验】如何测试无线收发器的发射功率和频偏?

在设计好Sub-GHz无线收发器si446x 或者si4438的PCB板,完成元器件贴板和焊接之后,就可以开始测试PCB板的射频性能了。

2018-02-23 -  设计经验 代理服务 技术支持 采购服务

【经验】手把手教你将HEX 文件烧录进无线收发器Si4010

Silicon Labs射频发射器Si4010广泛使用于汽车遥控器、家居安防、车库门等应用场合,本文介绍了其烧录工具和烧录步骤。

2017-08-25 -  设计经验 代理服务 技术支持 采购服务

【经验】仅需3步,轻松实现Si446x无线收发器的变长包收发

Silicon labs EZRadioPro 系列的si446x 无线收发器,具备高级自动包处理功能。其中可变包长的收发在应用中非常普遍。那么如何轻松快速实现可变包长收发呢?仅需三步即可。

2016-05-08 -  设计经验 代理服务 技术支持 采购服务

Silicon Labs(芯科科技)EZR32HG220带ARM Cortex-M0+CPU和Sub-GHz无线电的无线MCU数据手册

描述- EZR32HG Wireless MCUs EZR32HG220 Wireless MCU family with ARM Cortex-M0+ CPUand sub-GHz Radio Data Sheet

型号- EZR32HG220FXXR69G-C0,EZR32HG,EFM32,EZR32HG220FXXR61,EZR32HG220FXXR61G-C0,EZR32HG220F64R55G,EZR32,EZR32HG220FXXR63,EZR32HG220FXXR67G-C0,EZR32HG220FXXR60,EZR32HG220FXXR69,EZR32HG220F32R55GR,EZR32HG220F64R55GR,EZR32HG220FXXR63G-C0,EZR32HG220FXXR55,EZR32HG220FXXR60G-C0,EZR32HG220F32R55G,EZR32HG220FXXR67,EZR32HG220,EZR32HG220FXXR55G-C0,EZR32HG220FXXR68G-C0

2019年8月  - SILICON LABS  - 数据手册  - Rev. 1.1 代理服务 技术支持 采购服务

【经验】低电流无线收发器锁存RSSI值读取该如何操作?

Silicon Labs 无线收发器Si446x或者Si4438开发产品的时候,应用代码中很多需要使用到信号强度RSSI值。

2017-08-17 -  设计经验 代理服务 技术支持 采购服务

Silicon Labs(芯科科技)Si446x Sub-GHz无线收发器软件参考代码

描述- 发射端长前导码、变长包、休眠带RTC 1秒检测间隔、低功耗实现-接收端基于EFM32ZG平均功耗14uA左右

型号- SI4463,SI4438,SI446X

SILICON LABS  - 技术文档 代理服务 技术支持 采购服务

【经验】低电流无线收发器实时RSSI值读取该如何操作?

Silicon Labs 无线收发器Si446x或者Si4438开发产品的时候,应用代码中很多需要使用到信号强度RSSI值。

2017-08-20 -  设计经验 代理服务 技术支持 采购服务

【经验】应用技巧:如何轻松实现无线收发器硬件CRC校验?

无线收发器支持硬件CRC校验,在WDS软件中点点鼠标就能快速完成CRC相关的设置。

2017-01-10 -  设计经验 代理服务 技术支持 采购服务

【产品】支持远距离通信的低功耗远距离Sub-GHz SoC EFR32FG

Silicon Labs的高性能双频段无线SoC EFR32FG支持Rail、Connect私有协议和动态双协议,支持2.4GHz和Sub-GHz共存的无线机制。单从芯片指标性能上说,该芯片有+20dbm最大发射功率,-126dbm接收灵敏度,链路预算非常优秀。EFR32FG目前已经支持1.2kbps DSSS+FEC长距离模式,现在已经是Lora的强力竞争对手,助力更低成本、高性能的长距离通信产

2019-12-02 -  新产品 代理服务 技术支持 采购服务

【经验】无线收发器如何实现超长前导码发送?

Silicon Labs sub-GHz无线收发器si446x控制前导码长度的寄存器只有1个字节,最长只可发送255字节的前导码,这种超长的前导码该如何发送呢?本文将详细介绍具体实现。

2018-03-21 -  设计经验 代理服务 技术支持 采购服务

【经验】低功耗Sub-GHz无线收发器Si4438在国网南网标准的无线数据白化配置

Silicon Labs的低功耗高性能Sub-GHz无线收发器Si4438,+20dbm(100mW)的输出功率,-124dbm的接收灵敏度。集成度高,包括硬件的CRC、数据白化、曼彻斯特编码等,在工程开发时可以减少软件的工作,提高系统的稳定性。Si4438在国网和南网的电力无线抄表中被广泛应用。

2019-05-31 -  设计经验 代理服务 技术支持 采购服务

【经验】 Si446x Sub-Ghz频段无线收发器的GND引脚该如何处理?

Si446x 是silicon Labs公司的一款高性能Sub-Ghz频段的无线收发器。广泛用于室内照明及智能家居,安防监控,楼宇自动化,测量及四表等领域。Si446x芯片的pin18引脚和芯片底部焊盘都是GND,在设计的时候该如何处理?

2019-08-30 -  设计经验 代理服务 技术支持 采购服务

【应用】434MHz无线收发器Si4438用于无线烟感,具有低功耗、传输距离远等优势

随着无线技术发展,无线的独立式烟感报警器已经在行业内兴起,Silicon Labs推出的无线收发器Si4438,可覆盖从425 MHz至525 MHz的Sub-GHz频段,射频性能优异,传输数据远,功耗低,非常适合独立式烟感应用需求。

2019-12-29 -  应用方案 代理服务 技术支持 采购服务
展开更多

电子商城

查看更多

品牌:SILICON LABS

品类:Transceiver

价格:¥15.8878

现货: 53,721

品牌:SILICON LABS

品类:Transceiver

价格:¥7.1077

现货: 21,827

品牌:SILICON LABS

品类:Transceiver

价格:¥19.8832

现货: 2,490

品牌:SILICON LABS

品类:HIGH-PERFORMANCE LOW-CURRENT TRANSCEIVER

价格:¥16.5384

现货: 2,355

品牌:SILICON LABS

品类:HIGH-PERFORMANCE LOW-CURRENT TRANSCEIVER

价格:¥15.8878

现货: 2,319

品牌:SILICON LABS

品类:HIGH-PERFORMANCE LOW-CURRENT TRANSCEIVER

价格:¥12.3574

现货: 1,480

品牌:SILICON LABS

品类:Transceiver

价格:¥16.3528

现货: 581

品牌:SILICON LABS

品类:HIGH-PERFORMANCE LOW-CURRENT TRANSCEIVER

价格:¥17.5602

现货: 150

品牌:SILICON LABS

品类:HIGH-PERFORMANCE LOW-CURRENT TRANSCEIVER

价格:¥16.3528

现货: 29

品牌:SILICON LABS

品类:HIGH-PERFORMANCE LOW-CURRENT TRANSCEIVER

价格:¥16.5384

现货: 10

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

现货市场

查看更多

品牌: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

品牌:SILICON LABS

品类:8位MCU

价格:¥56.0000

现货:550

品牌:SILICON LABS

品类:8位MCU

价格:¥5.1900

现货:396

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

品牌:

品类:

价格:

现货:

服务

查看更多

网络分析仪/频谱仪/信号分析仪/无线综测仪/信号发生器租赁

提供是德(Keysight),罗德(R&S)测试测量仪器租赁服务,包括网络分析仪、无线通讯综测仪、信号发生器、频谱分析仪、信号分析仪、电源等仪器租赁服务;租赁费用按月计算,租赁价格按仪器配置而定。

提交需求>

网络分析仪/频谱仪/信号分析仪/无线综测仪/信号发生器维修

朗能泛亚提供是德(Keysight),罗德(R&S)等品牌的测试测量仪器维修服务,包括网络分析仪、无线通讯综测仪、信号发生器、频谱分析仪、信号分析仪、电源等仪器维修,支持一台仪器即可维修。

提交需求>

查看更多

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

查看更多

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

查看更多

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

查看更多

授权代理品牌:电子材料

查看更多

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

查看更多

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

查看更多

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

查看更多

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

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

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

收藏
收藏当前页面