找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9970|回复: 2
打印 上一主题 下一主题
收起左侧

基于Si4432和SX1212间无线通信的实现

[复制链接]
跳转到指定楼层
楼主
基于Si4432和SX1212间无线通信的实现
一、引言
        在为客户提供技术支持和RF定制的过程中,我们发现由于功能要求升级和产品更新换代等原因,经常会遇到需要内嵌不同无线芯片的模块能相互通信的问题,但芯片间的规格、参数、数据格式的各种区别让人不知从何着手。
本次测试选用的是深圳市思为无线科技有限公司自主研发的RF模块RF4432PRO(内嵌Si4432芯片)和RF4463PRO(内嵌Si4463芯片),并描述了详细实验过程、硬件接口和相关示例程序,希望为解决不同无线芯片间的通信问题提供一个参考的方法。
        深圳市思为无线科技有限公司是一家专注于RF及传感器类模块应用开发的技术、服务及销售型公司。其针对不同的射频芯片开发了多种应用模块和方案。目前产品覆盖有20mW、100mW、500mW、1W、2W、3W、5W 等不同功率等级;SPI、UART(含TTL/RS232/RS485及USB)等多种通讯接口; 315/ 433/470/868/915 MHz及2.4 GHz等不同工作频率,总共上百种模块。多年的沉淀和积累使得深圳市思为无线科技有限公司在射频应用的软硬件方面都有着强劲的研发实力和丰富的应用经验。
二、实验系统硬件设计
1. 芯片性能和特点
图1:Si4432和Si4463芯片内置模块框图
        RF4432PRO模块中的Si4432是美国Silabs研发的一款工作频段低于1GHz的高性能射频收发芯片,属于其EzRadioPro系类。在国内已经广泛应用于工业、科研、医疗(ISM)以及短距离无线通信设备(SRD),其输出功率可高达 +20 dBm,接收灵敏度亦达到 -121 dBm。
        RF4463PRO模块采用的是Silicon Lab Si4463器件,这是一款高度集成的无线ISM频段收发芯片。极低的接收灵敏度(-126 dBm),再加上业界领先的+20 dBm的输出功率保证扩大范围和提高链路性能。同时内置天线多样性和对跳频支持可以用于进一步扩大范围,提高性能。
        具体参数可见Si4432和Si4463的芯片手册。RF4432PRO和RF4463PRO模块内提供了Si4432和Si4463芯片内置功能的硬件支持,用户可直接根据芯片手册进行模块的编程开发与控制。
模块
RF4432PRO
RF4463PRO
频率范围
403MHz,433MHz,463MHz
403MHz,433MHz,463MHz
发射电流
85mA,@20dBm
85mA,@20dBm
接收电流
18.5mA
13.5mA
静态功耗
<1uA
<0.1uA
发射功率范围
1dBm~20dBm
-5dBm~20dBm
接收灵敏度
-121dbm
@ data=1.2kbps
-126dbm
@data=500bps
表1: 经测试RF4432与RF1212射频参数对比
2.系统硬件设计
        实验系统硬件使用了无线模块RF4432PRO和RF4463PRO及其相应的DEMO演示板。RF4432PRO和RF4463PRO模块内含了经严格测试通过的工业级高性能的芯片应用电路。将各模块通过插针连接在一起,便完成了硬件平台的搭建。通过DEMO演示板中单片机的SPI口控制,两个无线收发模块之间相互通信,从而实现数据的无线传输。
        无线模块DEMO演示板(如下图2)是配合无线前端收发模块,为方便客户调试程序、测试距离而研发的开发板。该DEMO演示板外置无线模块引脚,设置参数可掉电保存。用户可通过按键设置修改模块的工作频率、发射功率以及通讯速率等相关参数。DEMO演示板共有5种工作模式,如表2。
表3和表4分别是RF4463PRO模块和RF4432PRO模块的脚位定义,具体可见深圳市思为无线科技有限公司官网中的RF4432PRO规格书和RF4463PRO规格书。

图2:DEMO演示板和无线模块硬件连接

图3: DEMO演示板LCD界面


工作模式
描    述
正常发射
(主模式)
定时发射数据包,成功发射一个数据包后红灯亮,转入接收模式,接收到应答信号后蓝灯亮,LCD显示发射和接收数据包的数量
正常接收
(从模式)
接收数据包,接收正确蓝灯亮,并将正确接收到的数据包再发射出去,发射成功后红灯亮,LCD显示发射和接收数据包的数量
常发射
(发射测试)
模块处于常发状态,红灯长亮,不显示数据包数量
常接收
(接收测试)
模块处于常接收状态,相应管脚实时输出接收波形,不计算接收数据包数量
休眠
RF模块处于休眠状态,可在此模式下测量静态功耗

