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.

[参考译文] CC1125:CC1125无线电在特定条件下不执行 RX->闲置

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/770350/cc1125-cc1125-radio-does-not-perform-rx--idle-on-certain-conditions

器件型号:CC1125

您好!

我正在使用 CC1125、实现2个差分 PHY:9.6kbps 2GFSK 和100kbps 2FSK。

我能够在这些配置中正确执行 RX 和 TX。

当我将无线电广播连接从9.6kbps 配置动态切换到100kbps 配置时、我会遇到一个奇怪的现象:  

尽管对讲机状态机配置为在 RX 后切换到空闲状态、但调制解调器无法切换、从接收到的第一个帧开始。 对讲机保持 RX 状态。 发送空闲选通时、对讲机能够切换至空闲。

从一开始只使用100kbps 配置时,不会发生无法切换 RX->TX 的问题。

我已上传用于100kbps 配置的 SmartRF Studio XML。 它基于4GFSK 200kbps 默认设置、但我已将设置更改为100kbps、2GFSK。

CC1125器件数字是0x58、0x23。

请提供帮助。

e2e.ti.com/.../config_5F00_cc1125_5F00_100kbps_5F00_869.0Mhz_5F00_Rx_5F00_deviatio_5F00_73Khz_5F002800_Generic_5F00_200kpbs_5F00_4GFSK_2900_.xml

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

    您能否为您正在使用的两个 PHY 提供设置、并展示您如何在 PHY 之间切换
    您是在切换时执行完全复位、还是仅更改必要的寄存器?
    如果不执行重置、您是否确定对讲机在重新配置时处于空闲状态?

    您是否还能显示一些伪代码、说明重现问题所需执行的步骤? 我认为我需要能够在这里复制它、以便能够进一步帮助您。

    BR

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

    您好、Siri、

    我连接了9.6kbps 配置。 我们在运行期间更改了一些重定位器、例如 IOCFG 寄存器。

    当在9.6kbps 和100kbps 之间切换时、我们将写入表中的所有寄存器。

    我们通过在写入寄存器表之前发送 IDLE 选通来验证调制解调器是否空闲。

    伪代码步骤:

    -打开设备电源。

    -通过写入9.6 kbps 配置表中的所有寄存器(普通和扩展寄存器)来配置调制解调器。

    -更新 TX 功率和频率,包括校准。 根据无线电驱动器功能(同步开始、e/o 帧功能)更改 IOCFG。

    -转到 RX 模式。  

    -从应用程序获取命令以切换到100kbps 配置。

    -发送空闲选通信号。

    -在 XML 中写入整个100kbps 寄存器配置(仅 RD 寄存器除外)。

    -更新 TX 功率和频率,包括校准。 根据无线电驱动器功能(同步开始、e/o 帧功能)更改 IOCFG。

    -转到 RX 模式。  

    -调制解调器在接收到传入数据包时,根据 MARC_STATE 寄存器判断,无法从 RX->IDLE 过渡。

    e2e.ti.com/.../CC1125_5F00_9_5F00_6_5F00_2FSK.txt  

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

    我试图再现您看到的内容、但没有运气。 您是否仅在首先以9.6kbps 的速率接收数据时才会看到问题、或者您是否已在具有这些设置的 RX 中完成了这些操作就足够了。

    我进行了一个小测试、在该测试中、我以9.6kbps 的速率进入 RX、然后在按下按钮之前一直保持该状态。 然后、我重新配置为100kbps 并再次进入 RX。 我使用 SmartRF Studio 传输数据包、并且能够接收所有数据包(并在数据包之间进入空闲状态)。

    我的代码如下。 请告诉我需要做哪些修改才能重新创建问题:

    9.6kbps 设置:

    静态常量寄存器 Setting_t preferredSettings_9_6[]=
    {
    {CC112X_IOCFG3、0x07}、
    {CC112X_IOCFG2、0x06}、
    {CC112X_IOCFG1、0x30}、
    {CC112X_IOCFG0、0x00}、
    {CC112X_SYNC3、0x45}、
    {CC112X_SYNC2、0x53}、
    {CC112X_SYNC1、0x45}、
    {CC112X_SYNC0、0x53}、
    {CC112X_SYNC_CFG1、0x08}、
    {CC112X_SYNC_CFG0、0x08}、
    {CC112X_EX偏差_M、0xF7}、
    {CC112X_MODCFG_DEV_E、 0x0A}、
    {CC112X_DCFILT_CFG、0x1C}、
    {CC112X_PREAMING_CFG1、0x20}、
    {CC112X_PREAMING_CFG0、0x2A}、
    {CC112X_FREQ_IF_CFG、0x33}、
    {CC112X_IQIC、0x46}、
    {CC112X_CHAN_BW、0x05}、
    {CC112X_MDMCFG1、0x46}、
    {CC112X_MDMCFG0、0x05}、
    {CC112X_symbol_Rate2、0x6f}、
    {CC112X_symbol_rate1、0x75}、
    {CC112X_symbol_RATE0、0x10}、
    {CC112X_AGC_REF、0x24}、
    {CC112X_AGC_CS_THR、0x19}、
    {CC112X_AGC_GAIN_ADJUST、0x9E}、
    {CC112X_AGC_CFG3、0x91}、
    {CC112X_AGC_CFG2、0x20}、
    {CC112X_AGC_CFG1、0xA0}、
    {CC112X_AGC_CFG0、0xC3}、
    {CC112X_FIFO_CFG、0x00}、
    {CC112X_DEV_ADDR、0x00}、
    {CC112X_Setting_CFG、0x1B}、
    {CC112X_FS_CFG、0x12}、
    {CC112X_WOR_CFG1、0x14}、
    {CC112X_WOR_CFG0、0x21}、
    {CC112X_WOR_EVENT0_MSB、0x00}、
    {CC112X_WOR_EVENT0_LSB、0x00}、
    {CC112X_PKT_CFG2、0x00}、
    {CC112X_PKT_CFG1、0x01}、
    {CC112X_PKT_CFG0、0x20}、
    {CC112X_RFEND_CFG1、0x0F}、
    {CC112X_RFEND_CFG0、0x30}、
    {CC112X_PA_CFG2、0x7f}、
    {CC112X_PA_CFG1、0x56}、
    {CC112X_PA_CFG0、0x7C}、
    {CC112X_PKT_LEN、0xC8}、
    {CC112X_IF_Mix _CFG、0x00}、
    {CC112X_FREQOFF_CFG、0x30}、
    {CC112X_FREQ2、0x56}、
    {CC112X_FREQ1、0xEC}、
    {CC112X_FREQ0、0x28}、
    {CC112X_IF_ADC0、0x05}、
    {CC112X_FS_DIG1、0x00}、
    {CC112X_FS_DIG0、0x5F}、
    {CC112X_FS_CAL0、0x0E}、
    {CC112X_FS_CHP、0x28}、
    {CC112X_FS_DIVTWO、0x03}、
    {CC112X_FS_DSM0、0x33}、
    {CC112X_FS_DVC0、0x17}、
    {CC112X_FS_PFD、0x50}、
    {CC112X_FS_PRE、0x6E}、
    {CC112X_FS_REG_DIV_CML、0x14}、
    {CC112X_FS_SPARE、0xAC}、
    {CC112X_FS_VCO4、0x1f}、
    {CC112X_FS_VCO2、0x46}、
    {CC112X_FS_VCO1、0x9C}、
    {CC112X_XOSC5、0x0E}、
    {CC112X_XOSC3、0xC7}、
    {CC112X_XOSC2、0x04}、
    {CC112X_XOSC1、0x07}、
    {CC112X_XOSC0、0x01}、
    {CC112X_XOSC_TEST1、0x00}、
    }; 

    100kbps 设置:

     

    静态常量寄存器 Setting_t preferredSettings_100[]=
    {
    CC112X_IOCFG3、 0xB0}、
    {CC112X_IOCFG2、 0x06}、
    {CC112X_IOCFG1、 0xB0}、
    {CC112X_IOCFG0、 0x40}、
    {CC112X_SYNC_CFG1、 0x07}、
    {CC112X_EX偏差_M、 0xDE}、
    {CC112X_MODCFG_DEV_E、 0x0E}、
    {CC112X_DCFILT_CFG、 0x04}、
    {CC112X_PREAMING_CFG1、 0x18}、
    {CC112X_FREQ_IF_CFG、 0x00}、
    {CC112X_IQIC、 0x00}、
    {CC112X_CHAN_BW、 0x01}、
    {CC112X_MDMCFG0、 0x05}、
    {CC112X_symbol_Rate2、 0xA4}、
    {CC112X_symbol_rate1、 0x7A}、
    {CC112X_symbol_RATE0、 0xE1}、
    {CC112X_AGC_REF、 0x3C}、
    {CC112X_AGC_CS_THR、 0xEC}、
    {CC112X_AGC_CFG3、 0x83}、
    {CC112X_AGC_CFG2、 0x60}、
    {CC112X_AGC_CFG1、 0xA9}、
    {CC112X_AGC_CFG0、 0xC0}、
    {CC112X_FIFO_CFG、 0x00}、
    {CC112X_Setting_CFG、 0x03}、
    {CC112X_FS_CFG、 0x12}、
    {CC112X_PKT_CFG0、 0x20}、
    {CC112X_PA_CFG2、 0x3F}、
    {CC112X_PA_CFG0、 0x79}、
    {CC112X_PKT_LEN、 0xFF}、
    {CC112X_IF_Mix _CFG、 0x00}、
    {CC112X_TOC_CFG、 0x0A}、
    {CC112X_FREQ2、 0x56}、
    {CC112X_FREQ1、 0xE6}、
    {CC112X_FREQ0、 0x66}、
    {CC112X_IF_ADC0、 0x05}、
    {CC112X_FS_DIG1、 0x00}、
    {CC112X_FS_DIG0、 0x5F}、
    {CC112X_FS_CAL0、 0x0E}、
    {CC112X_FS_CHP、 0x30}、
    {CC112X_FS_DIVTWO、 0x03}、
    {CC112X_FS_DSM0、 0x33}、
    {CC112X_FS_DVC0、 0x17}、
    {CC112X_FS_PFD、 0x50}、
    {CC112X_FS_PRE、 0x6E}、
    {CC112X_FS_REG_DIV_CML、0x14}、
    {CC112X_FS_SPARE、 0xAC}、
    {CC112X_XOSC5、 0x0E}、
    {CC112X_XOSC3、 0xC7}、
    {CC112X_XOSC1、 0x07}、
    {CC112X_PARTNUMBER、 0x58}、
    {CC112X_PARTVERSION、 0x21}、
    {CC112X_MODE_STATUS1、 0x10}、
    {CC112X_XOSC_TEST1、 0x00}、
    }; 

    测试代码:

    void main (void){
    
    uint8 rxBuffer[128]={0};
    uint8 rxBytes;
    uint8 marcState;
    uint8 writeByte;
    
    //初始化 MCU 和外设
    initmc();
    
    //将 ISR 函数连接到 GPIO2
    ioPinIntRegister (IO_PIN_PORT_1、GPIO2、&radioRxISR);
    
    //下降沿上的中断
    ioPinIntTypeSet (IO_PIN_PORT_1、GPIO2、IO_PIN_FALLING_EDGE);
    
    //清除 ISR 标志
    ioPinIntClear (IO_PIN_PORT_1、GPIO2);
    
    //启用中断
    ioPinIntEnable (IO_PIN_PORT_1、GPIO2);
    
    //重置无线电
    TrxSpiCmdStrobe (CC112X_SRES);
    
    //配置为9.6 kbps
    for (uint16 i = 0;i <(sizeof (preferredSettings_9_6)/sizeof (registerSetting_t));i++){
    writeByte = preferredSettings_9_6[i].data;
    cc112xSpiWriteReg (preferredSettings_9_6[i]。addr、writeByte、1);
    }
    
    //根据勘误表校准无线电
    manualCalibration();
    
    //在 RX 中设置无线电
    trxSpiCmdStrobe (CC112X_SRX);
    
    //保持在 RX 状态,直到按下按钮
    while (!bspKeyPushed (bsp_key_all));
    
    //在 RX 中设置无线电
    trxSpiCmdStrobe (CC112X_Sidle);
    
    执行{
    cc112xSpiReadReg (CC112X_MARCSTATE、&marcState、1);
    } while (marcState!= 0x41);
    
    //如果在空闲选通出现问题之前开始接收数据包,则刷新 RX FIFO
    TrxSpiCmdStrobe (CC112X_SFRX);
    
    ioPinIntDisable (IO_PIN_PORT_1、GPIO2);
    
    //配置为100kbps
    for (uint16 i = 0;i <(sizeof (preferredSettings_100)/sizeof (registerSetting_t));i++){
    writeByte = preferredSettings_100[i].data;
    cc112xSpiWriteReg (preferredSettings_100[i]。addr、&writeByte、1);
    }
    
    //配置100kbps 同步字,因为这不同于用于9.6kbps 的同步字
    writeByte = 0x93;
    cc112xSpiWriteReg (CC112X_SYNC3、writeByte、1);
    
    writeByte =0x0B;
    cc112xSpiWriteReg (CC112X_SYNC2、writeByte、1);
    
    writeByte =0x51;
    cc112xSpiWriteReg (CC112X_SYNC1、writeByte、1);
    
    writeByte =0xDE;
    cc112xSpiWriteReg (CC112X_SYNC0、writeByte、1);
    
    writeByte =0x17;
    cc112xSpiWriteReg (CC112X_SYNC_CFG1、writeByte、1);
    
    //根据勘误表校准无线电
    manualCalibration();
    
    //清除 ISR 标志
    ioPinIntClear (IO_PIN_PORT_1、GPIO2);
    
    packetSemaphore = ISR_IDLE;
    
    //启用中断
    ioPinIntEnable (IO_PIN_PORT_1、GPIO2);
    
    //在 RX 中设置无线电
    trxSpiCmdStrobe (CC112X_SRX);
    
    //无限循环
    while (true){
    
    //等待数据包接收中断
    if (packetSemaphore = ISR_ACT_REQUIRED){
    
    //读取 RX FIFO 中的字节数
    cc112xSpiReadReg (CC112X_NUM_RXBYTES、&rxBytes、1);
    
    //检查 FIFO 中是否有字节
    if (rxBytes!= 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、rxBytes);
    
    //检查 CRC OK (CRC_OK:第二个状态字节中的位7)
    //假设状态字节附加在 RX_FIFO 中
    //(PKT_CFG1.append_status = 1)
    //如果禁用 CRC,CRC_OK 字段将读为1
    if (rxBuffer[rxBytes - 1]和0x80){
    
    //更新数据包计数器
    packetCounter++;
    }
    }
    
    
    //更新 LCD
    updateLcd();
    
    cc112xSpiReadReg (CC112X_MARCSTATE、&marcState、1);//检查对讲机是否空闲
    
    //重置数据包信标
    packetSemaphore = ISR_IDLE;
    
    //将无线电设置回 RX
    trxSpiCmdStrobe (CC112X_SRX);
    }
    }
    

    BR

    Siri

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    有任何反馈吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于缺乏反馈而关闭