微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC2530接收数据问题:进行系统可靠性测试,Device端向Coordinator端持续发送数据,Coordinator端会很快不能再接收任何数据,但是程序还是在运行的。只有复位板子才行。请大家帮忙看看可能什么原因啊?

CC2530接收数据问题:进行系统可靠性测试,Device端向Coordinator端持续发送数据,Coordinator端会很快不能再接收任何数据,但是程序还是在运行的。只有复位板子才行。请大家帮忙看看可能什么原因啊?

时间:12-22 整理:3721RD 点击:

我们自己开发的单板/程序,使用了CC2530+CC2591的方案。

 

代码段基本如下:

#pragma vector = RF_VECTOR __interrupt void SmartParkRevIntProc(void) {     RfDisableRxInterrupt();  // 关中断

    if( RFIRQF0 & IRQ_RXPKTDONE )     {         DataRevProc();  // 数据接收

        S1CON = 0;                   // Clear general RF interrupt flag         RFIRQF0 &= ~IRQ_RXPKTDONE;   // Clear RXPKTDONE interrupt

    }

    RfEnableRxInterrupt(); // 开中断 }

 

问题现象:

1、如果发数端隔一段时间发数(比如100ms),则接收端收数不会出现死机情况;

2、如果发数端发数没有间隔(故意如此,专门测试系统是否会死机),则收数端很快死机。即不能接受任何天线过来的数据,但是程序还在运行哈。读取FSM状态寄存器---FSMSTAT0,发现所得值为:RX overflow / 0x11。尝试过添加 ISFLUSHRX 操作,但是已经没有任何效果。

3、我们的疑问是:为什么出现 RX overflow 后,系统再无法恢复?通过什么操作可以规避此种情况出现?收/发端需要如何编程以规避此问题?

请各位专家提供宝贵意见!感谢大家哈

 

 

1.你或者借鉴SimpliciTI协议,Familiy 6包含CC2530.可以参考他的接收函数做法,有提到

/* Flush must be done twice - datasheet. */
#define MRFI_RADIO_FLUSH_RX_BUFFER() {RFST = ISFLUSHRX; RFST = ISFLUSHRX;}

2.如果是点到点通讯,完全可以使用TI-MAC协议栈。不需要从底层射频驱动开始做。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top