This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC1120EM-420-470-RD:STX 命令后 GPIO2无反馈

Guru**** 1791630 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/910244/cc1120em-420-470-rd-no-feedback-on-gpio2-after-stx-command

器件型号:CC1120EM-420-470-RD

我想将驱动程序移植到 STM32、发现该驱动程序将阻止 GPIO2、在执行 STX 命令后无响应。

我设置"CC112X_Settling _CFG= 0x00B"、我的器件版本为0x23、无运行手动校准。

我的初始寄存器设置如下:(所有十六进制值)

CC112X_IOCFG3 b0
CC112X_IOCFG2 6.
CC112X_IOCFG1 b0
CC112X_IOCFG0 40.
CC112X_SYNC_CFG1 b.
CC112X_DCFILT_CFG 1c
CC112X_PREAMING_CFG1 18.
CC112X_IQIC C6
CC112X_CHAN_BW 8.
CC112X_MDMCFG0 5.
CC112X_AGC_REF 20
CC112X_AGC_CS_THR 19.
CC112X_AGC_CFG1 A9
CC112X_AGC_CFG0 CF
CC112X_FIFO_CFG 0
CC112X_Setting_CFG b
CC112X_FS_CFG 14.
CC112X_PKT_CFG0 20.
CC112X_PA_CFG2 77
CC112X_PKT_LEN 关断
CC112X_IF_Mix _CFG 0
CC112X_FREQOFF_CFG 22.
CC112X_FREQ2 69
CC112X_FREQ1 F8
CC112X_FS_DIG1 0
CC112X_FS_DIG0 5F
CC112X_FS_CAL1 40.
CC112X_FS_CAL0 e
CC112X_FS_DIVTWO 3.
CC112X_FS_DSM0 33.
CC112X_FS_DVC0 17.
CC112X_FS_PFD 50.
CC112X_FS_PRE 6e
CC112X_FS_REG_DIV_CML 14.
CC112X_FS_SPARE AC
CC112X_FS_VCO0 b4
CC112X_XOSC5 e
CC112X_XOSC1 3.
CC112X_PARTNUMBER 48.
CC112X_PARTVERSION 23.
CC112X_SYNC3 93
CC112X_SYNC2 b.
CC112X_SYNC1 51.
CC112X_SYNC0 DE



问题1.相同的寄存器设置值可以在 Arduino UNO 上运行(也可以轮询 GPIO2)、但在 STM32上失败、需要注意设置吗?

问题2.如何确认问题 STX 成功? 读取 MARCSTATE = 0x34? 或者...?

问题3.如果 可以确认 Tx 正常工作(问题2)、则 Tx 和 Rx 都运行相同的寄存器设置、这是否意味着在 Rx 设置为 SRX 后 可以从 Rx FIFO 读取数据? (请参阅下面我的示例 Rx 代码)?

我再次列出了我的代码片段、以显示更清晰的信息。
/*******    TX 主程序代码***** /

 while (1)
 {  
    TrxSpiCmdStrobe (CC112X_SFTX);
    set_didle();

    cc112xSpiWriteTxFifo (sendData、strlen (sendData));
     执行{
         TrxSpiCmdStrobe (CC112X_SFSTXON);
     } while (v!= 0x12);

     执行{
         TrxSpiCmdStrobe (CC112X_STX);
     } while (v!= 0x34);

    while (!HAL_GPIO_ReadPin (GPIOB、GPIO_PIN_1));//此时将阻止(GPIO2)!!

    while (HAL_GPIO_ReadPin (GPIOB、GPIO_PIN_1));//GPIO2引脚

    HAL_DELAY (500);
 }

/*******    RX 主程序***** /

#define RX_FIFO_ERROR      0x11

 while (1)
 {
     trxSpiCmdStrobe (CC112X_Sidle);         //首先设置为空闲。 必须在中

     执行{
       cc112xSpiReadReg (CC112X_MARCSTATE、&marcstate、1);
   } while (marcstate!= 0x41);
   TrxSpiCmdStrobe (CC112X_SCAL);
   trxSpiCmdStrobe (CC112X_SRX);

     cc112xSpiReadReg (CC112X_NUM_RXBYTES、&v、1);

     //检查 FIFO 中是否有字节
     if (v!= 0)
     {
       //读取 MARCSTATE 以检查 RX FIFO 错误
       cc112xSpiReadReg (CC112X_MARCSTATE、&marcstate、1);

       //屏蔽 MARCSTATE 位并检查我们是否有 RX FIFO 错误
       if ((marcstate & 0x1F)== RX_FIFO_ERROR)
       {
         //刷新 RX FIFO
         TrxSpiCmdStrobe (CC112X_SFRX);
       }
       其他
       {
         //从 RX FIFO 读取 n 个字节
         cc112xSpiReadRxFifo (rxBuffer、v);

         char * msg2 ="接收数据:";
         HAL_UART_transmit (&hart2、(uint8_t*) msg2、strlen (msg2)、0xFFFF);
         for (int i=0;i<=strlen (rxBuffer);i++)
         {
            //读取 rxBuffer 数据
         }
       }
     }
     trxSpiCmdStrobe (CC112X_SRX);

     HAL_DELAY (500);
 }

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这些设置是从 Smart RF Studio 获取的设置、它们是可以的。 由于您已经测试了这些设置、因此您知道它们是正常的、并且相同的设置可用于 RX 和 TX。

    如果从 STM32配置它们时它们不起作用、则需要确认 SPI 在极性、相位、上升时间、下降时间等方面符合规格

    要执行 TX、您需要执行以下步骤:

    1. 复位器件
    2. 配置所有寄存器
    3. 将数据包写入 TX FIFO (读回 NUM_TXBYTES 以查看数据包是否在 FIFO 中)
    4. 选通 STX
    5. 等待 GPIO2上的下降沿中断(需要验证这在 STM32上是否有效)
    6. 在下降沿中断之后、您可以读回 NUM_TXBYTES (现在应为0)。 MARCSTATE 应该空闲

    1. STROBE SRX (假设器件已复位和配置、并且未处于错误状态)
    2. 等待 GPIO2上的下降沿中断(需要验证这在 STM32上是否有效)
    3. 在下降沿中断之后、您可以读回 NUM_RXBYTES 以查看 RX FIFO 中有多少字节、然后读回
    4. 读取 RX FIFO

    Siri