表2: DEMO演示板工作模式

脚位编号
引脚定义
1
GND
接电源地
2
NC
空脚
3
GPIO0
直接连芯片的GPIO0引脚
4
GPIO1
直接连芯片的GPIO1引脚
5
VCC
接电源正极3.3V
6
SDO
0~VDD V数字输出,提供了对内部控制寄存器的串行回读功能
7
SDI
串行数据输入。0~VDD V数字输入。该引脚为4线串行数据串行数据流总线。
8
SCLK
串行时钟输入。0~VDD V数字输入。该引脚提供了4线串行数据时钟功能。
9
nSEL
串行接口选择输入引脚。0~VDD V数字输入。这个引脚为4线串行数据总线提供选择/使能功能,这个信号也用于表示突发读/写模式。
10
nIRQ
中断输出引脚
11
SDN
关闭输入引脚。0~VDD V数字输入。在除关机模式的所有模式SDN=0。当SDN=1时芯片将彻底关闭并且寄存器的内容将丢失。
12
GND
接电源地
13
ANT
接50欧的同轴天线
14
GND
接电源地

表3: RF4463PRO模块的脚位定义

脚位编号
引脚定义
描述
1
GND
接电源地
2
GPIO0
内部已接模块的发送控制脚
3
GPIO1
内部已接模块的接收控制脚
4
GPIO2
直接连芯片的GPIO2脚
5
VCC
接电源正极3.3V
6
SDO
0~VDD V数字输出,提供了对内部控制寄存器的串行回读功能
7
SDI
串行数据输入。0~VDD V数字输入。该引脚为4线串行数据流总线
8
SCLK
串行时钟输入。0~VDD V数字输入。该引脚提供了4线串行数据时钟功能
9

nSEL
串行接口选择输入引脚。0~VDD V数字输入。这个引脚为4线串行数据总线提供选择/使能功能,这个信号也用于表示突发读/写模式。
10
nIRQ
中断输出引脚
11

SDN
关闭输入引脚。0~VDD V数字输入。在除关机模式的所有模式SDN=0。当SDN=1时芯片将被彻底关闭并且寄存器的内容将丢失
12
GND
接电源地
13
ANT
接50欧的同轴天线
14
GND
接电源地

表4: RF4432PRO模块脚位定义
三、无线模块工作原理
        无线信号的发射和接收是将信号调制和解调的过程。无论是相同还是不同的无线模块通信,发射和接收两部分调制格式、调制速率和频率、频偏和接收带宽等调制参数的差别都会导致模块之间无法通信的情况。
3.1 SPI总线控制时序
        RF4432PRO和RF4463PRO模块与单片机的通信是RF模块根据单片机通过SPI总线写入的控制命令和数据将无线信号发射出去,并将接收到的数据和自身的相关信息通过SPI总线传送给单片机。Si4432与Si4463的SPI时序稍有区别。

图4:Si4432芯片SPI写时序

图5:Si4463芯片SPI写时序
3.2 测试模式
        RF4432PRO和RF4463PRO模块的DEMO演示板都有常发和常收两种测试模式,便于调试程序。RF4432PRO和RF1212模块在DEMO演示板测试模式下共同点是不停地传送“101010......”,并可在相应引脚看到接收的实时波形。

图6:DEMO演示板测试模式波形
3.3 正常模式
        RF4432PRO和RF4463PRO模块的DEMO演示板的正常收发模式运行在Si4432和Si4463的PH+FIFO模式。
        Si4432与Si4463都配置了64字节的FIFO及相应的数据包处理功能。该模式下,芯片自动添加和侦测前导码、同步字、校验等,并通过中断表示通信状态,大大方便了通信过程。在正常模式下通信,必须保证通信的两个模块的数据包格式设置完全一致,否则芯片将无法产生中断。
图7:Si4432数据包格式

图8:Si4463数据包格式
3.4 总结
        对比Si4432和Si4463芯片的数据包格式如表5。可以发现除了Si4463的数据包中可分为多个部分并各自设CRC校验外,其余部分基本一致。为保证两个芯片可以通信,将测试数据包格式设置如表6。


