在前面两个章节,我们规划了基本的功能模块和IO分配,并且完成了最小系统的设计,接下来我们就需要按照预定的功能模块一步一步的完成剩余的原理图设计工作。
在STopen开源平台上,我们计划提供功能如下,接下来我们逐一的实现:
每一个电路和对应的参数都是经过严格设计和量产检验的,其中很多设计技巧和参数选择,绝非书本上的教条主义和照本宣科,都具有严格的实战价值,具有极高的参考设计意义,也许能帮助解决你曾经的疑惑和遇到的系统不稳定的问题。
- 系统时钟:高速时钟8Mhz,低速时钟32KHz。
系统时钟部分,我们采用无源晶振实现,一方面无源晶振方案足以满足我们系统时钟精度的需要,另外一方面成本比较低,有最好的性价比。
特别需要留意的是,STM32F103系列的32K时钟驱动电路的驱动能力比较弱,为了保持时钟的稳定性,我们需要在如图所示的位置并联一个电阻R9,使时钟电路比较容易启振。晶振两端的匹配电容经验值一般在20-10pF,具体的数值参考你选择的晶体。
设计完成的时钟电路如下:
- 电池备份,断电保持RTC时钟运行
接下来我们增加一个备份电池,保证系统的实时时钟在断电的情况下可以在一段时间内保持正常工作,图中的二级管起到防止外部电源断开后,电池反向放电的作用。
备份电池可充电电池MS621FEMS(日本精工),该电池充电电流非常小,要注意限流电阻R20的选择,以保证电池长期充电的安全性。由于RTC工作区域的电流比较小(一般几个uA),所以我们采用这个电路能提供足够的电流供应,保证RTC的稳定工作。
很多开发板设计的电路基本上采用了如下方式来设计,这是有很大的局限性的,除非电池的电量足够支持你整个产品生命周期的工作。如果电池放电完成,就意味着没有外部电源的时候RTC就失去了工作,这对于一个可以长期持续工作的产品来说是不可以的。所以我们的电池必须要可以充电,以保持RTC持续的工作。
- JTAG调试接口
要把我们编写的程序下载到芯片运行,我们需要一个调试和下载器,现在常用的是ST-link和J-link,Keil能够支持的类型比较多,如下所示。
其中,我们使用最简单的SW模式,比JTAG模式可以取得最少的连线,简化电路设计。
JTAG的简化版本,只需要一条数据线和一条时钟线,再加上一条地线就可以组成。我们额外的增加一个电源供应引脚的目的,是方便以后生产环节下载程序的时候,不需要从外部电源供电,直接用J-link给目标芯片供电就可以直接烧录程序,简化小批量生产的流程,对于大批量的生产,可以空芯片先烧录好以后再贴片。
- 4线SDIO的SD卡
SD卡部分,我们使用体积比较小的TF卡,提供大容量的数据存储和支持,配合USB接口,可以实现U盘的数据存储和访问。
TF卡的好处是提供了存储器的磨损平衡,我们无需去关心每一个存储单元的寿命问题,可以认为它们每一个数据块具有平均的寿命,从而把设计精力放到系统功能和逻辑设计上来。
SD卡由于在系统中基本上不会长期工作,所以我们增加一个可控电源路径,降低系统的工作功耗,只有在需要访问SD卡的时候我们才需要打开电源。
在SD卡的时钟线路上增加一个电阻,可以降低EMI的辐射,提供更好的安规设计能力。在PCB布线的时候,该电阻要靠近CPU端,才能最大化的起到应有的作用。
SD卡的CPU端信号连接参考第一章的IO配置图。
- USB接口设计
STM32F103提供了一个FULL SPEED的usb device接口,可以帮助我们实现诸如USB键盘,U盘,CD等usb从设备,从而加速数据的传输。
USB电路接口的IO是唯一的,所以我们优先安排,图中的电阻R41非常重要,因为STM32F103内部没有D+线上的软上拉电阻,需要外部对VBUS连接一个电阻,以符合USB规范,识别设备类型和状态。阻值是经过大量不同电脑测试后确定下来的(不同的电脑通过USB的VBUS对外供电能力有差异,USB线材有压价,在设备端不能保证精确的5V电压),以保证提供的电压合适,能够取得最好的兼容性。
USB的D+,D-线上我们串联了一个小电阻,一方面可以降低EMI辐射,另外一方面我们可以对PCB走线阻抗适配的时候进行阻抗匹配,具体数值取决于PCB阻抗设计的时候的偏差而调整,一般在几欧姆到三十欧姆之间选择。
- SPI存储器
一般来说,我们系统里面还会有一些配置数据,运行数据等需要保存,如果支持显示,我们还需要保存字库的字模数据,图片等。这些数据一般在几兆字节,我们不需要存储到TF卡,最经济的方法就是提供一个SPI接口的NOR FLASH来实现这个功能。
NOR FLASH需要我们自己管理每一个扇区的磨损平衡,保证在整个产品生命周期内都能工作在允许的范围内,具体方法和技巧我们在软件设计的时候再细说。
磨损平衡:因为nor flash存储数据需要先擦除再写入,所以我们要最大化的保证对每一个数据块或者扇区的擦除次数平均,并且使其擦除次数在器件允许的寿命次数内,为了达到这个目标,就需要对其进行管理,即磨损平衡管理,本质意义就是每一个块或者扇区的使用都有接近的擦除次数。
本章我们先完成这几个模块的设计,下一章我们再继续完成剩余的电路模块设计。
原创文章,欢迎转载,请注明来源,未经书面允许,请勿用于商业用途。