我用CC2500做一个接收机,涉及到了跳频,9ms跳一次,我的策略是如果收不到数据就不跳了,等待发送机下一次循环到这个频点再重新同步。
目前碰到了一个很严重的问题,就是有时候运行时间长一点(比如几分钟后),接收机就收不到数据了,而此时频点就固定在一个点上等待,MCU也没有死机,但就是读不到数据。
请问,这个问题是什么原因造成的?软件还是硬件?怎么解决?
很急,求助,谢谢!
Susan Yang:
请问能否给出下您是如何设置跳频的?
an hai:
回复 Susan Yang:
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; }
}
an hai:
回复 Susan Yang:
后来我又做了下测试,死机后重新初始化下芯片,又可以接收到数据了。不知道这个是什么原因?
急待解答,谢谢!
TI中文支持网