LPC:如何实现内部时钟校准
在MCU开发中,不使用外部晶振而使用内部晶振作为时钟源可以节约成本,但是内部晶振产生的时钟频率受温度,主频的影响较外部晶振来说会大很多。很多客户对内部时钟精度是多少、usb传输能否使用内部时钟、如何校准内部时钟有些许疑问,本文主要对此进行讲解。
1. 通过FRO控制器校准内部时钟
通常情况下,我们只能通过调整FREQTRIM的值来校准时钟。
内部时钟频率受MCU主频、温度等因素的影响会出现偏差,FRO控制寄存器可以对内部时钟进行校准,如下:
Figure 1.
FREQTRIM寄存器值从0~255,每调整一步,大约调整内部时钟频率的0.1%。FREQTRIM的值和FRO的输出频率间没有固定的函数关系,只能通过代码调整FREQTRIM并借助示波器观察FRO输出波形来确定理想的FREQTRIM数值。 我们对两块LPC51U68开发板做了相应测试。将内部时钟对应的引脚引出,用示波器查看随着FREQTRIM寄存器值(横坐标)的增加,FRO时钟频率(纵坐标)的增长规律,结果一目了然。
如下为第一块开发板的测试结果:
Figure 2.
如下为第二块开发板的测试结果:
Figure 3.
从测试结果中可以看出以下两点:
- 内部FRO的时钟频率与FREQTRIM寄存器值没有线性关系,没有明确公式可以表征两者关系;
- 即使是相同型号的芯片,内部时钟频率随FREQTRIM寄存器值的变化都是略有差异,只是趋势相同;
所以没有一个精确的公式来指导内部时钟频率的校准,只能不断调节FREQTRIM寄存器值,就像调节投影仪聚焦一样,用示波器查看内部时钟引脚电平频率,进而找到最适合的FREQTRIM寄存器校准值。
对于其他LPC芯片的FRO Trim亦是如此。
2. LPC51U68:使用内部时钟源时软件校准USB传输
LPC51U68的Full Speed USB模块有一个独有的FRO自动校准功能,借助测量USB的SOF位来自动调节FREQTRIM的数值来实现FRO校准。FRO一旦被校准,相应以FRO为时钟源的系统时钟和外设时钟都被校准。该解决方案只适用于LPC51U68,其他芯片请具体查看用户手册。
这是LPC51U68 User Manual中说明的FRO时钟精度为±1%:
Figure 4.
对于Full Speed USB,USB数据传输精度要求为±0.25%,FRO时钟精度并不满足。NXP为LPC51U68提供的通过测量帧首包(SOF)来校准FRO的方案,可以满足Full Speed模式下的传输精度要求:
Figure5.
解决方案下载链接如下:
感谢NXP SE团队工程师帮忙测试并提供数据。