ST25RU3993初始化时,PLL not locked
移植官方ST25RU3993 EVEL的代码,初始化到最后一步始终显示PLL not locked,不知道问题出在哪初始化代码:
//读取版本
st25RU3993SingleRead(ST25RU3993_REG_DEVICEVERSION,&myBuf);
if(myBuf != 0x61)
{
return 1;
}
//晶体振荡器稳定
st25RU3993SingleRead(ST25RU3993_REG_AGCANDSTATUS,&myBuf);
if((myBuf&0x01) != 0x01)
{
return 2;
}
//检查SPI连接
myBuf = 0x55;
myBuf = 0xAA;
myBuf = 0xFF;
myBuf = 0x00;
st25RU3993ContinuousWrite(ST25RU3993_REG_MODULATORCONTROL1,myBuf,4);
memset(myBuf, 0x33, sizeof(myBuf));
st25RU3993ContinuousRead(ST25RU3993_REG_MODULATORCONTROL1,myBuf,4);
if((myBuf!=0x55) ||
(myBuf!=0xAA) ||
(myBuf!=0xFF) ||
(myBuf!=0x00))
{
return 3; // data bus interface pins not working ----ok
}
// //检查外部中断是否正常
Reset_En_Pin();
st25RU3993CLearIrqReg();
st25RU3993SingleWrite(ST25RU3993_REG_IRQMASK1, 0x20);//FIFO中断使能
// // set up 48Byte transmission, but we supply less, therefore a fifo underflow IRQ is produced
st25RU3993SingleWrite(ST25RU3993_REG_TXLENGTHUP, 0x03);
st25RU3993SingleCommand(ST25RU3993_CMD_TRANSMCRC);
st25RU3993ContinuousWrite(ST25RU3993_REG_FIFO,myBuf,4);
st25RU3993ContinuousWrite(ST25RU3993_REG_FIFO,myBuf,4);
st25RU3993ContinuousWrite(ST25RU3993_REG_FIFO,myBuf,4);
st25RU3993ContinuousWrite(ST25RU3993_REG_FIFO,myBuf,4);
st25RU3993ContinuousWrite(ST25RU3993_REG_FIFO,myBuf,4);
st25RU3993ContinuousWrite(ST25RU3993_REG_FIFO,myBuf,4);
st25RU3993WaitForResponse(RESP_FIFO);
if(!(st25RU3993GetResponse() & RESP_FIFO))
{
return 4;
}
st25RU3993ClrResponse();
Reset_En_Pin();
st25RU3993SingleCommand(ST25RU3993_CMD_HOP_TO_MAIN_FREQUENCY);
// Device Status Control Register 0x00
// stby | - | agc_on | rec_on | rf_on
// 0|0 0 0 0| 0 | 0 | 0 = 0x00
st25RU3993SingleWrite(ST25RU3993_REG_STATUSCTRL, 0x03);
// Protocol Selection Register 0x01
// RX_crc_n | dir_mode | AutoACK<1-0> | - | prot<2-0>
// 1 | 0 | 0 0 | 0 |0 0 0 = 0x80
st25RU3993SingleWrite(ST25RU3993_REG_PROTOCOLCTRL, 0x80);
// Tx Options Register 0x02
//- | TxOne<1-0> | - | Tari<2-0>
// 0 0| 1 1 | 0 | 0 0 0 = 0x30
st25RU3993SingleWrite(ST25RU3993_REG_TXOPTIONS, 0x30);
// Rx Options Register 0x03 --> Set by Gen2 Configuration
// TRcal High Register 0x04 --> Set by Gen2 Configuration
// TRcal Low Register 0x05--> Set by Gen2 Configuration
/**********************************************************/
// Modulation Ctrl2 0x14
// del_len | pr_ask | ook_ask
// 1 1 1 0 1 1 | 1 | 1 = 0xEF
st25RU3993SingleWrite(ST25RU3993_REG_MODULATORCONTROL2, 0xEF);
// Modulation Ctrl4 0x16
// 1stTari
// 1 0 0 0 1 0 0 1 = 0x89
st25RU3993SingleWrite(ST25RU3993_REG_MODULATORCONTROL4, 0x89);
// PLL Main Register 0x17
// - | RefFreq<2-0> | mB_val<9-6>
// 0 | 1 1 0 | 0 0 1 1 = 0x63
st25RU3993SingleWrite(ST25RU3993_REG_PLLMAIN1, 0x63);
// PLL Main Register 0x18
// mB_val<5-0> | mA_val<9-8>
// 1 1 1 0 1 1 | 0 1 = 0xED
st25RU3993SingleWrite(ST25RU3993_REG_PLLMAIN2, 0xED);
// PLL Main Register 0x19
// mA_val<7-0>
// 0 0 0 1 1 0 1 0 = 0x1A
st25RU3993SingleWrite(ST25RU3993_REG_PLLMAIN3, 0x1A);
st25RU3993SingleWrite(ST25RU3993_REG_MEASUREMENTCONTROL, 0x00);
// Miscellaneous Register 1 0x0D
// hs_output | hs_oad | miso_pd2 | miso_pd1 | open_dr | s_mix | -
// 0 | 0 | 1 | 1 | 0 | 0 |0 0 = 0x30
st25RU3993SingleWrite(ST25RU3993_REG_MISC1, 0x30);
st25RU3993SingleWrite(ST25RU3993_REG_MISC2, 0x40);
// REGULATOR and PA Bias Register 0x0B
// pa_bias<1-0> | rvs_rf<2-1> | rvs<2-0>
// 0 0 | 0 1 1 |0 1 1 = 0x1B
st25RU3993SingleWrite(ST25RU3993_REG_REGULATORCONTROL, 0x1B);
// RF Output and LO Control Register 0x0C
// eTX<7-5> | - | eTx<3-0>
// 1 0 0| 0 | 0 0 1 0= 0x82
st25RU3993SingleWrite(ST25RU3993_REG_RFOUTPUTCONTROL, 0x82);
// Modulator Control Register 1 0x13
//- | main_mod | aux_mod | - | e_lpf | ask_rate<1-0>
//0 | 0 | 1 |0 0| 0 | 0 0 = 0x20
myBuf = 0x20;
// Modulator Control Register 2 0x14
// ook_ask | pr_ask | del_len<5-0>
// 1 | 1 | 0 1 1 1 0 1= 0xDD
myBuf = 0xDD;
// Modulator Control Register 3 0x15
// trfon<1-0> | lin_mode | TX_lev<4-0>
// 0 0 | 0 |0 0 0 1 0= 0x02 for USA/EU
// 0 0 | 0 |0 0 1 1 1= 0x07 for JAPAN
myBuf = 0x02;//0x07
st25RU3993ContinuousWrite(ST25RU3993_REG_MODULATORCONTROL1, myBuf, 3);
// CP Control Register 0x12
// LF_R3<7-6> | LF_C3<5-3> | cp<2-0>
// 0 0 | 1 1 0 |1 0 1= 0x25
//30kOhm, 160pF, 1500uA
st25RU3993SingleWrite(ST25RU3993_REG_CPCONTROL, 0x35);
// Enable Interrupt Register Register 1 0x35 中断控制寄存器1
// e_irq_TX | e_irq_RX | e_irq_fifo | e_irq_err | e_irq_header | - | e_irq_AutoAck | e_irq_noresp
// 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 = 0x7F
st25RU3993SingleWrite(ST25RU3993_REG_IRQMASK1, 0x7F);
// Enable Interrupt Register Register 2 0x36 中断控制寄存器2
// e_irq_ana | e_irq_cmd |-| e_irq_err1 | e_irq_err2 | e_irq_err3
// 0 | 0 |0 0 0| 1 | 1 | 1 = 0x07
st25RU3993SingleWrite(ST25RU3993_REG_IRQMASK2, 0x07);
// RX Length Register 1 0x3A
// RX_crc_n2 | fifo_dir_irq2 | rep_irg2 | auto_errcode_RXl | RXl11-RXl8
// 0 | 0 | 0 | 1 | 0 0 0 0= 0x10
st25RU3993SingleWrite(ST25RU3993_REG_RXLENGTHUP, 0x10);
st25RU3993SetBaseFrequency(925);
st25RU3993SetSensitivity(3);
// Now that the chip is configured with correct ref frequency the PLL
// should lock
st25RU3993SingleRead(ST25RU3993_REG_AGCANDSTATUS,&myBuf);
if(!(myBuf & 0x01))
{
return 4; // Crystal not stable
}
else
{
}
if(!(myBuf & 0x02))
{
return 5; // PLL not locked
}
else
{
}
return 0;
建议最好结合产品手册,看看这个函数在做什么,然后看看哪里需要调整,包括硬件参数。目前只能想到这么多。:)
页:
[1]