There are cases when the exact TX to RX and/or RX to TX timing information is necessary to know. Obviously, it is possible to add GPIO toggle routines to the firmware code or using RAIL_GetTime() to determine transition times – however these are more or less inaccurate and additionally these have an overhead due to the extra codes.
EFR32 capable to emit TX and RX active signals. By routing these signals to PRS it is possible to examine (for example by an oscilloscope) the TX and RX active periods and thus the gaps between them, the transition times. Since in case of PRS there is a hardware channel between the producer and the consumer the measurement is very accurate. More about Peripheral Reflex System is available in “AN0025: Peripheral Reflex System (PRS)”.
To exploit the advantages of PRS it is necessary to include only a few lines of code to the project.
The following snippet was inserted into the Simple TRX example application executed on a Flex Gecko radio board (BRD4254A) using a BRD4001 WSTK but theoretically it should run on any EFR32 device.
To test how it works open the Simple TRX example, generate the radio config, add the following snippet to the code somewhere in main.c (for example after radioInit();) and compile then debug it.
This code will route RX active signal to PC10/P12 and TX active signal to PC11/P13 pins. Connect two oscilloscope probes to these pins to examine the waveforms.
The following screenshots show the RX→TX and TX→RX transition times:
Driving FEMs usually require some logic signals, which can be driven from software, but generally that's not fast enough (e.g. for CSMA/CA): It needs some hardware based signals.
Since EFR32 is an integrated radio MCU, this is not handled in the radio module, but a more general purpose module: Peripheral Reflex System, or PRS for short.
EFR32s has 12 PRS channels, each of these channels can be driven by numerous signals from various sources, and even some logic operations can be done between them. These channels can be connected to PRS consumers, so it can trigger a timer start for example.
You can also wire PRS channels to some GPIOs, and this is the feature we'll use. For more information of PRS, see the reference manual.
Hardware configurator does provide an "External LNA" module, but it's not supported in RAIL (as of Flex SDK 2.0). Also, it only supports one TX/RX and one sleep pin, which is probably not enough for more complicated FEMs.
This article is stack independent, although some stacks might provide an integrated way, like the External LNA module.
The prs signals
Generally a FEM requires the following:
rx/tx switch
sleep
rx/tx bypass
The bypass signals are usually either compile time or application time settings, so they can be driven like any other GPIO from software, or exactly the same as sleep and rx/tx, therefore it's not part of this article.
The following PRS signals are useful for driving a FEM:
RAC_ACTIVE active high when radio is on (either RX or TX)
RAC_LNAEN active high when LNA is needed
RAC_PAEN active high when PA is needed
Note that all signals can be inverted
RAC_ACTIVE can be used to drive the sleep pin, but using (RAC_LNAEN or RAC_PAEN) is more energy efficient.
GPIOs usable for PRS
See the Alternate Functionality Pinout chapter or device pinout table in the datasheet. PRS channel pins has PRS_CHx functionality on it.
The hardware configurator can be also used as a dynamic pinout diagram in Simplicity Studio (in all Flex SDK examples)
Keep in mind that you need independent PRS channels for each signal, you can't configure a PRS channel to two locations.
Also, logical operations limited to channels next to each other:
OR operation is only supported between a channel and a previous one (i.e. channel1 = channel0 OR channel1).
AND operation is only supported between a channel and the next one (i.e. channel0 = channel0 AND channel1).
This limits the usable pins, e.g. it's recommended to drive a sleep pin as (RAC_LNAEN or RAC_PAEN), which means whatever channel you plan to use for sleep, the previous one MUST be set up to either RAC_LNAEN or RAC_PAEN. However, you can set up the same signal to multiple channels, and you don't have to drive a gpio with a channel.
Configuring GPIOs in RAILTest
Generally, RAILTest is recommended to test the radio's setup and performance, so energy efficiency is not a goal here. Therefor, it would be enough to just drive pins low and high, although it's a bit simpler to use the tx/rx switch from PRS.
RAILTest only supports a few GPIOs:
PC10, PC11, PF2, PF3, PF4, PF5, PC9, PD9, PD10, PD11, PD12
A number of PRS signals are supported, unfortunately drive low/high and RAC_ACTIVE is not amongst them.
The following commands can be used
to drive pin high (when radio is on; 32/0 81/0 is the PRS source/signal of RAC_ACTIVE):
On EFR32xG1: setupDebugSignal CUSTOM_PRS 32 0
On everything else: setupDebugSignal CUSTOM_PRS 81 0
to drive pin low (CUSTOM_LIB is used internally for RAIL debugging, but on the public versions of the SDK it just drives the pin low):
setDebugSignal CUSTOM_LIB 0
to drive rx/tx pin, high on rx:
setDebugSignal LNAEN
to drive rx/tx pin, high on tx:
setDebugSignal PAEN
to turn off a pin
setDebugSignal OFF
E.g. to drive the LNA on the MGM12P module (sleep pin on PD10, tx/rx on PD11)
SEGGER SystemView is a real-time recording and visualization tool. It is freely available from SEGGER’s website.
This article describes how to setup SEGGER SystemView for a non-OS project and shows how to modify a simple Flex / RAIL example to call SEGGER SystemView routines.
The steps below described how to add SystemView capability to an example project and how to run it:
Extract SystemView source files from the downloaded archive (.zip) file to an arbitrary directory
Open the RAIL: Simple TRX example project and click on "Generate" to let Studio to generate the necessary files
From the previously extracted SystemView source files / directories copy "Config" and "SEGGER" directories and "Sample\NoOS\Config\Cortex-M\ SEGGER_SYSVIEW_Config_NoOS.c" file to the project’s root directory
Add the copied directories to the include path of the project:
Open and edit "main.c" and add the following lines to the code:
Open and edit "emdrv\gpiointerrupt.c" and add the following lines to the code:
#include "SEGGER_SYSVIEW.h"
SEGGER_SYSVIEW_RecordEnterISR();
SEGGER_SYSVIEW_RecordExitISR();
Note, "gpiointerrupt.c" is a shared SDK file, when you start to edit a popup will appear:
It is recommended to choose "Make a Copy" to keep the original file intact.
void GPIO_EVEN_IRQHandler(void)
{
SEGGER_SYSVIEW_RecordEnterISR(); //emit Enter ISR signal
uint32_t iflags;
/* Get all even interrupts. */
iflags = GPIO_IntGetEnabled() & 0x00005555;
/* Clean only even interrupts. */
GPIO_IntClear(iflags);
GPIOINT_IRQDispatcher(iflags);
SEGGER_SYSVIEW_RecordExitISR(); //emit Exit ISR signal
}
Compile and run the project as usual. SystemView does not require to project to debug, it will work if the code is just running.
Click on the SystemView icon in Studio to start SEGGER SystemView application:
When SystemView started, click on the green ‘Play’ icon.
A configuration window pops up. Leave all setting as their default and click "OK".
The SystemView application starts running. Pressing PB0 pushbutton on the WSTK board will result in events recorded:
Note that at the time of writing this article this information is captured incorrectly in the data sheets. The following minimum preambe length requiements are needed for packet loss free reception and no sensitivity loss compared to non antenna diversity applications (less the the insertion loss of the T/R switch and the longer traces obviously).
When AFC is not enabled antenna diversity requires 80 bits of preamble.
When AFC is enabled antenna diversity requires 88 bits of preamble.
Si446x revC2A and A2A devices support antenna diversity with DSA. This operation requitres 64 bits of preamble. Note however that co-channel rejection with DSA in antenna diversity mode is poor so this configuration is not recommended.
Leave all the antenna diversity parameter calculations to WDS. Make sure you transmit the minimum length of preamble and Rx will just work.
Although, the Radio Configurator supports 4FSK modulation, the sync word is 2FSK by default and in the GUI interface it is not possible change this parameter currently.
However, 4FSK sync word option is available by editing the generated project files.
The following steps shows how to set the sync word to 4FSK:
Open an example or create a new Flex 2.0 project
Set the required parameters in the Application Builder
Click on “Generate” button and allow the Simplicity Studio to generate the necessary files
If the generation was successful, open the project’s rail_config.h file in the project’s root directory.
In const uint32_t generated[] = {} configuration array find address 605C and set bit 12 to “1”
Save the modified file and continue with compilation as usual
The achievable RF range is affected by many factors as listed below.
- Transmit power and TX antenna gain
- Receive sensitivity and RX antenna gain
- Frequency: It is related to the gain and effective area of the antenna. It can simply translate into that the lower frequency the link operates at the better RF range can be achieved.
- Antenna radiation pattern: The best RF range can be achieved if the TX and RX antennas are facing to each other in their maximum radiation lobes. There could be some directions where the antennas' radiation patterns do have minimum notches and thus the RF range could be poor in these directions.
- Interference, noise: Any in-band noise does have severe negative effects on the range since it can mask out the wanted signal at the RX side (see the co-channel rejection parameter). But, stronger out-of-band noise can also degrade the RF range based on the receiver's ACS and blocking performances.
- Frequency offset between TX and RX: It can become more critical in narrow-band systems where the exact carrier frequencies must correctly be set.
- Final product placement and enclosure: The antenna performance can be affected by any material in the close proximity of the antenna and by the antenna placement. In order to avoid any de-tuning effect (and thus RF range degradation) make sure about the recommended antenna (or i.e. module) placement and clearance.
- Environment: Ideal case is an outdoor environment where there are no reflections (e.g. no walls, big obstacles, trees, houses) and there is a direct line-of-sight (LOS) between the TX and RX and there isn't any obstacle in the Fresnel ellipsoid too (see online calculators for the Fresnel zone/ellipsoid). Less ideal case is an urban area, or when there is no LOS between the TX and RX. The worst situation is an office indoor environment where there is typically no LOS and there are walls, obstacles and thus reflections. Propagation constant can describe the environment which is typically 2.5...3.5 in an outdoor environment with LOS between the TX and RX nodes, while can even be 4...6 in an indoor environment.
- Transmitter and receiver heights: This is also related whether there is any obstacle, e.g. ground, in the Fresnel ellipsoid. If so, the RF range is negatively affected. Thus, the higher the nodes are placed at the bigger RF range can be achieved.
See a related KBA link on this topic below which describes an example estimator/calculator for the RF range.
Proprietary Knowledge Base
RAIL驱动射频前端系统(PA和LNA)
驱动FEM通常需要一些逻辑信号,这些信号可以由软件来控制,但是通常来说软件控制速度不够快(如对于CSMA/CA):它需要一些基于硬件的控制信号。
因EFR32是集成了Radio模块的MCU,这种控制信号不由RADIO模块来处理,而是由更通用的模块来处理:外设映射系统, 简写为PRS 。
EFR32s有12个PRS 映射通道,每个通道可由几个来自不同源的信号来驱动,而且可以在这些信号之间做些逻辑运算。这些信道可以连至PRS的消费者,比如触发一个计时器启动。
你也可以连接PRS通道到一些GPIO,这是我们将要用到的方式。如需如何使用更多PRS信息,请阅读参考手册相关章节。
硬件配置如需(Configurator)提供了一个“外部LNA”的模块,但RAIL(如Flex SDK 2.0)不支持该模块。该模块它仅支持一个TX/RX和一个睡眠信号,这对于比较复杂的FEM来说可能是不够的。
这篇文章独立于Stack,尽管一些 Stacks可以提供一个象“外部LNA”模块一样集成的方案。
PRS信号
通常一个FEM需要如下信号:
TX/RX开关,
睡眠,
TX/RX旁路,
旁路信号通常是一个编译或应用时的设定,因此他们可由软件像控制其它GPIO似的来控制,也可以采用采用控制睡眠及TX/RX开关一样的控制策略,因此它不是本文阐述的部分。
以下PRS信号对驱动FEM是非常有用的:
RAC_ACTIVE当Radio开启时(发射或接收)置高,
RAC_LNAEN当需要LNA时置高,
RAC_PAEN当需要PA时置高,
注意所有的信号都可以置反(低有效),
RAC_ACTIVE可用来控制睡眠引脚,但用RAC_LNAEN或 RAC_PAEN信号更引脚。
可以被PRS使用的GPIO
参照规格书里替代功能管脚(Alternate Functionality Pinout)章节或器件管脚表, PRS通道管脚具有PRS_CHx功能信息。
在Simplicity Studio理可以使用硬件配置器动态输出引脚功能图。
要注意的是你需要为每一个信号配置独立的PRS通道,你不能配置一个PRS通道到两个地方(Location)。而且逻辑操作局限于相邻的PRS通道:
OR操作仅在一个通道及其相邻前一个信道之间是支持的(例如channel1 = channel0 OR channel1)。
AND操作仅在一个信道及其相邻后一个信道之间是支持的(例如channel0 = channel0 AND channel1)。
这限制了有用的管脚,例如,推荐使用(RAC_LNAEN 或 RAC_PAEN)来驱动睡眠管脚,这就意味着不管你用哪个通道控制睡眠,前一个信道必须设置为RAC_LNAEN 或 RAC_PAEN。但是PRS允许设置一个信号到多个通道,而且一个通道去驱动一个GPIO并不是必须的。
在RAILTest里配置GPIO
总的来说, RAILTEST通常被用来对Radio设置和性能做测试,能效在这里不是我们的测试目标。如前所述,控制引脚电平的高低就足够了,尽管用PRS的TX/RX开关有点简单。
RAILTest仅支持一些GPIO:PC10, PC11, PF2, PF3, PF4, PF5, PC9, PD9, PD10, PD11, PD12
一些PRS信号是可以支持的,不幸的是驱动 low/high 和 RAC_ACTIVE不在其列。
可以用下面的命令
管脚拉高(当无线打开时,32/0 81/0是PRS源/信号是RAC_ACTIVE):
在EFR32xG1上:setupDebugSignal CUSTOM_PRS 32 0,
在其它所有芯片上:setupDebugSignal CUSTOM_PRS 81 0,
管脚拉低(CUSTOM_LIB 被 RAIL调试内部征用了, 但公众版本的 SDK 使该管脚拉低):setDebugSignal CUSTOM_LIB 0,
驱动Rx/Tx管脚,高为接收:setDebugSignal LNAEN,
驱动Rx/Tx管脚,高为发送:setDebugSignal PAEN,
关闭管脚:setDebugSignal OFF,
例如驱动MGM12P模块的LNA(睡眠管脚是PD10,收发管脚是PD11):
setDebugSignal PD10 LNAEN,
setDebugSignal PD11 CUSTOM_PRS 81 0,
在应用源代码中配置GPIO
如果要使用PRS通道,你先要使能GPIO和PRS时钟信号:
CMU_ClockEnable(cmuClock_PRS, true),
CMU_ClockEnable(cmuClock_GPIO, true),
设置我们要使用的GPIO为PushPull模式:
GPIO_PinModeSet(port, pin, gpioModePushPullAlternate, 0),
使能PRS信号:
PRS->CH[x].CTRL = PRS_signal | PRS_CH_CTRL_ASYNC,
推荐使用异步模式,因为在睡眠状态下仍有工作信号这种模式是需要的。
设置PRS信号引脚的位置:
PRS_ROUTELOCy |= PRS_ROUTELOCy_CHxLOC_LOCz,
(12个PRS通道分成3组ROUTELOC寄存器,因此0-3通道在ROUTELOC寄存器0里面,以此类推)
使能引脚:
BUS_RegBitWrite(&PRS->ROUTEPEN, _PRS_ROUTEPEN_CHxPEN_SHIFT, 1),
例如驱动MGM12P模块的LNA(睡眠管脚是PD10,收发管脚是PD11):
CMU_ClockEnable(cmuClock_GPIO, true),
CMU_ClockEnable(cmuClock_PRS, true),
GPIO_PinModeSet(gpioPortD, 10, gpioModePushPullAlternate, 0),
GPIO_PinModeSet(gpioPortD, 11, gpioModePushPullAlternate, 0),
PRS->CH[6].CTRL = PRS_RAC_ACTIVE | PRS_CH_CTRL_ASYNC,
PRS->CH[5].CTRL = PRS_RAC_LNAEN | PRS_CH_CTRL_ASYNC,
PRS->ROUTELOC1 |= PRS_ROUTELOC1_CH5LOC_LOC0 | PRS_ROUTELOC1_CH6LOC_LOC13,
BUS_RegBitWrite(&PRS->ROUTEPEN, _PRS_ROUTEPEN_CH6PEN_SHIFT, 1),
BUS_RegBitWrite(&PRS->ROUTEPEN, _PRS_ROUTEPEN_CH5PEN_SHIFT, 1),
置反一个信号
置反一个信号非常简单。如置反一个睡眠信号(高为睡眠):
PRS->CH[x].CTRL = PRS_RAC_ACTIVE | PRS_CH_CTRL_ASYNC | PRS_CH_CTRL_INV,
信号间的逻辑运算
像上面描述的那样:
PRS通道可以与前一个通道OR运算(例如channel1 = channel0 OR channel1)。
PRS通道可以与后一个通道AND运算(例如channel0 = channel0 OR channel1)。
如果你遇到此限制,设置非常简单,仅用PRS_CH_CTRL_ORPREV 和 PRS_CH_CTRL_ANDNEXT命令。
例如用省电的 (RAC_LNAEN | RAC_PAEN)方式去驱动MGM12P模块的LNA:
PRS->CH[5].CTRL = PRS_RAC_LNAEN | PRS_CH_CTRL_ASYNC,
PRS->CH[6].CTRL = PRS_RAC_PAEN | PRS_CH_CTRL_ASYNC | PRS_CH_CTRL_ORPREV。
PCB板层数与输出功率
客户通常喜欢在硬件产品中用2层的PCB板来达成降低成本的目的. 但是基于射频输出功率水平,PCB顶层和底层的走线(多数是VDD或者数字电路)会产生不希望的辐射,这会使得产品违背标准中关于谐波和杂散的限值要求。为减小不希望的走线的辐射,Silabs推荐在以下情况下用多层PCB板:
>=+16dBm发射功率的sub-GHz频段
>=+10dBm发射功率的2.4GHz频段
注意实际推荐依据是产品需遵守的那个无线标准(ETSI, FCC, ARIB, etc.)。
有人会注意到不是所有的Silabs参考设计都遵循以上的推荐。例如EZRadioPRO参考设计的板子就是基于输出功率来确定用2层PCB还是4层PCB,而所有EZR32的参考板是根据设计的复杂性来确定用4层PCB还是6层PCB。对于后者,如果所有数字信号线都要使用的话,是不能在2层PCB上实现的。当然,在某些设计复杂程度相对明显较低的客户设计中,2层板是可以考虑被用于EZR32或EFR32的应用设计的。
Si4464天线分集需要多少字节长度的preamble?
相对于非天线分集应用(T/R开关插损小和明显的长走线)来说,为了无丢包及无灵敏度损失的分集接收,如下所示,的最少preamble字节长度要求必须满足。
当AFC不使能时,天线分集要求10个字节长度的preamble。
当AFC使能时,天线分集要求11个字节长度的preamble。
Si446x revC2A和A2A版本芯片支持带DSA功能的天线分集。这种运行需要8个字节长度的preamble。注意,然而带DSA功能天线分集模式的共道抑制非常差,所以不推荐使用这种配置。
让WDS来计算所有天线分集的参数时,你要保证发射最小字节长度的preamble,Rx才能工作。
Using Peripheral Reflex System to measure transition times in RAIL
There are cases when the exact TX to RX and/or RX to TX timing information is necessary to know. Obviously, it is possible to add GPIO toggle routines to the firmware code or using RAIL_GetTime() to determine transition times – however these are more or less inaccurate and additionally these have an overhead due to the extra codes.
EFR32 capable to emit TX and RX active signals. By routing these signals to PRS it is possible to examine (for example by an oscilloscope) the TX and RX active periods and thus the gaps between them, the transition times. Since in case of PRS there is a hardware channel between the producer and the consumer the measurement is very accurate. More about Peripheral Reflex System is available in “AN0025: Peripheral Reflex System (PRS)”.
To exploit the advantages of PRS it is necessary to include only a few lines of code to the project.
The following snippet was inserted into the Simple TRX example application executed on a Flex Gecko radio board (BRD4254A) using a BRD4001 WSTK but theoretically it should run on any EFR32 device.
To test how it works open the Simple TRX example, generate the radio config, add the following snippet to the code somewhere in main.c (for example after radioInit();) and compile then debug it.
This code will route RX active signal to PC10/P12 and TX active signal to PC11/P13 pins. Connect two oscilloscope probes to these pins to examine the waveforms.
The following screenshots show the RX→TX and TX→RX transition times:
Driving FEMs (and PAs and LNAs) in RAIL
Driving FEMs usually require some logic signals, which can be driven from software, but generally that's not fast enough (e.g. for CSMA/CA): It needs some hardware based signals.
Since EFR32 is an integrated radio MCU, this is not handled in the radio module, but a more general purpose module: Peripheral Reflex System, or PRS for short.
EFR32s has 12 PRS channels, each of these channels can be driven by numerous signals from various sources, and even some logic operations can be done between them. These channels can be connected to PRS consumers, so it can trigger a timer start for example.
You can also wire PRS channels to some GPIOs, and this is the feature we'll use. For more information of PRS, see the reference manual.
Hardware configurator does provide an "External LNA" module, but it's not supported in RAIL (as of Flex SDK 2.0). Also, it only supports one TX/RX and one sleep pin, which is probably not enough for more complicated FEMs.
This article is stack independent, although some stacks might provide an integrated way, like the External LNA module.
The prs signals
Generally a FEM requires the following:
The bypass signals are usually either compile time or application time settings, so they can be driven like any other GPIO from software, or exactly the same as sleep and rx/tx, therefore it's not part of this article.
The following PRS signals are useful for driving a FEM:
Note that all signals can be inverted
RAC_ACTIVE can be used to drive the sleep pin, but using (RAC_LNAEN or RAC_PAEN) is more energy efficient.
GPIOs usable for PRS
See the Alternate Functionality Pinout chapter or device pinout table in the datasheet. PRS channel pins has PRS_CHx functionality on it.
The hardware configurator can be also used as a dynamic pinout diagram in Simplicity Studio (in all Flex SDK examples)
Keep in mind that you need independent PRS channels for each signal, you can't configure a PRS channel to two locations.
Also, logical operations limited to channels next to each other:
This limits the usable pins, e.g. it's recommended to drive a sleep pin as (RAC_LNAEN or RAC_PAEN), which means whatever channel you plan to use for sleep, the previous one MUST be set up to either RAC_LNAEN or RAC_PAEN. However, you can set up the same signal to multiple channels, and you don't have to drive a gpio with a channel.
Configuring GPIOs in RAILTest
Generally, RAILTest is recommended to test the radio's setup and performance, so energy efficiency is not a goal here. Therefor, it would be enough to just drive pins low and high, although it's a bit simpler to use the tx/rx switch from PRS.
RAILTest only supports a few GPIOs:
PC10, PC11, PF2, PF3, PF4, PF5, PC9, PD9, PD10, PD11, PD12
A number of PRS signals are supported, unfortunately drive low/high and RAC_ACTIVE is not amongst them.
The following commands can be used
E.g. to drive the LNA on the MGM12P module (sleep pin on PD10, tx/rx on PD11)
Configuring GPIOs in application source
To use PRS channels, you first need to enable GPIO and PRS clock:
Set the GPIO we use to pushpull mode:
Enable PRS signal:
It's recommended to use async mode, since this is needed to have a working signal even in sleep states.
Set location of the PRS signal pin:
(the 12 PRS channels are divided into 3 ROUTELOC registers, so channel 0-3 is in ROUTELOC0, etc)
Enable the pin:
E.g. to drive the LNA on the MGM12P module (sleep pin on PD10, tx/rx on PD11):
Invert a signal
Inverting a signal is very simple. To create an inverted sleep signal for example (high in sleep):
Logical operation between signals
As above mentioned:
If you meet this limitation, the setup is pretty simple, just use PRS_CH_CTRL_ORPREV and PRS_CH_CTRL_ANDNEXT.
For example the energy efficient (RAC_LNAEN | RAC_PAEN) way to drive the LNA on MGM12P:
SEGGER SystemView for non-OS projects
SEGGER SystemView is a real-time recording and visualization tool. It is freely available from SEGGER’s website.
This article describes how to setup SEGGER SystemView for a non-OS project and shows how to modify a simple Flex / RAIL example to call SEGGER SystemView routines.
Since Simplicity Studio contains the SystemView, it is only necessary to download the "SystemView Target Sources" package from https://www.segger.com/downloads/free-utilities/#SystemView
The steps below described how to add SystemView capability to an example project and how to run it:
Note, "gpiointerrupt.c" is a shared SDK file, when you start to edit a popup will appear:
It is recommended to choose "Make a Copy" to keep the original file intact.
How many preamble bytes does Si446x need for antenna diversity?
Note that at the time of writing this article this information is captured incorrectly in the data sheets. The following minimum preambe length requiements are needed for packet loss free reception and no sensitivity loss compared to non antenna diversity applications (less the the insertion loss of the T/R switch and the longer traces obviously).
When AFC is not enabled antenna diversity requires 80 bits of preamble.
When AFC is enabled antenna diversity requires 88 bits of preamble.
Si446x revC2A and A2A devices support antenna diversity with DSA. This operation requitres 64 bits of preamble. Note however that co-channel rejection with DSA in antenna diversity mode is poor so this configuration is not recommended.
Leave all the antenna diversity parameter calculations to WDS. Make sure you transmit the minimum length of preamble and Rx will just work.
4GFSK Sync word
Although, the Radio Configurator supports 4FSK modulation, the sync word is 2FSK by default and in the GUI interface it is not possible change this parameter currently.
However, 4FSK sync word option is available by editing the generated project files.
The following steps shows how to set the sync word to 4FSK:
Exampe:
Keep in mind, if tweaking rail_config.c (or other auto-generated files) manually, then changes will be overwritten on the next re-generation of files.RF range factors
The achievable RF range is affected by many factors as listed below.
- Transmit power and TX antenna gain
- Receive sensitivity and RX antenna gain
- Frequency: It is related to the gain and effective area of the antenna. It can simply translate into that the lower frequency the link operates at the better RF range can be achieved.
- Antenna radiation pattern: The best RF range can be achieved if the TX and RX antennas are facing to each other in their maximum radiation lobes. There could be some directions where the antennas' radiation patterns do have minimum notches and thus the RF range could be poor in these directions.
- Interference, noise: Any in-band noise does have severe negative effects on the range since it can mask out the wanted signal at the RX side (see the co-channel rejection parameter). But, stronger out-of-band noise can also degrade the RF range based on the receiver's ACS and blocking performances.
- Frequency offset between TX and RX: It can become more critical in narrow-band systems where the exact carrier frequencies must correctly be set.
- Final product placement and enclosure: The antenna performance can be affected by any material in the close proximity of the antenna and by the antenna placement. In order to avoid any de-tuning effect (and thus RF range degradation) make sure about the recommended antenna (or i.e. module) placement and clearance.
- Environment: Ideal case is an outdoor environment where there are no reflections (e.g. no walls, big obstacles, trees, houses) and there is a direct line-of-sight (LOS) between the TX and RX and there isn't any obstacle in the Fresnel ellipsoid too (see online calculators for the Fresnel zone/ellipsoid). Less ideal case is an urban area, or when there is no LOS between the TX and RX. The worst situation is an office indoor environment where there is typically no LOS and there are walls, obstacles and thus reflections. Propagation constant can describe the environment which is typically 2.5...3.5 in an outdoor environment with LOS between the TX and RX nodes, while can even be 4...6 in an indoor environment.
- Transmitter and receiver heights: This is also related whether there is any obstacle, e.g. ground, in the Fresnel ellipsoid. If so, the RF range is negatively affected. Thus, the higher the nodes are placed at the bigger RF range can be achieved.
See a related KBA link on this topic below which describes an example estimator/calculator for the RF range.
https://www.silabs.com/community/wireless/proprietary/knowledge-base.entry.html/2017/05/02/rf_range_calculator-SYIA
Si4x6x/EZR32芯片中不用到的管脚怎么连
实际应用中,客户经常问到以上芯片不用的管脚怎么连接,经查KBA非常感谢Daniel的建议如下: