TI中文支持网
TI专业的中文技术问题搜集分享网站

关于CC1020校准不能通过的问题

我在进行CC1020校准时碰到一些问题,希望能得到大家的帮助:

1、  WriteToCC1020Register(CC1020_CALIBRATE,0xB4);开始校准,然后读取该寄存器的值ReadFromCC1020Register(CC1020_CALIBRATE);,读回来的值为34h,有时候也为B4h。是不是我写寄存器的bit[7]不成功?

2、  在校准开始之后,经过大于100us的延时,不停的读状态寄存器ReadFromCC1020Register(CC1020_STATUS),读到的值一般为86或84,反正一般读不到bit[4]=1的情况,即使有,也只是某一时刻bit[4]=1,之后又变回bit[4]=0。

3、  就算不停地一直在校准,也不会读到(ReadFromCC1020Register(CC1020_STATUS)&0x80)==0x80)然后(ReadFromCC1020Register(CC1020_STATUS)&0x10) == 0x10)的值,即不停地校准,也不能通过。

4、  如果不进行校准,会有什么影响?

5、  DCLK管脚一直为高电平,这是不是也是因为校准没有通过?如何使DCLK产生发送数据的时钟?

 

我的寄存器配置步骤都是按照swra067文档的例程来编写的,具体如下:

const char DefaultConfig433[32] =

{

  0x0F,  // 0x01, INTERFACE

  0xFF,  // 0x02, RESET

  0x8F,  // 0x03, SEQUENCING

  0x3A,  // 0x04, FREQ_2A

  0x14,  // 0x05, FREQ_1A

  0x99,  // 0x06, FREQ_0A

  0x3A,  // 0x07, CLOCK_A

  0x3A,  // 0x08, FREQ_2B

  0x1F,  // 0x09, FREQ_1B

  0x45,  // 0x0A, FREQ_0B

  0x3A,  // 0x0B, CLOCK_B

  0x44,  // 0x0C, VCO

  0x51,  // 0x0D, MODEM

  0x9B,  // 0x0E, DEVIATION

  0xC6,  // 0x0F, AFC_CONTROL

  0x2F,  // 0x10, FILTER

  0x61,  // 0x11, VGA1

  0x55,  // 0x12, VGA2

  0x2F,  // 0x13, VGA3

  0x2D,  // 0x14, VGA4

  0x20,  // 0x15, LOCK

  0x78,  // 0x16, FRONTEND

  0x47,  // 0x17, ANALOG, RX=47/TX=47

  0x14,  // 0x18, BUFF_SWING

  0x22,  // 0x19, BUFF_CURRENT

  0xAE,  // 0x1A, PLL_BW

  0x34,  // 0x1B, CALIBRATE

  0xF0,  // 0x1C, PA_POWER

  0x00,  // 0x1D, MATCH

  0x00,  // 0x1E, PHASE_COMP

  0x00,  // 0x1F, GAIN_COMP

  0x00   // 0x20, POWERDOWN

};

 

校准函数:

char CalibrateCC1020(char PA_POWER)

{

  volatile int TimeOutCounter;

  volatile int nCalAttempt;

  // Turn off PA to avoid spurs during calibration in TX mode

  WriteToCC1020Register(CC1020_PA_POWER,0x00);

  // Calibrate, and re-calibrate if necessary:

  for (nCalAttempt = CAL_ATTEMPT_MAX; (nCalAttempt>0); nCalAttempt–) {

    // Start calibration

    WriteToCC1020Register(CC1020_CALIBRATE,0xB4);

    // Monitor actual calibration start (ref. Errata Note 04 – CC1020)

    for(TimeOutCounter=CAL_TIMEOUT;((ReadFromCC1020Register(CC1020_STATUS)&0x80)==0x80)&&(TimeOutCounter>0); TimeOutCounter–);

      // Monitor calibration complete

    for(TimeOutCounter=CAL_TIMEOUT;((ReadFromCC1020Register(CC1020_STATUS)&0x80)==0x00)&&(TimeOutCounter>0); TimeOutCounter–);

    // Monitor lock

    for(TimeOutCounter=LOCK_TIMEOUT;((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x00)&&(TimeOutCounter>0); TimeOutCounter–);

    // Abort further recalibration attempts if successful LOCK

    if((ReadFromCC1020Register(CC1020_STATUS)&0x10) == 0x10) {

      break;

    }

  }

  // Restore PA setting

  WriteToCC1020Register(CC1020_PA_POWER, PA_POWER);

  // Return state of LOCK_CONTINUOUS bit

  return ((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10);

}

 

主函数:

int main(void)

 {

    ResetCC1020();

    SetupCC1020All();

    WakeUpCC1020ToTX(TXANALOG);

    if (!CalibrateCC1020(PA_POWER))

         writestr ("TX Calibration failed");

 

非常希望能得到各位的帮助,谢谢!!

Nutcracker:

为啥还在用CC1020? 建议切到 CC1101 或 CC1120 上面来。

qin haiqiang:

回复 Nutcracker:

谢谢您的的答复,CC1020和CC1110最终都要用,现在先做CC1020。这几天调试,CC1020校准还是没有通过,DCLK一直没有时钟出来,恳请各位帮帮忙,谢谢!!

赞(0)
未经允许不得转载:TI中文支持网 » 关于CC1020校准不能通过的问题
分享到: 更多 (0)