Si4432
Si4463
前导码Preamble
1~8 Bytes
1~8 Bytes
同步字Sync Word
1~4 Bytes
1~4 Bytes
字头TX Header
数据长度Packet Length
数据DATA
0~64 Bytes
0~64 Bytes
CRC
0~2 Bytes
0,2,4 Bytes

表5: Si4432与Si4463数据包格式对比


前导码
同步字
字头
数据
长度
Si4432
8 Bytes
2 Bytes
4 Bytes
10 Bytes
Si4463
8 Bytes
2 Bytes
4 Bytes
10 Bytes
内容
Si4432
“010101...”
0xb42b
“swwx”
“ABCDEFGHIm”
Si4463
“010101...”
0xb42b
“swwx”
“ABCDEFGHIm”

表6:测试数据包格式
四、具体调试过程
        系统通信采用的射频参数设置为:收发频率433.0 MHz、频偏20 KHz、RF速率:1.2 Kbps。发送的数据格式如表6所示。
        为确保RF4432PRO和RF4463PRO模块都能正常工作和提供参考波形,首先分别使相同模块能在该设置下使用DEMO演示板的正常模式通信。
4.1 对比接收与发射波形
        数据包模式由于芯片自动处理数据,只显示结果,不利于程序的调试。因此我们使用DEMO演示板测试模式和外置引脚,通过同步观察发送和接收波形这种最直观的方式,来判断通信质量的好坏。
将RF4432PRO和RF4463PRO的GPIO2和GPIO1设置为Rx Data output功能输出,使接收的数据可以分别从GPIO2和GPIO1脚上实时输出。使用逻辑分析仪来同步观察RF4463PRO和RF4432PRO模块发射、接收的波形并做相应的对比。如图10,可发现RF4432PRO和RF4463PRO能正确接收对方的发射信号。

图9:433MHz、1.2Kbps、20KHz频偏下RF4432与RF4463接收测试波形
        持续在测试模式下接收一段时间,观察每个接收波形,如图11,发现接收信号没有变形,判断在该射频参数下RF4432PRO和RF4463PRO可以正常通信。


图10:433MHz、1.2Kbps、20KHz频偏下RF4432与RF4463长时间接收测试波形
        如果RF4432PRO和RF4463PRO模块的接收波形不正确,可尝试调整两模块的调制频率、频偏、带宽等射频参数。如RF4432PRO和RF4463PRO模块的接收带宽与发射频偏设置不对应时,就会出现如图11的接收波形错误情况。
图11  433MHz 、1.2kbps、 30khz频偏下的RF4463接收波形
4.2 数据包模式接收
        RF4432PRO模块和RF4463PRO模块互相接收波形正确,因此保留射频参数,将DEMO演示板的工作模式设为正常模式,看能否让芯片产生中断。发现没有RF4432PRO模块和RF4463PRO模块都没有产生接收中断。
        分别将DEMO演示板设置成RF4432PRO正常发射、RF4463PRO测试接收,RF4463PRO正常发射、RF4432PRO测试接收,对比RF4432PRO和RF4463PRO发射的数据包波形,发现两模块的数据包格式设置不一致。

图12: 433MHz 、1.2kbps、20khz频偏下RF4432和RF4463发送数据包波形
        经对比,发现4463的同步字与设置“0x2DD4”不符,而是“0xB42B”。且4432的前导码为“0101...”,不是之前默认的“1010...”。将两模块的数据包格式重新调整,用DEMO演示板正常模式通信。发现RF4432PRO和RF4463PRO模块都产生了接收中断。

        RF4463发射中断



        RF4432接收中断



        RF4463接收中断



        RF4432发射中断

图13:433MHz 、1.2kbps 、20khz频偏RF4463和RF4432中断

4.3总体流程图
图14: RF4432PRO和RF4463PRO通信调试流程图

实验结果
5.1 硬件结果
        RF4463PRO工作在DEMO演示板的正常发射模式,RF4432PRO工作在DEMO演示板的正常接收模式。发送和接收的数据包数量显示在屏幕上。如图18,发送一段时间后没有丢包现象。

图15: RF4432PRO(左)与RF4463PRO通信实物图
5.2 软件结果
        图19中4432IRQ为RF4432PRO中断引脚,4463IRQ为RF4463PRO的中断引脚。可见每个发送中断都有相应的接收中断。
