通过 BlueNRG-LP 驱动外部 RF 前端
<p> BlueNRG-LP 是一款超低功耗的蓝牙低功耗 SoC 器件,在天线连接器处可达到+8 dBm 输出功率。然而,蓝牙标准允许的最大输 出功率为+20 dbm(当地法规仍然可以将输出功率限制在较低的值)。 由于该原因,BlueNRG-LP 提供了控制外部 RF 前端的可能性,可以通过使用集成的功率放大器来增加输出功率。 除了功率放大器(PA), RF 前端通常还可以集成一个低噪声放大器(用于提高灵敏度)、TX/RX 开关电路、匹配网络和谐波滤 波器。</p><p><strong>一、RF 控制信号 </strong> </p>
<p> 通常来说,一个外部前端至少要有 2 个引脚来控制,从而选择性地将天线连接到 PA 的输出或 LNA 的输入(LNA 可能不存在)。在 LNA 不存在的情况下,射频开关可以直接将 TX/RX 引脚与天线连接。 下面显示了一个外部前端的简单框图示例。前端内部可能有其他功能块(例如 PA 上的谐波滤波器),或 TX/RX 端 口和天线之间的旁路路径。</p>
<p> </p>
<p> 为了控制外部前端,需要从 SoC 生成一些信号。通常只需两个信号即可:前者控制 TX 路径,后者控制 RX 路径。 这些信号控制前端的方式会因制造商而存在差别。 此外,在无线电处于传输或接收状态之前,总是需要预测 TX_EN/RX_EN 信号。这是因为功率放大器稳定功率需要 一定的时间,同时也会消耗大量的电流,由此便会导致 BueNRG-LP PLL 不稳定。 因此,无线电定序器会产生两种信号:</p>
<p>• TX_SEQUENCE,当无线电定序器将要启动传输时,此信号将升高;当内部 PA 被关闭时,此信号则降低。</p>
<p>• RX_SEQUENCE,当无线电定序器准备开始接收时,此信号将升高;当无线电离开 RX 状态时,此信号则降 低。</p>
<p> TX_SEQUENCE 从低到高的转变发生在无线传输首个比特之前。同样,RX_SEQUENCE 从低到高的转变发生在 无线电处于接收状态之前。以上时间控制取决于状态(TX 或 RX)和 PLL 校准是否完成。每次使用不同的射频通 道时都要进行 PLL 校准。时间控制见表 1. 射频控制信号和 TX/RX 状态之间的延迟。这些时间控制基于硬件需求, 并由固件相应地设置。 </p>
<p> 下图中的框图显示了 BlueNRG-LP 与外部前端之间的必要连接。TX_CTRL 和 RX_CTRL 是用于控制前端的引脚, 可因所用的控制模式而异。如果前端已经集成了阻抗匹配和合适的谐波滤波器,则无需外加匹配网络和谐 波滤波 器。</p>
<p> 图 2. BlueNRG-LP 与射频前端的连接框图</p>
<p> </p>
<p><strong>二、RF 控制模式</strong></p>
<p> BlueNRG-LP 中有两种选项用于使用由无线电定序器产生的 TX/RX 序列信号。 1. 自动模式,即内部 TX_SEQUENCE 和 RX_SEQUENCE 信号被路由到 SoC GPIO。这些信号可能与前端的控 制逻辑不兼容 2. 中断模式,即内部 TX_SEQUENCE 和 RX_SEQUENCE 信号产生中断请求,使固件能够按照前端需要的控制 逻辑采取动作</p>
<p>2.1 自动控制模式</p>
<p> 在自动模式下,可以在部分 BlueNRG-LP GPIO 上启用 TX_SEQUENCE 和 RX_SEQUENCE 信号。</p>
<p> 该模式的优点是,TX/RX 序列信号是自动生成的,无需来自固件的任何操作。灵活性方面的缺点:前端的控制逻辑 必须与无线电定序器产生的信号兼容。例如,一个具有下表所示控制逻辑的前端直接兼容 TX_SEQUENCE 和 RX_SEQUENCE 信号。</p>
<p> </p>
<p> 2.2 中断控制模式</p>
<p> 在中断模式下,能够产生中断的系统控制器可以检测到来自定序器的 TX_SEQUENCE 和 RX_SEQUENCE 信号。 要启用 TX/RX 序列中断,可以使用以下代码。</p>
<pre>
<code class="language-cpp">LL_APB0_EnableClock(LL_APB0_PERIPH_SYSCFG);
LL_SYSCFG_BLERXTX_SetTrigger(LL_SYSCFG_BLERXTX_TRIGGER_BOTH_EDGE, LL_SYSCFG_BLE_TX_EVENT);
LL_SYSCFG_BLERXTX_SetTrigger(LL_SYSCFG_BLERXTX_TRIGGER_BOTH_EDGE, LL_SYSCFG_BLE_RX_EVENT);
LL_SYSCFG_BLERXTX_SetType(LL_SYSCFG_BLERXTX_DET_TYPE_EDGE, LL_SYSCFG_BLE_TX_EVENT);
LL_SYSCFG_BLERXTX_SetType(LL_SYSCFG_BLERXTX_DET_TYPE_EDGE, LL_SYSCFG_BLE_RX_EVENT);
LL_SYSCFG_BLERXTX_EnableIT(LL_SYSCFG_BLE_TX_EVENT|LL_SYSCFG_BLE_RX_EVENT);</code></pre>
<p>BLE_RXTX_SEQ_IRQHandler 可以定义如下:</p>
<pre>
<code class="language-cpp">void BLE_RXTX_SEQ_IRQHandler(void)
{
if(LL_SYSCFG_BLERXTX_IsInterruptPending(LL_SYSCFG_BLE_TX_EVENT))
{
// Set GPIOs to make RF Front End enter TX mode
LL_SYSCFG_BLERXTX_ClearInterrupt(LL_SYSCFG_BLE_TX_EVENT);
}
else if(LL_SYSCFG_BLERXTX_IsInterruptPending(LL_SYSCFG_BLE_RX_EVENT))
{
// 设置 GPIO,让 RF 前端进入 RX 模式。
LL_SYSCFG_BLERXTX_ClearInterrupt(LL_SYSCFG_BLE_RX_EVENT);
}
}
</code></pre>
<p> 在中断服务程序内部,任何 GPIO 都可以用于驱动 RF 前端。 与自动控制模式相比,该操作模式可实现任何控制逻辑,因而更具灵活性。但这种方法的缺点是,如果在此期间有 更高优先级的中断出现,则控制信号可能被延迟。建议使用比 BLE_TX_RX_IRQHandler 低但比其他中断高的优先 级。即使将最高优先级分配给 BLE_TX_RX_IRQHandler,也不会对 BLE_RXTX_SEQ_IRQHandler 造成干扰。事 实上,BLE_TX_RX_IRQHandler 只在 TX/RX 序列的末尾执行。因此,在应当驱动外部前端退出 RX 或 TX 模式 时,BLE_RXTX_SEQ_IRQHandler 仅在 TX/RX 序列末尾处会因执行 BLE_TX_RX_IRQHandler 而被延迟,此操作 不属于关键操作。</p>
<p> </p>
<div></div>
<p style="margin-left:0px; margin-right:0px">芯片上电(或复位)后,芯片内部的 ROM 代码会先运行,当检测到 PA10 脚为低电平时,会直接跑进 FLASH 开始运行 用户固件(运行失败会停在 while(1) )。当检测到 PA10 脚为高电平时,会运行 UART BOOTLOADER 流程。UART BOOTLOADER 可通过串口接收用户指令,执行一系列的操作。</p>
页:
[1]