设为首页 加入收藏

TOP

nRF5340开发——晶振篇
2023-07-23 13:29:35 】 浏览:18
Tags:nRF5340 开发

 

   众所周知,Nordic Semiconductor nRF52系列的外部32MHZ高频晶振和32KHZ低频晶振,都需要加匹配电容来保证时钟晶体的精度。这样做的弊端是增加了BOM成本,更重要的是增加了开发和测试的复杂性,客户往往不知道自己选用的晶振,应该匹配多少pf的电容,尤其是32MHZ晶振,为了确保有很好的射频特性,需要尽可能的减少频偏,此时需要用频谱仪测量射频的频偏,再根据测试结果调整匹配的电容,非常耗费时间。

 

 

  到了nRF5340,我们在参考电路设计上直接省掉了这四个外部电容,采用芯片内置电容的方式,外部晶振直接接芯片的引脚,这样做减少了BOM成本和开发测试的复杂度,客户不需要考虑如何调试匹配电容。

 

但是,使用nRF5340芯片的内置电容,也有一些需要注意的地方。
1.选用的外部高频晶振和低频晶振的负载电容CL需要满足nRF5340芯片手册中规定的范围:

 

 

 

2.nRF5340芯片的出厂默认使用的是内部电容(由芯片内部相关寄存器的缺省值决定),NCS中默认的配置为CONFIG_SOC_HFXO_CAP_DEFAULT=y,由此Kconfig的注释中可以得知,NCS中采用的是芯片出厂时寄存器中的值:

 

 

 

在芯片手册中可以查到,高频晶振的内部匹配电容的计算公式如下:
CAPVALUE = (((FICR->XOSC32MTRIM.SLOPE+56)*(CAPACITANCE*2-14)) + ((FICR->XOSC32MTRIM.OFFSET-8)<<4)+32)>>6
上面的公式中,CAPACITANCE为寄存器XOSC32MCAPS.CAPVALUE的值,FICR->XOSC32MTRIM.SLOPE和FICR->XOSC32MTRIM.OFFSET为寄存器XOSC32MTRIM中的值。CAPVALUE 的取值范围,即内部两个电容每一个电容值的取值范围是7pf到20pf,精度为0.5pf。
我们可以通过读取相关的寄存器值,来获得公式中变量的值
PS C:\Users\stli\Desktop> nrfjprog --memrd 0xff0c20
0x00FF0C20: FFFFFE01
可得到:
FICR->XOSC32MTRIM.SLOP=1
FICR->XOSC32MTRIM.OFFSET=16

PS C:\Users\stli\Desktop> nrfjprog --memrd 0x500045c4
0x500045C4: 0000010C
可得到:
XOSC32MCAPS.ENABLE=1,代表使用了内部电容。
CAPACITANCE=12
带入公式可以得到:
CAPVALUE=10pf
通过以上验证,我们知道芯片出厂时,高频晶振内部电容是使能的,且每一个电容的容值是10pf。
3.如何去修改高频晶振内部匹配电容值?
NCS提供了两个Kconfig,同时配置以下两个宏即可:
CONFIG_SOC_HFXO_CAP_INTERNAL=y
CONFIG_SOC_HFXO_CAP_INT_VALUE_X2=14
CONFIG_SOC_HFXO_CAP_INT_VALUE_X2指的是内部两个电容加起来的值,即如果它的值为14那么每一个电容的值为7pf,如果它的值为15那么每一个电容值为7.5pf。
4.如果一定要外挂两个高频晶振的外部电容,也是有方法的:
CONFIG_SOC_HFXO_CAP_EXTERNAL=y
这样就可以把内部电容断开,改为使用外部电容。不过一般情况下不建议使用外部电容,内部电容省时省力何乐而不为呢?
5.如何调试更改低频晶振的内部电容。
通过寄存器XOSC32KI.INTCAP更改:

 

 NCS中对应的Kconfig:

 

6.如果需要更进一步节省BOM成本,同时不在乎略微的功耗提升,甚至可以把外部的低频晶振也省略掉,具体配置方法如下:
CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC_CALIBRATION=y

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇普冉PY32系列(四) PY32F002A/003/.. 下一篇痞子衡嵌入式:我拿到了CSDN博客..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目