目前市面上有许多的ARM核心板或ARM核心模块供应商,通过把ARM最小系统和电源管理,无线等功能的深度集成,让用户最大程度简化设计。ARM核心模块不仅仅是个硬件,通常厂家会提供开发板可用的标准的固件,甚至是开放全部源代码,让用户方便设计自己的板子。Digi的SOM是这一产品的佼佼者,不仅集成了无线,还提供一个直接使用的协处理器用作硬看门狗,RTC,接口扩展等功能。
基于核心模块可以简化ARM芯片的硬件设计,但仍要遵循一定的设计流程,让厂家的开发工具协助检查,以尽可能减少发生错误的风险。本文以Digi的ConnectCore系列片上系统核心模块CC6UL为例。
一、确定项目所需要的接口数量和类型,并用Smart IOMUX工具生成设计文件,为引脚定型。
其实很多时候软件可以大大简化设计工作,有些用户喜欢直接看spec,参考开发板自己手动选择外设接口和GPIO的引脚。如果你对开发板的改过不大,这也许没什么问题。当你需要把接口用到极致时,可能就容易发生问题,因为一些引脚是复用的或是已经在模块内部使用,或是从CPU硬件特性来说,某些引脚不能用作GPIO等,因此学会用厂家的设计工具进行检查很重要。
Digi的SmartIOMUX就是这样一种辅助设计工具,用户可以选择是基于邮票孔的引脚,或是全部的LGA引脚来设计自己的板子。你可以全新开始一个设计,自己添加各种所需的接口,软件会自动检查和分配引脚资源,确保选对可用的引脚,并自动生成匹配的设备树片段。你也可以基于开发板的设计模板来进行接口的删减和更改,完成设计后,可以保存整个设备树文件,这意味着接口的设备树驱动也做好了,剩下的就是按这个设计所用到的引脚去画图,完成设计。
此外,由于系统开发工程师需要根据所用的接口和引脚功能来确定设备树文件。利用Smart IOMUX工具可以直接生成未来板子所需的设备树文件,可以避免大量的驱动开发调试工作。
二、参考Digi开发板的参考设计
所有资料包括Altium原理图工程文件均可在这里下载。
Digi Embedded Yocto页面是文档的主入口,模块的硬件参考位于这个左侧的Hardware栏目中。
三、确保recovery所需的接口设计到板子上
一般ARM核心板可以从内部的flash启动,官方会提供固件的烧写方法或程序。比如Digi的模块,出厂就带有UBoot,可以直接在UBoot下用卡刷或是网络等方式来刷写官方默认或是自己修改定制的固件。有时因为调试的原因,或是刷入不正确的uboot,有可会导致flash中的uboot没法跑起来,这时有个recovery接口就很方便了。NXP官方的ARM芯片一般采用USB_OTG1作为下载恢复接口,在flash的UBoot不能用时,可以从电脑直接通过USB OTG下载UBoot到模块的RAM中启动,Digi的SOM一般都支持USB OTG接口进行recovery操作。此外,有许多型号也支持从uSD卡启动,如果没设计这个USB口,也可以用uSD卡作为启动源来恢复flash中的UBoot。因此在设计中至少要保证有除内部flash以外的其它可选启动源,以防止意外发生时,模块变砖时没有恢复手段。注意:CC6UL仅支持flash和USB OTG1两种启动方式,其它Digi的模块则都支持flash,uSD,USB三种启动源。
四、阅读checklist并防止Bootstrap电路和设计要求不一样
Bootstrap电路是ARM芯片上电时,根据引脚配置选择启动源的电路,如果相关引脚也同样在启动完成后用作IO口,请用POR_B等总线开关隔开。另外,请务必根据Schematics design checklist和CC6UL Bring-up Guidelines两份文件检查电路,如果出现上电U-Boot起不来,很大的可能性是没有遵从Bring-up Guidelines中列示的要求,因此在设计时要充分检查电路,再生产试样。
五、防止任何模块启动前的IO口的电源轨先加电问题
ARM处理器一般需要遵循一定上电时序,这是因为处理器上电过程中,在还没完全起来之前有个很短的时间,其IO端口还处于未确定状态,一般需要隔离以保护CPU,这是防止外部的IO电路对未启动好的MCU引脚形成钳位或短路,而这些都有可能会导致启动失败。Digi的SOM模块内部已经用MCA和PMIC做好时序,但和外部电路联接这一部分,要注意隔离。一般POB_B这个信号线可作为外部IO延时加电的开关。
六、提供流片所需的指导文件
在这里可以找到生产所需的各种文件