嵌入式系统最小硬件组成详解:类比手机配置解读
选择嵌入式核心板,就和我们通过看配置挑选手机一样,重点关注的内容非常相像。
嵌入式设备犹如自定义的计算机类设备,具有强烈的可配置以及定制的性质,但是这里面又有一部分都通用的,被称为最小系统或者核心板。
嵌入式最小系统组成,类比手机配置:处理器、时钟、电源、存储、通用接口和调试接口
处理器
角色:对应手机内核处理器,嵌入式设备上有如STM32和ARM等微处理器,作为系统的核心,负责执行指令和控制其他硬件部件。
主要参数:
(1)可以是单核或多核处理器;智能手机等常使用多核处理器,分别用于处理不同的任务。
(2)CPU核的框架可能是ARM或MIPS,当前智能硬件工业使用ARM为主。
(3)除了CPU核还可能包含GPU核、DSP核。
举例:
国产芯片RK3399为例,CPU处理器采用big.LITTLE大小核架构,大核选用的是双核Cortex-A72,四小核选用的是Cortex-A53
时钟
角色:类似人体的心脏提供脉搏,芯片内部时钟源使用的RC振荡器,嵌入式设备上的外部时钟源使用的时钟晶振,常见的有32.768KHz低速晶振和24MHz高速晶振,为整个系统基本的时间控制和同步机制,为包括处理器和外围电路运作提供所需的时钟信号。
嵌入式设备时钟系统会包括多个时钟源和时钟分频器/倍频器,用于满足不同外设和内部电路的需求。
CPU工作频率(主频)通过时钟源倍频、分频得到。通过修改系统寄存器来完成设置。
时钟子系统指提供给SOC各外设组件时钟的树状结构。提供时钟模块叫做provider,包括时钟源、倍频、分频、多路选择、门控制,使用时钟的模块则称为consumer。
举例:
#cat /sys/kernel/debug/clk/clk_summary //查看时钟树
每个i2c都有两个时钟,一个是控制时钟clk_i2c,控制时钟只能从PLL分频得到;另一个是配置时钟pclk_i2c,配置时钟是从pclk_perilp1而来,自身只是门控制开关,不能进行频率修改。
电源
角色:类似人体供能单元,嵌入式设备有电源电路,低压差稳压器LDO把标压转换为系统电压,为系统提供稳定的电力供应。
供电有两种方式:一种是GPIO供电,另一种就是使用电源管理芯片管理供电、电源转换、电压调节和电源监控等。
类比手机的强制重启,复位电路设计中,通过复位芯片(如MAX811等)实现上电自动复位和手动复位,使系统可以在异常情况下能够正确重启。
电源管理中最重要的机制是Regulator电源机制,通过软件实现,Regulator是指在为其他模块供电的电源型设备,而被供电的模块则称为是consumer。
举例:
比如RK平台的电源管理芯片RK808,通过I2C控制实现了的三种工作模式的管理,PMIC通过normal模式管理系统正常运行;通过sleep模式管理系统休眠时需要待机来减低自身功耗;通过Shutdown模式管理系统下电流程。通过DTS设备树进行相关配置。
存储
角色:对应手机存储,嵌入式设备有如RAM、ROM、Flash等类型,存储操作系统、应用程序和数据。
手机配置中的内存是DRAM,存储指的是NAND flash;
内部存储DRAM作为系统运行所需的存储,存储系统和堆栈信息;内部部存储flash存储操作系统和用户程序;外部存储扩展系统的存储容量,如SD卡、硬盘等用于用户自定义存储内容。
举例:
使用DRAM(动态随机存取存储器)技术的包括DDR和LPDDR,当前处理器芯片片内中一般集成了DDRx的控制器。
使用nand flash技术的包括手机的存储和电脑的固态硬盘。
存储子系统MTD,为硬件和系统上层软件之间提供了一个抽象的接口,便于驱动开发,MTD的实现代码在/kernel/drivers/mtd/目录下。
SD卡存储是由早期的MMC演变而来的,通过软件设置,当插入SD卡时,自动为其挂载文件系统。软件中mmc卡的驱动文件是kernel/include/linux/mmc/host.h。
通用接口
角色:通过通用接口,才可以连接外部设备比如传感器、执行器、显示器等,实现最小系统与外部环境的交互。
常见类型:并口如GPIO,自定义外部连接;串口如UART;通信接口如以太网接口、USB、I2C、SPI等。
举例:
RK3399包含有五组可复用的GPIO接口。每组通过编号划分IO接口名,可通过软件设置上拉、下拉或者中断模式。
控制GPIO有两种方法,传统的做法时写一个单独的驱动程序去控制GPIO,另一种是在嵌入式系统中借助虚拟文件系统去控制GPIO。
#echo out > /sys/class/gpio/gpio12/directon //设置GPIO的输入或者输出的方向
调试接口
角色:类似生病扎针,嵌入式设备调试接口比如JTAG或者ADB接口,通过调试接口对系统进行调试和编程操作。
区别在于嵌入式开发一般会留足开发接口,比如串口以及USB。串口已经逐渐被淘汰,但台式机基本还是会保留串口。通过USB使用ADB功能,用于命令行基础调试。
首先要配置USB功能,可以debugfs文件系统查看USB设备信息:
#cat /sys/kernel/debug/usb/devices
小结
更多更新请关注《森哥谈成像技术》
结尾森哥总结,手机作为一类嵌入式设备,理解手机配置,就理解了嵌入式设备最小系统的构成,有助于我们聚焦核心,为项目挑选到适合的平台:
(1)ARM作为CPU内核,CLOCK时钟模块作为RK3399外部时钟源;
(2)PMU模块控制系统的整个电源管理,保证系统的有序、合理供电;
(3)DDR3存储模块为系统运行提供动态存储空间;SD卡存储模块作为主要的外部存储空间;
(4)GPIO作为基本的输入输出接口提供基本的通用IO功能;
(5)通过USB ADB模块实现Android程序的下载和调试。
作者:硬件学长森哥