PAN211x 安规软件推荐配置

1 安规电流配置

在切换Tx和Rx状态之前,需要修改VCO电流配置:Page1 0x42[3:0],Tx状态配置为4,Rx状态配置为0。这里的Tx和Rx状态不仅包括普通模式的发射和接收状态,还包括增强模式中的发射Ack包、发射重传、重传等待Ack等硬件自动切换的发射和接收状态。

示例代码如下:

/**
 * @brief 准备发送状态
 * @note 在进入发送状态前调用一次即可,无需重复调用
 */
 void PAN211_PrepareTx(void)
 {
     PAN211_WriteReg(0x00, 0x01);
     PAN211_WriteReg(0x42, 0xa4);
     PAN211_WriteReg(0x00, 0x00);
 }

/**
 * @brief 准备接收状态
 * @note 在进入接收状态前调用一次即可,无需重复调用
 */
 void PAN211_PrepareRx(void)
 {
     PAN211_WriteReg(0x00, 0x01);
     PAN211_WriteReg(0x42, 0xa0);
     PAN211_WriteReg(0x00, 0x00);
 }

下面分别解释普通模式和增强模式应该如何使用。

1.1 普通模式

  • 普通模式Tx:芯片初始化完成后,调用PAN211_PrepareTx(),然后调用PAN211_SendPacket()发送数据。示例代码如下:

    PAN211_PrepareTx();
    PAN211_SendPacket(...);
    ...
    
  • 普通模式Rx:芯片初始化完成后,调用PAN211_PrepareRx(),然后调用PAN211_RxStart()接收数据。示例代码如下:

    PAN211_PrepareRx();
    PAN211_RxStart();
    ...
    
  • 如需切换Tx/Rx,需要重新调用PAN211_PrepareTxPAN211_PrepareRx

1.2 增强模式

增强模式下,每次发生Tx/Rx状态切换之前都要调用PAN211_PrepareTx()PAN211_PrepareRx()

由于增强型的通信过程中硬件自动切换发射和接收状态,使用者需要根据当前使用的总线接口速度配置适当的TRx切换延时时间(TRX_TRANS_DELAY)并在中断来临时及时调用PAN211_PrepareTx()PAN211_PrepareRx()。如果没有及时配置,可能严重影响后续发射或接收性能。

使用方法:

  • 调整TRX状态切换延时:以增强模式Tx为例,在完成Tx发射数据之后,硬件会在一段时间内切换到Rx状态,等待ACK。为了在Tx转换为Rx的期间完成配置修改,需要手动调整TRX状态切换延时TRX_TRANS_DELAY。以250kbps SPI操作速度为例,完成一次寄存器操作至少需要64us,完成中断寄存器读取和PAN211_PrepareTx()等接口需要约250us。因此,在这种情况下,建议TRX_TRANS_DELAY至少设置为300us以上,尽可能留有余量。

  • 增强模式Tx:芯片初始化完成后,调用PAN211_PrepareTx(),收到Tx中断后,立即调用PAN211_PrepareRx()。示例代码如下:

    PAN211_PrepareTx();
    PAN211_SendPacket(...);
    ...
    while(1)
    {
      if (TX_IRQ)
      {
          // 检测到Tx中断后,硬件会自动切换到Rx,这里需要尽快准备好
          PAN211_PrepareRx();
          ...
      }
      else if (RX_IRQ)
      {
          ...
      }
      else if (CRC_ERR_IRQ)
      {
          ...
      }
    }
    
  • 增强模式Rx:芯片初始化完成后,调用PAN211_PrepareRx(),收到Rx中断后,立即调用PAN211_PrepareTx()。示例代码如下:

    PAN211_PrepareRx();
    PAN211_RxStart();
    
    while (1)
    {
        ...
        if (RX_IRQ)
        {
            // 检测到Rx中断后,硬件会自动切换到Tx,这里需要尽快准备好
            PAN211_PrepareTx();
            ...
        }
        else if (TX_IRQ)
        {
            // 检测到Tx中断后,硬件会自动切换到Rx,这里需要尽快准备好
            PAN211_PrepareRx();
            ...
        }
        else if (PID_ERR_IRQ)
        {
            ...
        }
        else if (CRC_ERR_IRQ)
        {
            ...
        }
    }