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.

最近在调试CC1101的发送和接收,通过读取RSSI测试灵敏度,发现与手册给出的灵敏度不符,不知道哪块出的问题。

Other Parts Discussed in Thread: CC1101

按照手册中的方法,通过读取接收到的有效数据的最后两个字节,获取RSSI的原始值,

根据公式:

if(raw_rssi >= 128)
{
RSSI=((raw_rssi-256)/2) - rssioffset;
}
else
{
RSSI =(raw_rssi/ 2) - rssioffset;
}

当计算出来的RSSI在-88时,就会出现CRC错误,当在-90或者更差时,基本上就接收不到东西,

也就无法再计算RSSI了。

出现以上问题,会是什么问题造成的:

软件配置?

RSSI计算理解错误?

硬件有问题?硬件是购买的其他公司制作的成品PCB。

请技术专家指点一下吧。谢谢。

  • 读取下RSSI状态寄存器的值呢?
  • 你用的那个频段?

    你所在的测试环境在这个频段上的背景噪声是多少?

  • 读取rssi寄存器的值,基本上就是一个数,不怎么变,读取的时机都是参考其他人的代码位置读取的。
  • 我用的433m的频段,环境的底噪没有进行测量,我的测试环境就在一般生活区。我今天又使用了另外一个厂家的模块测试了一下,基本差不多,稍微能好一点,到-90不丢包,在弱的话,就开始丢包。如果是环境的问题,怎么能够验证,不使用其他仪器?
  • 最简单的方法,你可以使用smartRF studio的continous rx。

  • 这个软件我还没有用过,我现在的cc1101是通过单片机进行配置的,如果需要用这个软件查看空口底噪,硬件怎么连接?这个软件是通过什么接口获取cc1101内部数据的?
  • 如果你有CC debug,直接通过CC debug把CC1101和PC连起来就可以了。
    如果你没有CC debug,可以通过单片机,让CC1101一直处于RX状态,然后读取RSSI寄存器的值。

    In RX mode, the RSSI value can be read continuously from the RSSI status register until the demodulator detects a sync word (when sync word detection is enabled). At that point the RSSI readout value is frozen until the next time the chip enters the RX state.
  • SmartRF Studio 7 is a PC application that can be used in combination with several development kits for Texas Instruments’ CCxxxx and CC430 RF-ICs. It runs on Windows XP, Windows Vista and Windows 7 (32 and 64 bit) and uses USB (or parallel port for legacy boards) to communicate with the evaluation board (EB) which has an evaluation module (EM) with the RF chip mounted.

    SmartRF Studio 7 can also be used without any hardware, but then only to generate, edit and export radio register values.

    SmartRF Studio 7一般是使用USB来连接TI的EB或EM板,但您也可以不借助硬件,但只适用于生成,编辑和导出无线电寄存器值。
  • OK,我按照你这个办法试试先,ths。
  • 我按照这个办法将模块配置成RX模式,
    之后连续的读取RSSI_REG(0x34),读取
    到的原始数据为16,转换后是-66dBm。

    感觉这个数值比较大,做了很多次测试,结果都是
    一样的。

    部分代码如下:
    CC1101InitData[ 22 ][ 2 ]=
    {
    { CC1101_IOCFG0, 0x06 },
    { CC1101_FIFOTHR, 0x47 },
    { CC1101_PKTCTRL0, 0x05 },
    { CC1101_CHANNR, 0x96 }, //430M
    { CC1101_FSCTRL1, 0x06 },
    { CC1101_FREQ2, 0x0F },
    { CC1101_FREQ1, 0x62 },
    { CC1101_FREQ0, 0x76 },
    { CC1101_MDMCFG4, 0xF6 },
    { CC1101_MDMCFG3, 0x43 },
    { CC1101_MDMCFG2, 0x13 },
    { CC1101_DEVIATN, 0x15 },
    { CC1101_MCSM0, 0x18 },
    { CC1101_FOCCFG, 0x16 },
    { CC1101_WORCTRL, 0xFB },
    { CC1101_FSCAL3, 0xE9 },
    { CC1101_FSCAL2, 0x2A },
    { CC1101_FSCAL1, 0x00 },
    { CC1101_FSCAL0, 0x1F },
    { CC1101_TEST2, 0x81 },
    { CC1101_TEST1, 0x35 },
    { CC1101_MCSM1, 0x3B },
    };

    CC1101_Init();
    CC1101_Clear_RxBuffer();
    CC1101_Set_Mode(RX_MODE);
    raw_rssi = CC1101_Read_Reg(0x34);
    rssi = Change2dBm(raw_rssi);


    不知道以上操作有什么问题没有。还是我的环境433M的底噪确实很高?
  • 你的中心频率设置的有点问题把?

  • 哦,那我用工具生成一个频率值配置进去试试
  • 我使用RF studio工具配置了多组频点,RSSI还是之前的那个数值。按照你说的我的中心频点设置的有问题,但是对端发送配置同样的中心频点发送数据,是可以正确的接收到数据的。还有啥需要检查的?
  • 收到数据时,append在这个数据包后面那的RSSI值是多少呢?

  • 收到数据时,读取数据后的rssi应该是对的,距离远了会变小,近了会变大。0dBm发射的话,近距离是-40多dBm,到-90dBm开始丢包。我把手册好好看了,发现rssi寄存器有两个地址,一个是0×34,另一个是0×f4,后面这个是burst方式,我没有试过,是不是需要连续读取0×f4才能读到rssi数值?
  • 问题已经解决了。我把问题总结一下:
    最开始的问题是当接收RSSI < -90dBm的时候,就会出现丢包,当RSSI < -92dBm的时候,就接收不到数据了。
    然后,怀疑是底噪高导致的,就想办法读取RX_MODE下的RSSI,但是怎么读取都是一个固定值,
    更改读取RSSI寄存器为0xF4后,连续读取,读取到的底噪值确实很高:
    原始值 转换后
    230, -87
    227, -88
    232, -86
    235, -84
    227, -88
    231, -86
    229, -87
    223, -90
    229, -87
    229, -87
    227, -88
    224, -90
    232, -86
    230, -87
    229, -87
    到此,所有的问题全部解决。谢谢 Felix_ZF和Viki Shi还有Susan Yang帮助。
  • 你好,请问可以抛一下你读取寄存器0xf4的程序么?我也用同样的方法读取该寄存器,但并没有读到正确结果,想参考下你的程序。谢谢啦