《Si4432编程指南(中文)》由会员分享,可在线阅读,更多相关《Si4432编程指南(中文)(38页珍藏版)》请在金锄头文库上搜索。
1、EZRADIOPRO 编程指南 Coolbor Xie 翻译自 AN415 1、概述 本文档通过几个简单的软件示例,介绍了如何配置 EZRadioPRO 射频发射器、接收器和收发器操作。 本指南包括以下操作示例: z 如何使用 EZRadioPRO 发射器或收发器在 FIFO 模式下进行数据包发射; z 如何使用 EZRadioPRO 接收器或收发器在 FIFO 模式下进行数据包接收; z 如何使用 EZRadioPRO 收发器进行双向基本通信; z 如何使用 FIFO 发射和接收超过 64 字节的数据包。 最后一个示例程序源代码可以 Silicon Labs 网站下载:https:/ 或在与
2、评估板工具包一起送出的 WDS 光盘上找到。 2、硬件选项 提供两个 EZRadioPRO 收发器芯片的源代码: Si4431-A0 版和 Si4432-V2 版。 这两个器件之间有几点区别: z Si4432-V2 要求对一些寄存器进行编程为不同于其默认的值。而 Si4431-A0 则无此需要。 z Si4431-A0有一个单独的寄存器用于自动频率调整 ( Auto-Frequency Calibration) 限制; 而 Si4432-V2则使用频率偏差( Frequency Deviation)寄存器。 z Si4431 和 Si4432 的调制解调器的参数不同。 z 无效引导码超时的定
3、义不同。 为 Si4431 和 Si4432 所提供的源代码例程分别使用不同的高亮。 Si4431 和 Si4432 器件以后的版本将共享 Si4431-A0 相同的寄存器设置。 注意: 由于本文档只介绍了 Si4431-A0 和 Si4432-V2 器件,但发射或接收软件支持 EZRadioPRO 单独的发射器和接收器: z Si4431-A0 发射例程代码无需任何修改即可支持 Si4031-A0。代码也可应用于 Si4430-A0 或Si4030-A0,但中心频率必须设置为相应的值。 z Si4432-V2 发射示例代码无需任何修改即可支持 Si4032-V2。 z Si4431 接收示例
4、代码无需任何修改即可支持 Si4330-A0。 平台上每个示例都提供了一个单独的 Silicon Labs IDE 工作区。 Silicon Labs IDE 文件名代表了所给代码是为以下哪个平台所写的: z 含有 “SDBC_DK3”的工作区文件名是为软件开发板( Software Development board)写的 z 含有 “EZLINK”的工作区文件名是为 EZLink 平台写的。 2.1 天线选项 在 EZRadioPRO 器件内部,功放和 LNA 并没有连接。在使用 Si4431 收发器的时候, TX 和 RX 引脚可以直接连接在一起, 而无需 RF 开关。 在使用 Si44
5、32 最高输出功率设置时, 发射和接收引脚通过一个 SPDT(单刀双掷) RF 开关分别连接到天线。 EZRadioPRO 器件能进行 RF 开关控制。 通过将 RX State 和 TX State信号送到任意两个 GPIO,即可自动控制 RF 开关。根据工作的模式, GPIO 控制 RF 开关自动将天线连接到接收通道或发射通道。如果芯片未处于激活模式, GPIO 将禁止 RF 开关。 在单天线测试卡和 EZLink SIL 模块上,使用了相同的 RF 开关配置: TX State 信号送到 GPIO1, RX State信号送到 GPIO2。 EZRadioPRO 一个关键的优点在于内置天
6、线分集支持:连接两个不同极化的天线。在数据包接收的开头,芯片对两个天线的接收信号强度进行评估,并使用较强的一个来接收数据包的剩余部分。通过选择信号最强的天线,可以在多路径衰减和天线极化的影响存在的情况下大大提高接收器的性能。 在使用这个特性的时候,需要有一个 RF 开关将天线连接到接收或发射路径。 EZRadioPRO 器件通过任意两个 GPIO 来自动控制 RF 开关。将用于天线分集信号的天线 1 开关和用于天线分集信号的天线 2 开关送到 GPIO,射频就会在接收模式下自动在两个天线之间切换。用于 RX 数据包接收的天线随后将用于TX 数据包的发射。在天线分集测试卡( Antenna Di
7、versity Testcard)上, GPIO1 连接到用于天线分集信号的天线 1 开关,而 GPIO2 连接到用于天线分集信号的天线 2 开关,来控制 RF 开关的。 图 1. 单天线 Si4432 测试卡原理图 图 2. 天线分集 Si4432 测试卡原理图 用于软件开发( Software Development)板的示例源代码可以编译后用于各种测试卡。以下编译选项,位于 main_sdbc_dk3.c 文件的开头,用于选择不同测试卡的正确配置。 z TX/RX Split #define SEPARATE_RX_TX z Single Antenna #define ONE_SMA_
8、WITH_RF_SWITCH z Antenna Diversity #define ANTENNA_DIVERSITY 在 EZLink 平台的源代码中没有编译选项,因为这是一个固定的硬件配置。从射频功能的角度来看,相当于一个单天线测试卡。 注意: EZRadioPRO 器件的发射输出必须在输出功率被允许之前终止,通过使用适当的天线或将功率放大器连接到提供 50终端的 RF 仪器,可以确保正确的操作并保护器件不被损坏。 2.2. 初始化 MCU 软件示例使用了最少的控制器上可用的硬件外围设备来简化源代码的复杂性。提供以下硬件支持: z 使用按键来启动数据包发射。 z 通过一个 LED 来指示
9、数据包发射与接收。 z EZRadioPRO 器件通过 SPI 连接到 MCU,同时 nIRQ 引脚连接到 MCU 的外部中断。 EZRadioPRO 器件与 MCU 之间的 SPI 和 nIRQ 连接在两个硬件平台上是相同的, 但在使用外围设备方面有一些区别: z 在两个平台上,示例代码只使用按键和 LED;但是,软件开发( Software Development)板有 4个 LED 和 4 个按键,而 EZLink 分别只有一个。在两个平台上 LED 和按键的 IO 引脚是不同的。 z 在 EZLink 平台上, PWRDN 引脚被连接到 MCU,所以 MCU 可以用它来控制器件。而该连
10、接在软件开发( Software Development)板上是不可用的, PWRDN 引脚被连接到 GND。 2.2.1. 软件开发板( Software Development Board)的初始化 在源代码中包含了与 MCU 有关的头文件,以提供一些宏定义以便代码可以使用几个常用的 C 编译器( Keil、 SDCC、 IAR 等)来编译。 /* = * * INCLUDE * * = */ #include C8051F930_defs.h #include compiler_defs.h /* = * * C8051F930 Pin definitions for Software
11、Development Board * * (using compiler_def.h macros) * * = */ 以下宏为给定的 IO 端口指定了一个标签,这样在源代码中可以很容易地引用这些端口。例如:第一行为 Port1.3 指定 “NSS”标签,该 nSEL 引脚被连接到该端口: SBIT(NSS, SFR_P1, 3); SBIT(NIRQ, SFR_P0, 6); SBIT(PB1, SFR_P0, 0); SBIT(PB2, SFR_P0, 1); SBIT(PB3, SFR_P2, 0); SBIT(PB4, SFR_P2, 1); SBIT(LED1, SFR_P1, 4
12、); SBIT(LED2, SFR_P1, 5); SBIT(LED3, SFR_P1, 6); SBIT(LED4, SFR_P1, 7); 以下定义用于配置插在软件开发( Software Development)板上的测试卡的类型: /One out of these definitions has to be uncommented which tells to the compiler what kind /of Testcard is plugged into the Software Development board #define SEPARATE_RX_TX /#defin
13、e ANTENNA_DIVERSITY /#define ONE_SMA_WITH_RF_SWITCH 有几个函数原型用于 MCU 初始化和 SPI 函数。 /* = * * Function PROTOTYPES * * = */ /MCU initialization void MCU_Init(void); /SPI functions void SpiWriteRegister (U8, U8); U8 SpiReadRegister (U8); void MCU_Init(void)函数对软件开发 ( Software Development) 板上的所有必要的外围设备进行初始化:
14、void MCU_Init(void) /Disable the Watch Dog timer of the MCU PCA0MD &= 0x40; / Set the clock source of the MCU: 10MHz, using the internal RC osc. CLKSEL = 0x14; / Initialize the IO ports and the cross bar P0SKIP |= 0xCF; / skip P0.0-3 & 0.6-7 XBR1 |= 0x40; / Enable SPI1 (3 wire mode) P1MDOUT |= 0x01; / Enable SCK push pull P1MDOUT |= 0x04; / Enable MOSI push pull P1SKIP |= 0x08; / skip NSS P1MDOUT |= 0x08; / Enable NSS push pull P1SKIP |= 0xF0; / skip LEDs P1MDOUT |= 0xF0; / Enable LEDS push pull P2SKIP |= 0x03; / skip PB3 & 4 SFRPAGE = CONFIG_PAGE; P1DRV = 0xFD; / MOSI, SCK, NSS, LEDs