|
MSP430精准配置高速串口导致串口通信失败原因分析
[复制链接]
在实际项目大批量生产调试设备时,发现同样版本的程序在不同设备上运行时效果不一致,一部分设备串口通信正常,另外一部分串口通信不正常。通过示波器对多个设备的串口波特率及系统时钟频率测试,发现不同设备之间的系统时钟频率及波特率存在差异,与理论值不一致,用示波器测试出的系统时钟频率及波特率与理论值偏差较大。由于系统时钟频率的偏差导致波特率设置值超过了串口所允许的最大误差值,故而导致串口通信失败。其根本原因是系统的时钟频率会随环境温度、电压或其他因素变化。
原因分析
在异步通信中,波特率是很重要的指标,表示为每秒传送二进制数码的位数,反映了异步串行通信的速度。MSP430的波特率发生器使用一个分频计数器和一个调整器来构成分频因子,此方法能够用较低时钟频率实现高速通信,从而在系统低功耗的情况下,实现高性能的串行通信。MSP430波特率发生器的时钟源可以为通用时钟(Universal Clock,UCLK)、辅助时钟(Auxiliary Clock,ACLK),子系统时钟Subsystem Master Clock,SMCLK)。其中,ACLK通常为32 768 Hz,稳定但无法满足高速串口通信;SMCLK为可配置的系统频率,可满足高速串口通信,但不稳定。SMCLK是由数字控制振荡器(Digitallycontrolled Oscillator,DCO)的调节器模块混合两个频率Fdco和Fdco+,用以产生介于Fdco和Fdco+1之间的频率。从本质上来说,这种调制将时钟能量扩散到一个宽带中,减少了电磁干扰(EMI)。但这样得到的平均频率的调制时钟,其负面影响的表现形式就是频率的抖动。
DCO频率会随着温度和电压的变化而有所波动,在fDCO=1 MHz时,飘移频率随漂移温度变化的比例为0.1%/℃,飘移频率随漂移电压变化的比例为1.9%/V。因此使用SMCLK作为串口时钟源时,用理论频率计算的分频因子和实际频率分频因子有差异,导致串口无法通信。
|
|