图16: RF4432PRO和RF4463PRO通信中断
六、示例程序
        实验的关键在于RF4432PRO和RF4463PRO模块的初始化设置部分,其余与相同模块间的通信程序一致。将以下测试可行的RF4432PRO和RF4463PRO模块初始化代码直接代入通信程序,即可实现RF4432PRO和RF4463PRO模块间的通信。本实验使用的完整测试程序可见深圳市思为无线科技有限公司官网的RF4432 DEMO CODE和RF4463 DEMO CODE。

6.1 RF4432PRO初始化示例

void SI4432_init(void)
{
         ItStatus1 = spi_rw(0x03,0x00);               // clr RF interrupt factor
         ItStatus2 = spi_rw(0x04,0x00);

         SpiWriteCfg(0x06|0x80, 0x00);                      //  Set RF interrupt

         SpiWriteCfg(0x07|0x80, SI4432_PWRSTATE_READY);   // enter ready mode

         SpiWriteCfg(0x09|0x80, 0x7f);    //  load cap = 12P

         SpiWriteCfg(0x0a|0x80, 0x05);      // output clk set
         SpiWriteCfg(0x0b|0x80,0xea);      // gpio0 for digital output
         SpiWriteCfg(0x0c|0x80,0xea);       // gpio0 for digital output
         SpiWriteCfg(0x0d|0x80, 0xf4);    // GPIO 2 = rx data

         SpiWriteCfg(0x70|0x80, 0x2c);  
         SpiWriteCfg(0x1d|0x80, 0x40);    // enable afc

         // 1.2K bps setting
         SpiWriteCfg(0x1c, 0x16);     // according to Silabs's excel            
         SpiWriteCfg(0x20, 0x83);   
         SpiWriteCfg(0x21, 0xc0);   
         SpiWriteCfg(0x22, 0x13);     
         SpiWriteCfg(0x23, 0xa9);   
         SpiWriteCfg(0x24, 0x00);
         SpiWriteCfg(0x25, 0x04);   
         SpiWriteCfg(0x2a, 0x14);
         SpiWriteCfg(0x72, 0x20);
         SpiWriteCfg(0x6e, 0x09);
         SpiWriteCfg(0x6f, 0xd5);      
         SpiWriteCfg(0x70, 0x2c);     
         // 1.2K bps setting end

         SpiWriteCfg(0x30|0x80, 0x88);  // enable packet handler, msb first, enable crc,
         SpiWriteCfg(0x32|0x80, 0xff);  // 0x32address enable for headere byte 0, 1,2,3, receive header check for byte 0, 1,2,3
         SpiWriteCfg(0x33|0x80, 0x4a);      // header 3, 2, 1,0 used for head length, fixed packet length,
         SpiWriteCfg(0x34|0x80, 64);        // preamble = 64 nibbles
         SpiWriteCfg(0x35|0x80, 0x20);    // preamble detection = 20 bit

         SpiWriteCfg(0x36|0x80,b4);           // sync word =  0xb42b
         SpiWriteCfg(0x37|0x80,2b);
         SpiWriteCfg(0x38|0x80, 0x00);
         SpiWriteCfg(0x39|0x80, 0x00);
         SpiWriteCfg(0x3a|0x80, 's');                  // tx header
         SpiWriteCfg(0x3b|0x80, 'w');
         SpiWriteCfg(0x3c|0x80, 'w');
         SpiWriteCfg(0x3d|0x80, 'x');
         SpiWriteCfg(0x3e|0x80, 10);                 // total tx 10 byte
         SpiWriteCfg(0x3f|0x80, 's');                    // check hearder
         SpiWriteCfg(0x40|0x80, 'w');
         SpiWriteCfg(0x41|0x80, 'w');
         SpiWriteCfg(0x42|0x80, 'x');
         SpiWriteCfg(0x43|0x80, 0xff);     // all the bit to be checked
         SpiWriteCfg(0x44|0x80, 0xff);     // all the bit to be checked
         SpiWriteCfg(0x45|0x80, 0xff);              // all the bit to be checked
         SpiWriteCfg(0x46|0x80, 0xff);     // all the bit to be checked
         SpiWriteCfg(0x6d|0x80, 0x07);    // maximum ouput power

         SpiWriteCfg(0x79|0x80, 0x0);      // non hop
         SpiWriteCfg(0x7a|0x80, 0x0);      // non hop   

         SpiWriteCfg(0x71|0x80, 0x22);     // FiFo, FSK , not need clk     

         SpiWriteCfg(0x72|0x80, 0x50);    // deviation:  50KHz   

         SpiWriteCfg(0x73|0x80, 0x0);      // no frequency offset
         SpiWriteCfg(0x74|0x80, 0x0);      // no frequency offset

         SpiWriteCfg(0x75|0x80,0x53);
         SpiWriteCfg(0x76|0x80,0x57);
         SpiWriteCfg(0x77|0x80,0x80);                // frequency:433.5 MHz         
}

