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.

CC2500死机收不到数据

Other Parts Discussed in Thread: CC2500

我用CC2500做一个接收机,涉及到了跳频,9ms跳一次,我的策略是如果收不到数据就不跳了,等待发送机下一次循环到这个频点再重新同步。

目前碰到了一个很严重的问题,就是有时候运行时间长一点(比如几分钟后),接收机就收不到数据了,而此时频点就固定在一个点上等待,MCU也没有死机,但就是读不到数据。

请问,这个问题是什么原因造成的?软件还是硬件?怎么解决?

很急,求助,谢谢!

  • 请问能否给出下您是如何设置跳频的? 

  • u8 state=0;
    u32 correctpkt=0;
    u32 errortime=0;
    u8 chopflag=0;
    u32 timeout=9000;

    initCC2500(); //81ms

    channr=0;
    ledstate=LED_FAILURE;
    CC2500_Strobe(CC2500_SIDLE);
    CC2500_WriteReg(CC2500_0A_CHANNR,hopping_table[channr]);
    CC2500_WriteReg(CC2500_23_FSCAL3, 0x89);
    CC2500_Strobe(CC2500_SRX);
    delay_usA(3000);
    packetlen=0;
    state=0;
    chopflag=0;

    while(1)
    {
        len = CC2500_ReadReg(CC2500_3B_RXBYTES | CC2500_READ_BURST) & 0x7F;
        if(len)
        {
            CC2500_ReadData(buffer, len);
            for(i=0;i<len;i++)
            {
                packet[packetlen++]=buffer[i];
            }
            if(packet[0]==0x11)
            {
                if(packet[0]==(packetlen-3))
                {  
                    DebugSendRawPacket();

                    //跳频 ,包中第4个字节为本次频点
                    lastchannr=packet[3];
                    last_alive_time=micros();

                    state=1;
                    correctpkt++;

                    chopflag=1;
                }
            }
        }

       //9ms一跳,如果连续10次没有收到数据,就固定在最后的频点
        if((((micros()-last_alive_time)>=timeout) && state>=1 && state<10) || chopflag==1)
        {
            channr = (lastchannr + 1) % 188;

            //9ms一跳,4个频点1组(前3个接收,第4个发送,现在只收不发)
            if((channr%4)==3)
            {
                delay_usA(9000);
                channr = (channr + 1) % 188;
            }

            lastchannr=channr;
            last_alive_time=micros();
            CC2500_Strobe(CC2500_SIDLE);
            CC2500_WriteReg(CC2500_0A_CHANNR, hopping_table[channr%47]);
            CC2500_WriteReg(CC2500_23_FSCAL3, 0x89);
            CC2500_Strobe(CC2500_SFRX);
            CC2500_Strobe(CC2500_SRX);
            if(chopflag!=1) state++;
            packetlen=0;


            chopflag=0;
        }

    }

  • 后来我又做了下测试,死机后重新初始化下芯片,又可以接收到数据了。不知道这个是什么原因?

    急待解答,谢谢!