【经验】32位MCU LEUART位周期抖动大,该如何解决?
近日,一客户反馈,选用了SILICON LABS 32位EFM32系列MCU(典型型号EFM32ZG110),当基于32.768kHz时钟使用LEUART(@9600bps)进行通讯的时候,发现存约1%误码,原因是什么?该如何解决呢?
为了寻找原因,在软件上,我们先是检查了客户软件的配置,无明显异常;后是换为标准例程,问题依旧;之后在硬件上,检查了晶体,精度也是正常;最后,为了发现原因,上了示波器,直接测试波形,具体如图1所示。
图1:串口波形实测图
由图1我们可以明显地看到,波形中的位周期似乎有差异。为此,特意测试了一下周期,详细如下图2。
图2:实测周期
如上两图,显然,LEUART位周期是存在跳动的。最小为92us,最大可以到122us,跳动比较大。
这是什么原因导致的呢?经向原厂咨询,原因如下。
对于EFM32的TX, 是基于32.768kHz的clock产生的。其使用了具有一个5bit分数的clock divider.
因为32.768k/9600=3.41333333333, 其最接近的具有5位小数的是3.40625. 这个数乘以32之后是109, 即0x6d=b01011101.
而这个并不是一个整数, 而是一个在3和4之间的数, 也就意味着所产生的bit的长度有的是3个LFXO clock, 有的是四个LXFO clock. 也就是截图中看到的92和122uS, 如果32.768kHz的LFXO足够准确, 应该是91.575uS 和122.070uS。
而这个5位的小数, 意味着32个bit连起来的话, 其pattern会重复一遍。这个不太好解释, 比如这里的小数部分为0.40625,乘以32就是13, 也就是意味着在32个bit中, 有19个是91.575nS, 而另外13个为122.070uS. 这也是你看到的10个bit 中有6个92uS和4个122uS 的原因. 因为0.40625接近0.4, 小于0.5, 也就意味着你看到十分之4的122uS.
正如reference manual里面所说(在讨论发送jitter的那一节). 你可以通过32.768kHz的clock产生一个序列, 同时产生一个理想的9600Hz的bit的边缘. 然后用32.728kHz产生的clock序列中的上升沿中最接接进9600 bit边缘的上升沿来生成efm32生成的tx信号.
也就是说, 这里的efm32 tx每个bit的边缘he理想的边缘不会相差多于半个32.768 clock 的长度. 也就是大概15.258uS. 这对于一个9600的bit的长度104.166uS来说大概占到1/7.
所以这个jitter和由于clock source 频率不准带来的jitter并不一样. clock frequency 不准会使得误差积累, 比如2% clock 频率误差会使得第10个bit偏移20%的bit时间.
一般情况下对于接收端会采取不同的采样策略, 比如USART在UART模式可以在每个bit不同时刻采样几个,然后看采样到的0个数多还是1个数多. 这里不知道和efm32通讯的另一端采用的那种策略. 比如如果采用在bit的中间位置采样, 都不会出现什么问题.
由此可见,这个位周期的跳动,主要是因在32.768kHz低频下、波特率产生机制的导致的。
那么如何降低为周期跳动呢?有如下四个方案:
方案一:晶体不变,将波特率设为32.768k/3,获得整数分频;
方案二:波特率不变,将晶体调整为9600*3;
方案三:让功耗迁就波特率,在LEUART工作时、则MCU工作在EM1模式下,让LEUART基于HFXO工作。
方案四:
1、假如工作在发送状态下,我们可以直接在EM1模式下发送;
2、假如工作在接收状态下,可按如下方式配置:
1)进入EM2前,将LEUART-RX脚,配置为INT0输入脚、即外部中断输入脚,并屏蔽LEUART功能;
2)如此,当LEUART外部有串口数据进入时,则会唤醒EFM32ZG,此时将时钟快速切换到HFXO,并重新配置起LEUART功能;在HFXO下,9600bps将是非常准确的。
如此,即能在EM2模式等待串口数据,既能实现低功耗特性,又能使数据不会出现错误,还满足LEUART功能。
综上所述,因32.768kHz时钟低,且对于9600bps来说,无法实现整数分频所以导致了位周期抖动。但本文所提供的四个方案,可完全解决该问题,用户可以根据需要来选择合适的方案。
世强元件电商版权所有,转载请注明来源及链接。
- |
- +1 赞 0
- 收藏
- 评论 5
本网站所有内容禁止转载,否则追究法律责任!
相关推荐
【经验】如何使用32位超低功耗MCU外设反射系统功能?
外设反射系统(PRS)是 Silicon Labs EFM32系列MCU专有的外设互联总线,它允许不同的外设无需CPU干预即可直接相互通信。
设计经验 发布时间 : 2019-09-02
【经验】简述32位MCU EFM32/EZR32的USB-UART引导加载程序的编程、验证、安全命令的使用
引导加载程序使用户能够通过UART或USB CDC类虚拟UART对EFM32或EZR32进行编程,而无需调试器,故本文旨在指导用户如何在EFM32或EZR32器件的使用中去引导加载程序。除了引导用户应用程序之外,它还提供了破坏性写入模式,允许用户覆盖引导加载程序,以便整个闪存都用于用户应用程序。还可以通过CRC校验来验证存储内容,并且可以启用Debug锁定来保护IP。
设计经验 发布时间 : 2018-12-14
【经验】32位MCU的LDMA实现ADC至RAM的数据传输调试方法
Silicon Labs的EFM32PG/ EFM32JG系列32位MCU具有超低功耗、高性能、丰富的外设等特点,其 LDMA相比于series 0的DMA具有更多的传输方式,更适合应用于电池供电的产品。
设计经验 发布时间 : 2018-02-08
世界上最节能的微控制器EFM32之十大低功耗奥秘
Silicon Labs EFM32 32 位微控制器系列是世界上最为节能的微控制器,特别适用于低功耗和能源敏感型应用,包括能源、水表和燃气表、楼宇自动化、警报及安防和便携式医疗/健身器材。本文着重强调10个Silicon Labs32位MCU功耗低的因素。
新产品 发布时间 : 2016-07-11
【应用】32位MCU在中高端音频处理系统中的应用
音频信号处理涉及多方面,如采集、去除噪声等等,普通MCU很难用一颗芯片集成如此众多的功能。
新应用 发布时间 : 2017-07-18
如何读取EFM32系列32位MCU的多通道AD扫描采样数据?
EFM32系列单片机ADC的数据保存寄存器有两个,一个是单通道模式的采样数据保存寄存器,一个是扫描模式的采样数据保存寄存器。如果使用多通道扫描采样,那么每个通道采样完成后会产生一个ADC扫描模式中断,用户需要在中断里面读取该通道的扫描采样数据以便存储下一个通道的采样数据。建议使用DMA读取方式,将DMA的触发源设置为ADC的扫描模式事件,这样就可以实现不用进入ADC中断以及MCU的参与即可完成ADC扫描采样数据的保存和读取。
技术问答 发布时间 : 2017-05-05
【产品】8位、16位、32位MCU究竟该如何选择?
本文介绍8位、16位、32位MCU的差异特性。
新产品 发布时间 : 2016-04-02
【应用】1MByte Flash空间 32位MCU助力无线中继器数据传输
Silicon Labs EFM32JG系列MCU,采用功能强大的 32 位 ARM® Cortex®-M3 内核,EM4H 休眠模式(128 字节 RAM 保留)功耗只有0.39uA,集成AES、ECC 和 SHA 的硬件加密引擎和真随机数发生器(TRNG)
新应用 发布时间 : 2018-03-06
32位MCU EFM32LG330在上电时,其IO会比VDD先上电,从而导致MCU工作异常,应如何处理?
解决方法如下:1、最根本的解决方法,通过调整滤波电容或供电途径,确保VDD先于IO口得电;2、当出现死机时,可以通过拉低复位管脚,来确保解除死机状态。
技术问答 发布时间 : 2017-05-05
【经验】EFM32系列低功耗32位MCU芯片加密详解
本文主要介绍以Silicon Labs EFM32系列低功耗32位MCU为核心的方案打造加密系统。
设计经验 发布时间 : 2017-10-27
如何为Silicon Labs 32位低功耗MCU EFM32GG230F512实现基于RTC的软件无滴答日历?
在Silicon Labs 32位低功耗MCU EFM32GG230F512上实现软件方式的无滴答日历,可以通过使用日历标准C库 time.h, 在time.h中实现的timer()函数基于RTC计数值来计 算日历时间。
技术问答 发布时间 : 2017-10-10
Silicon Labs EFM32系列32位低功耗MCU Cortex系列微控制器采用的软件接口标准CMSIS有哪些特性?
嵌入式系统越来越复杂,开发和软件测试的工作量也显著增加,为了减少开发时间并且降低产品中存在的风险,软件重用已经越来越普遍。为了各种软件产品间的配合,ARM同各大 微控制器供应商、工具供应商和软件解决方案提供商一起开发了CMSIS,一个涵盖了大多数Cortex-M处理器和Cortex-M微控制器产品的软件框架。 CMSIS的设计目标和特性包括以下几点: 1、提高软件的可用性。 2、提高软件的兼容性。 3、独立的工具链特性。 4、开放性。 5、易用性。
技术问答 发布时间 : 2017-10-10
EFM32系列低功耗32位MCU GPIO的最大翻转速度为多少?
Siliocn labs低功耗32位MCU EFM32 GPIO的最大翻转速度为系统时钟的1/6。例如,当主频为32MHz时,GPIO最大翻转速度大约为5.3MHz
技术问答 发布时间 : 2017-10-10
使用32位MCU EFM32内部28Mhz振荡器,可否做到捕获500KHz左右的脉冲信号?
可以利用Timer的 input capture mode, 通过计数捕获时候的counter value可以得知脉冲宽度,可以使用内部28Mhz来捕获500Khz脉冲信号。
技术问答 发布时间 : 2017-05-05
32位MCU EFM32ZG是否可以实现Flash分区烧写,这样就可以为设备预留固定ID区域,不需要再外接EEPROM了。
Siliocn labs低功耗32位MCU EFM32ZG可以实现Flash分区烧写,使用Simplicity Studio的flash烧写就可以实现,可以支持为固定ID预留存储区域。
技术问答 发布时间 : 2017-10-10
电子商城
现货市场
查看全部2条回复