m261678889 发表于 2020-3-4 21:39:01

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;

butterflyspring 发表于 2020-3-19 15:59:00

建议最好结合产品手册,看看这个函数在做什么,然后看看哪里需要调整,包括硬件参数。目前只能想到这么多。:)
页: [1]
查看完整版本: ST25RU3993初始化时,PLL not locked