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.

[参考译文] CC1200:RSSI 变化

Guru**** 2539500 points


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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/725301/cc1200-rssi-variation

器件型号:CC1200

尊敬的 Sirs:

   我之所以发送此说明、是因为我的 RSSI 读数变化太大。

    手动查询 RSSI 值会导致伪响应、因此附加状态位被置位

这样 RSSI 就会被添加到每个接收到的数据包中。

完成此操作后,接收到一系列带有数据包的 RSSI。

(数据包中有3个字节+ 3个前导码字节。  1200位/秒监听、监听模式

Event0=03A4.)

 

对于15个接收到的数据包序列,接收到的 RSSI 如下:

-64、-32、-128、56、15、 -64、0、48、-2、-125、 1、-114、48、-32、-128。

RSSI 被设置为2字节平均、读取的数据只是从 RSSI1读取的原始数据、没有任何校正。

这些读数似乎有太多变化。  以下是配置文件:

 

 

/*********

   150MHz  监听模式 GPIO0无脉冲

RX 滤波器=19.84khz、2GFSK、2.68k DEV、2.4kbps

SYNC= 05、56不包括类型

11位、无序列号、固定3字节0位

 

7字节前导码            发送到 MCDT rec ti rec

 

TI 接收器 EVB: 射频电流= 5.4ma、MCU 电流= 2.6ma

(二 /

 

const 寄存器 Setting_t preferredSettings[]=

 //{CC120X_IOCFG3、           0x3c}、        //十进制60。  读取外部 osc 使能。  不管用

 {CC120X_IOCFG2、           0x06}、        //监听150m

 //{CC120X_IOCFG1、           0x00}、        //使 GPIO1输出并反相为高电平(请参阅3.4)

 {CC120X_IOCFG0、           0x06}、

 {CC120X_SYNC3、            0x55}、        //was AA、55 7:0设置 MSB 同步。  AA 表示反相

 {CC120X_SYNC2、            0x55}、        //was AA、55、7:0设置 MSB 同步。

 {CC120X_SYNC1、            0x55}、        //was AA、55、05 7:0设置 MSB 同步。

 {CC120X_SYNC0、            0x56}、        //was A9、在7:0中设置同步的 lsb。  原始 A6

 {CC120X_SYNC_CFG0、        0x88}、        //was 88。  添加了 PQT_EN 和 PQT_Gating_en、strict_sync_check=3

 {CC120X_SYNC_CFG1、        0x28}、        //28=11位和8阈值。  是48。  4x=16位、8x=24位、Ax=32位7-5 len 同步、4:0=SYNC 阈值

 {CC120X_EXTERING_M、      0x8D}、

 {CC120X_MODCFG_DEV_E、     0x08}、

 {CC120X_DCFILT_CFG、       0x5D}、

 {CC120X_PREAMING_CFG1、    0x18}、    //18=3b e aa。  10=2字节 e AA。  是24。  0x31=24字节。 0x25=7字节

 {CC120X_PREAMING_CFG0、    0x8A}、

 {CC120X_IQIC、             0xCB}、

 {CC120X_CHAN_BW、          0xAC}、    //AC=9.46khz。  AA=10kHz

 {CC120X_MDMCFG1、          0x60}、    //40=fifo en、Man 模式=20、反转数据=10

 {CC120X_MDMCFG0、          0x05}、

 {CC120X_symbol_Rate2、     0x4F}、

 {CC120X_symbol_rate1、     0x75}、

 {CC120X_symbol_RATE0、     0x10}、

 {CC120X_AGC_REF、          0x31}、

 {CC120X_AGC_CS_THR、       0x09}、

 {CC120X_AGC_CFG1、         0x40}、

 //{CC120X_AGC_GAIN_ADJUST、  0xAC}、    //-84

 {CC120X_AGC_CFG0、         0x87}        、RSSI 的/2计数

 {CC120X_FIFO_CFG、         0x00}、

 {CC120X_Setting_CFG、     0x03}、

 {CC120X_FS_CFG、           0x1B}、

 {CC120X_WOR_CFG0、         0x08}、    //相同

 {CC120X_WOR_CFG1、         0x08}、    //添加

 {CC120X_WOR_EVENT0_MSB、   0x02}、    //02、3B PRE。 是01。  是02

 {CC120X_WOR_EVENT0_LSB、   0x9A}、    //9a、3b pre。 2字节为8f。  是 E2

 {CC120X_PKT_CFG2、         0x00}、     //norm 模式、禁用 CRC、无状态字节

 {CC120X_PKT_CFG1、         0x01}、     // 0x01 =附加 RSSI。   ADX 校验和 CRC 被禁用。  此行需要 rec MCDT!

 {CC120X_PKT_CFG0、         0x10}、     //x18 pro 6位、x10 EMIDS 4位。  将位6:5中的 length=00、位4:2中的 len 固定

 //{CC120X_RFEND_CFG1、       0x30}、   // X30在复用后返回到 Rx

 {CC120X_RFEND_CFG0、       0x0C}、     /0x30在 txing 后返回到 Rx

 {CC120X_PKT_LEN、          0x08}、     //pktlen、数据包长度为02 + 4位(仿真)、6-3/4位(专业)

 {CC120X_IF_MIX _CFG、       0x1C}、

 {CC120X_FREQOFF_CFG、      0x22}、     //FOC_EN=x20、FOC_KI_Factor=02为20

 {CC120X_MDMCFG2、          0x0C}、

 {CC120X_TOC_CFG、          0x40}、    //TOC 限制2%

 

 {CC120X_Settling_CFG、     0x08}、    //Cal FS 从 IDLE 变为 Rec TX

 

 {CC120X_FREQ2、            0x5A}、

 {CC120X_FREQ1、            0x00}、

 {CC120X_FREQ0、            0x00}、

 

 {CC120X_IF_ADC1、          0xEE}、

 {CC120X_IF_ADC0、          0x10}、

 {CC120X_FS_DIG1、          0x07}、

 {CC120X_FS_DIG0、          0xAF}、

 {CC120X_FS_CAL1、          0x40}、

 {CC120X_FS_CAL0、          0x0E}、

 {CC120X_FS_DIVTWO、        0x03}、

 {CC120X_FS_DSM0、          0x33}、

 {CC120X_FS_DVC0、          0x17}、

 {CC120X_FS_PFD、           0x00}、

 {CC120X_FS_PRE、           0x6E}、

 {CC120X_FS_REG_DIV_CML、   0x1C}、

 {CC120X_FS_SPARE、         0xAC}、

 {CC120X_FS_VCO0、          0xB5}、

 //{CC120X_FS_CFG、           0x0B}、                    //136-160MHz

 {CC120X_XOSC5、            0x0E}、

 {CC120X_XOSC1、            0x03}、

};

 

 

 谢谢你

John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您列为 RSSI 的数字看起来不像有效 RSSI 数字、因为-128和0应该都不可能。 您能否显示您用来从附加状态读取 RSSI 并打印它的代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    希望您有一个愉快的假期、之三.  很高兴能让你回来。

       以下是读取数据包的接收代码。  当一个接收 IRQ 发生时、它被调用:

    void RunRx (void)

    静态 uint8 marcState;
    静态 uint8 i、Temp、rxBuffer1;
    静态 uint8 CID[10];
    静态 char ERRCode、PktCfg0;
    静态 char nInit、Sync、pdata、Status;
    静态短 id,奇偶校验,a;
    针对 calc 奇偶校验的静态 char ParTemp;//temp
    静态字符 MT;//奇偶校验计数和消息类型
    静态 uint16 ProMsbs16、ProLsbs16;


    //static char SavData、Count;

    //等待来自中断的数据包同步信号:
    {//This called by receive IRQ

    cc120xSpiReadReg (CC120X_PKT_LEN、&Temp、1);//查看其中包含的 pktlen (出8)
    WakeTimer = WAKETIME10;
    //清除信号量标志
    packetSemaphore = ISR_IDLE;//0

    RTimeout = 80;400/秒时、//等于30个字符时间
    rxBytes=0;//initialize
    while ((rxBytes =0)&&(RTimeout >0)//IRQ 来自 SYNC,因此仍需等待数据包

    cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);//Rd、Rx FIFON.subs.c 中无字节


    cc120xSpiReadRxFifo (rxBuffer、1);//读取第一个字节具有类型。 在 subs.c 中
    RMessType= rxBuffer[0];


    //上面由“RMessType”确定的消息类型有3种。 这仅显示一个:

    if ((RMessType & 0xf0)=0xD0)//中长消息?

    PktLen =2+2;//针对 RSSI 读取另外2个字节+2
    RTimeout = 80;400/秒时、//等于30个字符时间
    cc120xSpiWriteReg (CC120X_PKT_LEN、&PktLen、1);//设置要在数据包中读取的剩余字节数。 SUB.c.

    PktCfg0=0x10;//中等混乱额外位长度(10=4位)
    cc120xSpiWriteReg (CC120X_PKT_CFG0、&PktCfg0、1);


    //现在已收到消息类型,接下来接收消息的其余部分:

    rxBytes=0;//initialize
    while ((rxBytes < PktLen)&&(uFixedMode = RxMode)&&(RTimeout >0)//等待 pktlen 数据包到达

    cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);//rd、Rx FIFO 中无字节
    A=a+1;

    cc120xSpiReadRxFifo (rxBuffer、(rxBytes));//已读取第一个字节。 在 subs.c 中


    //处理中等长度消息:
    if ((RMessType & 0xf0)=0xD0)// med len?

    for (i=0;i<10;i++)// 10位 ID
    CID[I]=0x20;//首先清除 ID
    rxBuffer[1]= 0xf0;//清除额外的位

    ID = SwapID10位(0、RMessType、rxBuffer);//subs.c
    奇偶校验=( rxBuffer[1]& 0x10)>>4;
    状态=(rxBuffer[0]<3)& 0x18;//状态的 MSB
    status |=((rxBuffer[1]>5)& 0x0F);// lsbs of status

    //RMessType +=1;//强制奇偶校验错误!!
    rxBuffer[1]= 0xF0;//包括发送的奇偶校验位
    ParTemp = RMessType ^ rxBuffer[0]^ rxBuffer[1];
    M= CalcParityMT (0x0D、ParTemp);//orig 奇偶校验(包括 MT)(消息类型)

    //字节2是 RSSI,因为附加状态位被设定:
    RSSI = rxBuffer[2];//RSSI 附加的四倍读取 RSSI
    P3OUT |= BIT7;//可用的导通数据
    DtaAvailTimer=10;//数据可用输出的计时器(LED 现在)


    cc120xSpiReadReg (CC120X_NUM_RXBYTES、&rxBytes、1);//测试在 Rx FIFO 中读取另一个字节。 SUB.c.
    cc120xSpiReadRxFifo (rxBuffer、(rxBytes));//在 subs.c 中

    CheckForErrors (检查错误):
    marcState = CheckState (mess);

    if (marcState ==0x11)

    trxSpiCmdStrobe (0x3A);//刷新 Rx FIFO 的命令
    WaitForIdleState();//等待达到空闲状态


    if ((RMessType & 0xf0)=0xD0)// med len mess?

    //Rx FIFO 错误为0x11:

    ERRCode = sprintf( TempBuf,"rxm %s 0%d %x,%d","0d",id,状态, RSSI );
    SCI1Output (TempBuf、1、&Settings、&SCI1);

    rxBytes=0;//为接收到的下一个时间数据包清除
    PktLen =8;//设置要查找的字节(需要大于1,以便我们可以重新确定混乱类型,然后增加)
    cc120xSpiWriteReg (CC120X_PKT_LEN、&PktLen、1);
    RTimeout= 80;//12个更多字符时间

    //将无线电设置为 RX 监听模式
    trxSpiCmdStrobe (CC120X_SWOR);//启动自动 RX 轮询序列(无线电唤醒)。 TranscInit.c

    返回;

    谢谢、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于代码有点复杂、因此很难说明您的代码中的错误。 您是否将您的代码与我们的代码示例进行了比较?

    调试时、您可以使用射频命令在 RX 端使用 SmartRF Studio、并查看 RX 缓冲区内容的外观。 然后检查您的代码是否向正确的变量读出相同的字节。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、ter:

       我应该查看哪些具有 RSSI 的代码示例?

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我相信我在此处列出的示例之一中找到了它: processors.wiki.ti.com/.../Perf_value_line_easylink
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢、Ter

    John

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

    我经常错过了 RSSI_VALID 位。 在使用 RSSI 读数之前、我将尝试对其进行检查。 应该起作用。

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

    之三:

                   我所做的基本错误不是检查 RSSI_VALID 位。  但是、即使这样做之后、也无法通过将 RSSI 附加到数据包来正确读取。  相反、我必须在接收到数据包后获取 RSSI_VALID 位时对 RSSI1数据进行单独的 SPI 读取。

           附件是我的最终数据、非常好。

     

    Johne2e.ti.com/.../RSSI-Data.pdf