Vim 簡介{#vim-簡介} Vim 是 Linux 系統上的最著名的文本/ 代碼編輯器,也是早年的 Vi編輯器的加強版,而 gVim 則是其 Windows 版。它的最大特色是完全使用鍵盤命令進行編輯,脫離了滑鼠操作雖然使得入門變得困難,但上手之後鍵盤流的各種巧妙組合操作卻能帶來極為大幅的效率提 ...
眾所周知,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