没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
EZRADIOPRO™ 编程指南
Coolbor Xie 翻译自 AN415
1、概述
本文档通过几个简单的软件示例,介绍了如何配置 EZRadioPRO 射频发射器、接收器和收发器操作。
本指南包括以下操作示例:
z 如何使用 EZRadioPRO 发射器或收发器在 FIFO 模式下进行数据包发射;
z 如何使用 EZRadioPRO 接收器或收发器在 FIFO 模式下进行数据包接收;
z 如何使用 EZRadioPRO 收发器进行双向基本通信;
z 如何使用 FIFO 发射和接收超过 64 字节的数据包。
最后一个示例程序源代码可以 Silicon Labs 网站下载:
https://www.silabs.com/products/wireless/EZRadioPRO/
,或在与评估板工具包一起送出的 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 无效引导码超时的定义不同。
为 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 接收示例代码无需任何修改即可支持 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 开关。在使用 Si4432 最高输出功率设置时,发射和接收引脚通过一个 SPDT
(单刀双掷)RF 开关分别连接到天线。EZRadioPRO 器件能进行 RF 开关控制。通过将 RX State 和 TX State
信号送到任意两个 GPIO,即可自动控制 RF 开关。根据工作的模式,GPIO 控制 RF 开关自动将天线连接
到接收通道或发射通道。如果芯片未处于激活模式,GPIO 将禁止 RF 开关。
在单天线测试卡和
EZLink SIL 模块上,使用了相同的 RF 开关配置:TX State 信号送到 GPIO1,RX State
信号送到 GPIO2。
EZRadioPRO 一个关键的优点在于内置天线分集支持:连接两个不同极化的天线。在数据包接收的开
头,芯片对两个天线的接收信号强度进行评估,并使用较强的一个来接收数据包的剩余部分。通过选择信
号最强的天线,可以在多路径衰减和天线极化的影响存在的情况下大大提高接收器的性能。
在使用这个特性的时候,需要有一个 RF 开关将天线连接到接收或发射路径。EZRadioPRO 器件通过
任意两个 GPIO 来自动控制 RF 开关。将用于天线分集信号的天线 1 开关和用于天线分集信号的天线 2 开
关送到 GPIO,射频就会在接收模式下自动在两个天线之间切换。用于 RX 数据包接收的天线随后将用于
TX 数据包的发射。在天线分集测试卡(Antenna Diversity 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_WITH_RF_SWITCH
z Antenna Diversity #define ANTENNA_DIVERSITY
在 EZLink 平台的源代码中没有编译选项,因为这是一个固定的硬件配置。从射频功能的角度来看,
相当于一个单天线测试卡。
注意: EZRadioPRO 器件的发射输出必须在输出功率被允许之前终止,通过使用适当的天线或将功率
放大器连接到提供 50Ω 终端的 RF 仪器,可以确保正确的操作并保护器件不被损坏。
2.2. 初始化 MCU
软件示例使用了最少的控制器上可用的硬件外围设备来简化源代码的复杂性。提供以下硬件支持:
z 使用按键来启动数据包发射。
z 通过一个 LED 来指示数据包发射与接收。
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 可以用它来控制器件。而该连接在
软件开发(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 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);
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
//#define 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)板上的所有必要的外围设备进行初始化:
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 high current mode
SFRPAGE = LEGACY_PAGE;
XBR2 |= 0x40; // enable Crossbar
// For the SPI communication the hardware peripheral of the MCU is used
//in 3 wires Single Master Mode. The select pin of the radio is controlled
//from software
SPI1CFG = 0x40; //Master SPI, CKPHA=0, CKPOL=0
SPI1CN = 0x00; //3-wire Single Master, SPI enabled
SPI1CKR = 0x00;
SPI1EN = 1; // Enable SPI interrupt
NSS = 1;
// Turn off the LEDs
LED1 = 0;
LED2 = 0;
LED3 = 0;
LED4 = 0;
}
void SpiWriteRegister(U8 reg, U8 value)函数将一个新的值写入器件的寄存器。如果只写一个寄存器,
则必须写入一个 16 位的值:一个为寄存器的 8 位地址,后面跟一个 8 位的寄存器值。要写寄存器,地址
的最高位必须为 1,以指示为写操作。
void SpiWriteRegister (U8 reg, U8 value)
{
// Send SPI data using double buffered write
//Select the radio by pulling the nSEL pin to low
NSS = 0;
//write the address of the register into the SPI buffer of the MCU
//(important to set the MSB bit)
SPI1DAT = (reg|0x80); //write data into the SPI register
//wait until the MCU finishes sending the byte
while( SPIF1 == 0);
SPIF1 = 0;
//write the new value of the radio register into the SPI buffer of the MCU
SPI1DAT = value; //write data into the SPI register
//wait until the MCU finishes sending the byte
while( SPIF1 == 0); //wait for sending the data
SPIF1 = 0;
//Deselect the radio by pulling high the nSEL pin
NSS = 1;
}
The U8 SpiReadRegister(U8 reg) 函数从芯片读取一个寄存器。在读取单个寄存器时,必须发送一个 16
位的值给芯片:一个为寄存器的 8 位地址,后面跟一个 8 位的寄存器值。在 SPI 处理的第二个字节期间,
芯片将提供寄存器的值。注意必须将寄存器地址的 MSB 清零以指示为读周期。
U8 SpiReadRegister (U8 reg)
{
//Select the radio by pulling the nSEL pin to low
NSS = 0;
//Write the address of the register into the SPI buffer of the MCU
//(important to clear the MSB bit)
SPI1DAT = reg; //write data into the SPI register
//Wait until the MCU finishes sending the byte
while( SPIF1 == 0);
SPIF1 = 0;
//Write a dummy data byte into the SPI buffer of the MCU. During sending
//this byte the MCU will read the value of the radio register and save it
//in its SPI buffer.
SPI1DAT = 0xFF; //write dummy data into the SPI register
//Wait until the MCU finishes sending the byte
while( SPIF1 == 0);
SPIF1 = 0;
//Deselect the radio by pulling high the nSEL pin
NSS = 1;
剩余37页未读,继续阅读
qiangzzh
- 粉丝: 2
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于matlab实现对表面肌电信号进行归一化处理,并对归一化后的图形显示 .rar
- 基于matlab实现单级倒立摆的 T-S 模型 包括 LMI 程序源码
- 图书管理系统(struts+hibernate+spring+ext).rar
- 基于matlab实现此压缩包包含语音信号处理中的语音变声代码加音频.rar
- STM32使用PWM驱动舵机并通过OLED显示
- 基于matlab实现车辆路径规划;遗传算法;matlab代码.rar
- 图书管理系统(struts+hibernate+spring)130225.rar
- 基于matlab实现采用标量衍射理论,实现菲涅尔衍射和夫琅禾费衍射,对光波的波前传播和数字全息的应用有帮助.rar
- JavaScript版去除链表重复元素
- 微信小程序项目-功德木鱼(带设置面板-自定义文字、可选字体颜色、可选木鱼样式)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页