你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

ST25RU3993初始化时,PLL not locked

[复制链接]
m261678889 提问时间:2020-3-4 21:39 /
移植官方ST25RU3993 EVEL的代码,初始化到最后一步始终显示PLL not locked,不知道问题出在哪
无标题.png
初始化代码:
                //读取版本
                st25RU3993SingleRead(ST25RU3993_REG_DEVICEVERSION,&myBuf[0]);
                if(myBuf[0] != 0x61)
                {
                        return 1;
                }
                //晶体振荡器稳定
                st25RU3993SingleRead(ST25RU3993_REG_AGCANDSTATUS,&myBuf[0]);
                if((myBuf[0]&0x01) != 0x01)
                {
                        return 2;
                }
    //检查SPI连接
    myBuf[0] = 0x55;
    myBuf[1] = 0xAA;
    myBuf[2] = 0xFF;
    myBuf[3] = 0x00;
                st25RU3993ContinuousWrite(ST25RU3993_REG_MODULATORCONTROL1,myBuf,4);
    memset(myBuf, 0x33, sizeof(myBuf));
                st25RU3993ContinuousRead(ST25RU3993_REG_MODULATORCONTROL1,myBuf,4);
    if((myBuf[0]!=0x55) ||
        (myBuf[1]!=0xAA) ||
        (myBuf[2]!=0xFF) ||
        (myBuf[3]!=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[0] = 0x20;

                // Modulator Control Register 2 0x14
                // ook_ask | pr_ask | del_len<5-0>
                //    1    |    1   | 0 1 1 1 0 1  = 0xDD
                myBuf[1] = 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[2] = 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[0]);
    if(!(myBuf[0] & 0x01))
    {
        return 4;   // Crystal not stable
    }
    else
    {

    }
    if(!(myBuf[0] & 0x02))
    {
        return 5;    // PLL not locked
    }
    else
    {

    }

    return 0;

收藏 评论1 发布时间:2020-3-4 21:39

举报

1个回答
butterflyspring 回答时间:2020-3-19 15:59:00
建议最好结合产品手册,看看这个函数在做什么,然后看看哪里需要调整,包括硬件参数。目前只能想到这么多。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版