6.2 RF4463初始化示例
const unsigned char RF_MODEM_CLKGEN_BAND_1_data[] = {RF_MODEM_CLKGEN_BAND_1};
//according to Silabs's wireless development suite
const unsigned char RF_FREQ_CONTROL_INTE_8_data[] = {RF_FREQ_CONTROL_INTE_8};
const unsigned char RF_POWER_UP_data[] = { RF_POWER_UP};
const unsigned char RF_GPIO_PIN_CFG_data[] = { RF_GPIO_PIN_CFG};
const unsigned char RF_GLOBAL_XO_TUNE_1_data[] = { RF_GLOBAL_XO_TUNE_1};
const unsigned char RF_GLOBAL_CONFIG_1_data[] = { RF_GLOBAL_CONFIG_1};
const unsigned char RF_FRR_CTL_A_MODE_4_data[] = { RF_FRR_CTL_A_MODE_4};
const unsigned char RF_PREAMBLE_TX_LENGTH_9_data[] = { RF_PREAMBLE_TX_LENGTH_9};
const unsigned char RF_SYNC_CONFIG_5_data[] = { RF_SYNC_CONFIG_5};
const unsigned char RF_PKT_CRC_CONFIG_1_data[] = { RF_PKT_CRC_CONFIG_1};
const unsigned char RF_PKT_CONFIG1_1_data[] = { RF_PKT_CONFIG1_1};
const unsigned char RF_PKT_LEN_3_data[] = { RF_PKT_LEN_3};
const unsigned char RF_PKT_FIELD_1_LENGTH_12_8_12_data[]={ RF_PKT_FIELD_1_LENGTH_12_8_12};
const unsigned char RF_PKT_FIELD_4_LENGTH_12_8_8_data[] = { RF_PKT_FIELD_4_LENGTH_12_8_8};
const unsigned char RF_MODEM_FREQ_DEV_0_1_data[] = { RF_MODEM_FREQ_DEV_0_1};
const unsigned char RF_MODEM_AGC_CONTROL_1_data[] ={ RF_MODEM_AGC_CONTROL_1};
const unsigned char RF_MATCH_VALUE_1_12_data[] ={ RF_MATCH_VALUE_1_12};
const unsigned char RF_MODEM_RSSI_COMP_1_data[] = { RF_MODEM_RSSI_COMP_1};
const unsigned char RF_MODEM_MOD_TYPE_12_data[]= {RF_MODEM_MOD_TYPE_12};
const unsigned char RF_MODEM_TX_RAMP_DELAY_8_data[]=   {RF_MODEM_TX_RAMP_DELAY_8};
const unsigned char RF_MODEM_BCR_OSR_1_9_data[]={RF_MODEM_BCR_OSR_1_9};
const unsigned char RF_MODEM_AFC_GEAR_7_data[]={RF_MODEM_AFC_GEAR_7};
const unsigned charRF_MODEM_AGC_WINDOW_SIZE_9_data[]={RF_MODEM_AGC_WINDOW_SIZE_9};
const unsigned char RF_MODEM_OOK_CNT1_11_data[]={RF_MODEM_OOK_CNT1_11};
const unsigned char RF_MODEM_CHFLT_RX1_CHFLT_COE13_7_0_12_data[]=
{RF_MODEM_CHFLT_RX1_CHFLT_COE13_7_0_12};
const unsigned char RF_MODEM_CHFLT_RX1_CHFLT_COE1_7_0_12_data[]
={RF_MODEM_CHFLT_RX1_CHFLT_COE1_7_0_12};
const unsigned char RF_MODEM_CHFLT_RX2_CHFLT_COE7_7_0_12_data[]=
{RF_MODEM_CHFLT_RX2_CHFLT_COE7_7_0_12};
const unsigned char RF_SYNTH_PFDCP_CPFF_7_data[]={RF_SYNTH_PFDCP_CPFF_7};
void SI4463_init(void)
{      
         U8 app_command_buf[20],i;

         //spi_write(0x07, RF_GPIO_PIN_CFG_data);   
         app_command_buf[0] = 0x13;                          // SET GPIO PORT
         app_command_buf[1]  = 0x14;             // gpio 0 ,Rx data
         app_command_buf[2]  = 0x02;                   // gpio1, output 0
         app_command_buf[3]  = 0x21;            // gpio2, hign while in receive mode
         app_command_buf[4]  = 0x20;             // gpio3, hign while in transmit mode
         app_command_buf[5]  = 0x27;                    // nIRQ
         app_command_buf[6]  = 0x0b;            // sdo
         spi_write(7, app_command_buf);

         // spi_write(0x05, RF_GLOBAL_XO_TUNE_1_data);
    app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x00;   
         app_command_buf[2]  = 0x01;   
         app_command_buf[3]  = 0x00;  
         app_command_buf[4]  = 98;                         // freq  adjustment
         spi_write(5, app_command_buf);

         // spi_write(0x05, RF_GLOBAL_CONFIG_1_data);
       app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x00;
         app_command_buf[2]  = 0x01;
         app_command_buf[3]  = 0x03;
         app_command_buf[4]  = 0x40;            // tx = rx = 64 byte,PH,high performance mode
         spi_write(5, app_command_buf);

    spi_write(0x08, RF_FRR_CTL_A_MODE_4_data);    // disable all fast response register

    // spi_write(0x0D, RF_PREAMBLE_TX_LENGTH_9_data); // set Preamble
        app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x10;   
         app_command_buf[2]  = 0x09;   
         app_command_buf[3]  = 0x00;   
         app_command_buf[4]  = 0x08;                                                             //  8 bytes Preamble
         app_command_buf[5]  = 0x14;                                                             //  detect 20 bits
         app_command_buf[6]  = 0x00;                                                   
         app_command_buf[7]  = 0x0f;
         app_command_buf[8]  = 0x32;                                                 //  no manchest.1010...
         app_command_buf[9]  = 0x00;
         app_command_buf[10]  = 0x00;
         app_command_buf[11]  = 0x00;
         app_command_buf[12]  = 0x00;
         spi_write(13, app_command_buf);  //   

         //  RF_SYNC_CONFIG_5_data,                                                         // set sync
    app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x11;
         app_command_buf[2]  = 0x05;
         app_command_buf[3]  = 0x00;
         app_command_buf[4]  = 0x01;                                                          // no manchest , 2 bytes
         app_command_buf[5]  = 0x2d;                                                          // sync byte3
         app_command_buf[6]  = 0xd4;                                                             // sync byte2
         app_command_buf[7]  = 0x00;                                                             // sync byte1
         app_command_buf[8]  = 0x00;                                                             // sync byte0
    spi_write(9, app_command_buf);

         //  packet crc         
    app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x12;
         app_command_buf[2]  = 0x01;
         app_command_buf[3]  = 0x00;
         app_command_buf[4]  = 0x80;                                                             // no crc
    spi_write(5, app_command_buf);  

         // packet   gernale configuration        
    app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x12;
         app_command_buf[2]  = 0x01;
         app_command_buf[3]  = 0x06;
         app_command_buf[4]  = 0x02;                                                             // CRC MSB, data MSB
    spi_write(5, app_command_buf);  

       // spi_write(0x07, RF_PKT_LEN_3_data);   
    app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x12;
         app_command_buf[2]  = 0x03;
         app_command_buf[3]  = 0x08;
         app_command_buf[4]  = 0x00;
         app_command_buf[5]  = 0x00;
         app_command_buf[6]  = 0x00;                                                   
    spi_write(7, app_command_buf);         

         app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x12;
         app_command_buf[2]  = 0x0c;
         app_command_buf[3]  = 0x0d;
         app_command_buf[4]  = 0x00;
         app_command_buf[5]  = 14;                  //header(4)+10 bytes
         app_command_buf[6]  = 0x04;
         app_command_buf[7]  = 0xaa;
         app_command_buf[8]  = 0x00;
         app_command_buf[9]  = 0x00;
         app_command_buf[10]  = 0x00;
         app_command_buf[11]  = 0x00;
         app_command_buf[12]  = 0x00;
         app_command_buf[13]  = 0x00;
         app_command_buf[14]  = 0x00;
         app_command_buf[15]  = 0x00;
         spi_write(16, app_command_buf);                                       // set length of Field 1 -- 4

    // spi_write(0x0C, RF_PKT_FIELD_4_LENGTH_12_8_8_data);
    app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x12;
         app_command_buf[2]  = 0x08;
         app_command_buf[3]  = 0x19;
         app_command_buf[4]  = 0x00;
         app_command_buf[5]  = 0x00;
         app_command_buf[6]  = 0x00;
         app_command_buf[7]  = 0x00;
         app_command_buf[8]  = 0x00;
         app_command_buf[9]  = 0x00;
         app_command_buf[10]  = 0x00;
         app_command_buf[11]  = 0x00;
    spi_write(12, app_command_buf);

    spi_write(0x10, RF_MODEM_MOD_TYPE_12_data);        
         spi_write(0x05, RF_MODEM_FREQ_DEV_0_1_data);

    spi_write(0x0C, RF_MODEM_TX_RAMP_DELAY_8_data);         
    spi_write(0x0D, RF_MODEM_BCR_OSR_1_9_data);                        
    spi_write(0x0B, RF_MODEM_AFC_GEAR_7_data);                          
    spi_write(0x05, RF_MODEM_AGC_CONTROL_1_data);                  
    spi_write(0x0D, RF_MODEM_AGC_WINDOW_SIZE_9_data);        
    spi_write(0x0F, RF_MODEM_OOK_CNT1_11_data);                        

         // spi_write(0x05, RF_MODEM_RSSI_COMP_1_data);
         app_command_buf[0] = 0x11;  
         app_command_buf[1] = 0x20;                                                     
         app_command_buf[2] = 0x01;                                                   
         app_command_buf[3] = 0x4e;            
         app_command_buf[4]  = 0x40;
    spi_write(5, app_command_buf);                          

    spi_write(0x10, RF_MODEM_CHFLT_RX1_CHFLT_COE13_7_0_12_data);
    spi_write(0x10, RF_MODEM_CHFLT_RX1_CHFLT_COE1_7_0_12_data);
    spi_write(0x10, RF_MODEM_CHFLT_RX2_CHFLT_COE7_7_0_12_data);      

         // RF_PA
         app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x22;                                                   
         app_command_buf[2]  = 0x04;                                               
         app_command_buf[3]  = 0x00;                                                     
         app_command_buf[4]  = 0x08;
         app_command_buf[5]  = 127;                                                               // set max power
         app_command_buf[6]  =0x00;
         app_command_buf[7]  = 0x3d;
    spi_write(8, app_command_buf);        

         spi_write(0x0B, RF_SYNTH_PFDCP_CPFF_7_data);

      // header match
      app_command_buf[0] = 0x11;  
         app_command_buf[1]  = 0x30;                                                     
         app_command_buf[2]  = 0x0c;                                                   
         app_command_buf[3]  = 0x00;                                                      
         app_command_buf[4]  = 's';
         app_command_buf[5]  = 0xff;
         app_command_buf[6]  = 0x40;
         app_command_buf[7]  = 'w';                                      
         app_command_buf[8]  = 0xff;                                       
         app_command_buf[9]  = 0x01;
         app_command_buf[10] = 'w';                                   
         app_command_buf[11]  =0xff;                                       
         app_command_buf[12]  =0x02;
         app_command_buf[13]  = 'x';                                 
         app_command_buf[14]  = 0xff;
         app_command_buf[15]  = 0x03;
    spi_write(16, app_command_buf);

    spi_write(5, RF_MODEM_CLKGEN_BAND_1_data);
    spi_write(12, RF_FREQ_CONTROL_INTE_8_data);            // set frequency =433.5
7 总结
        本文描述了深圳市思为无线科技有限公司的无线收发模块通信RF4432PRO和RF4463PRO间的详细实现过程、硬件接口和示例程序,经实验验证可行。实现通信的基本方法是将RF4432PRO和RF4463PRO设置相同射频参数及数据格式。这个方法也可以引申至其他不同无线模块和无线芯片的通信。如遇到与文中不同的实验现象,对实验过程有疑问或其他想法欢迎与我们进行技术交流。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:136504 发表于 2016-10-26 10:31 | 只看该作者
HW3000超低双向无线fsk模块完美替代CC1101、CC1120、A7139、A7108、si4432、si4438、si4463 [
回复

使用道具 举报

板凳
ID:381973 发表于 2019-1-13 21:32 | 只看该作者
了解SI4432中,不错的资料
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表