概述
- CPU(Central Processing Unit):
CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。
众所周知的三级流水线:取址、译码、执行的对象就是CPU,差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。 CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。
- 微处理器 MPU (MicroProcessor Unit):
MPU是由计算机中的CPU演变而来。 与CPU的区别在于,它只保留了与嵌入式应用紧密相关的功能硬件。目前主要的嵌入式处理器类型有ARM、MIPS、PowerPC、68000系列等。我们经常说ARM就是MPU。MPU从一开始
就定位了具有相当的处理和运算能力
,一般需要运行较大型的操作系统
来实现复杂的任务处理。因此这就决定了MPU应该具备比较高的主频,和较为强大的运算能力。一般地,MCU偏向于低成本低功耗,MPU趋向于高性能。目前的MCU和MPU的界限在逐渐模糊,MCU的主频也在不断提高,外设不断增加。在远程控制,消费电子或对实时要求高的场合使用MCU的多一些。MPU注重通过较为强大的运算/处理能力,执行复杂多样的大型程序
,通常需要外挂大容量的存储器
。
- 微控制器 MCU (MicroController Unit):
MCU俗称单片机,他将整个计算机系统集成到一块芯片中,是
一块集成电路芯片
,是个完整的计算机,集成Flash、RAM、总线逻辑、定时器/计数器、看门狗、I/O、PWM、ADC等各种必要功能模块和外围器件。(里面有负责处理指令的cpu(也可以是dsp或者gpu),负责跑程序的ram和负责存数据的rom.由这三大件和其他的外部接口(像内存、计数器、USB、A/D转换、UART、PLC、DMA等)组成,就是微型计算机),MCU实现功能靠的是外围的一些硬件接口。等于城市的行政区,功能完备。芯片的话通常都不能编程,因为芯片不是计算机。它就是一块集成电路板子而已,从MCU开始就是可以用汇编和C来编程的.
MCU如果没有系统的话,那一次就只能运行一个控制回路,即运行一个线程。这种东西叫裸机
,工作就是靠的所谓的裸机接口。任何其他的程序要得到服务,都得等这个线程完毕才行。这时候它就退化为一个最简单原始的,所谓微控制器,controller;如果它MCU有了操作系统,那么它就可以搞多进程来操控多线程来运行。(这就是为什么操作系统5大件其中一个就是进程管理)
在MCU上完成的任务大多数是一些简单的刺激-响应式的任务
,而且任务类型单一,任务执行过程简单。在这种情况下一般不需要MCU去执行功能复杂、运算量大的程序,而通常不需要运行大型操作系统来支持复杂的多任务管理。这就造成了MCU一般对于存储器的容量要求比较低。
MCU通常运行较为单一的任务,执行对于硬件设备的管理/控制功能。通常不需要很强的运算/处理能力
,因此也不需要有大容量的存储器
来支撑运行大程序。通常以单片集成的方式在单个芯片内部集成小容量的存储器实现系统的“单片化”。MCU 芯片把中央处理器的频率与规格做适当缩减,并将内 存、计数器、USB、A/D 转换、UART、PLC、DMA 等周边接口,甚至 LCD 驱动 电路都整合在单一芯片上形成芯片级的计算机。
- 片上系统 SoC (System on Chip)
MCU只是芯片级的芯片,而SoC是系统级的芯片,它既MCU那样有内置RAM、ROM同时又像MPU(微处理器)那样强大,不单单是放简单的代码,可以放系统级的代码,也就是说
可以运行操作系统(以LinuxOS为主)
。可以这样对比来看:MCU只是芯片级的芯片,而SoC是系统级的芯片,它集成了MCU和MPU的优点,即拥有内置RAM和ROM的同时又像MPU那样强大。SoC 在一个芯片
里就实现了存储、处理、逻辑和接口等各个功能模块, 而不是像板上系统那样,需要用几个不同的物理芯片通过 PCB 上的金属走线连接来实现。与板上系统相比, SoC 的解决方案成本更低,能在不同的系统单元之间实现更快更安全的数据传输,具有更高的整体系统速度、更低的功耗、更小的物理尺寸和更好的可靠性。
SOC就是MCU+外围控制器,由很多MCU组成,MCU在SOC上充当控制器,留出引脚和SOC主体进行沟通,SOC实现功能靠的是外围控制器。以前的由多个MCU协同干的事情被集成了,MCU没有了,取而代之的是对外的IO引脚,连接IO引脚就可以实现交互,完成以前MCU的功能。好处是集成化程度更高,体积成本等可以得到压缩。
低端的SOC就是内部集成了MCU+特定功能模块外设。
高端的SOC是内部集成MPU/CPU+特定功能模块外设.
- 系统级封装 SiP(System in Package)
从架构上来说,它会将处理器、存储器、电源管理芯片,以及无源器件等不同功能的芯片通过并排,或者叠加的方式封装在一起。它跟SoC一样,都可以在芯片层面上实现产品的小型化和微型化。不同的是,SiP是将多颗不同的芯片封装在一起,SoC是一颗芯片.
嵌入式处理器正在朝着一个高集成度的趋势发展——
MPU → MCU(MPU + 外围器件)→ SoC(MCU + 系统)→SiP(多SoC)
车载行业应用:座舱/自动驾驶是主要市场
通常MCU只能完成较少的任务,例如开启智能雨刷,或是下车后自动落锁等等。因此在豪车中可能拥有数百个 MCU 来实现各种智能化功能
。汽车里SOC 主要负责数据处理
,未来部分 MCU 功能会被整合到 SOC 芯片中,ECU 数量减少导致 MCU 的用量 下降,来随着集中式架构落地,算力向整车计算 平台集中,汽车 MCU 的使用量又将逐步降低至 50-60 颗左右。
域控制架构下控制芯片将形成“MCU+SOC”态势
- MCU开发工作:
以既有MCU又有MPU的车载模块为例,MCU一般做这些事情:外围设备控制、数据采集、简单的数据解析、数据传递。
外围设备控制往往是通过GPIO/IIC/SPI/UART等和外部设备通信,这部分没多少灵巧的“开发”工作好做,多是一些对经验的依赖较高,拿示波器看波形、配寄存器、调参数这样的工作。MCU开发深入的一个主要方向就是驱动,做驱动很少需要“写代码”,基本只需要“改代码”、调参数。
MCU受限于性能,能做的业务非常有限。从GPIO/ADC/CAN等采集来的原始数据,按比特段解析、简单做个格式转换,往往就要发给MPU/Modem这类的芯片上去处理。MCU其实主要做的是格式转换,对底层链路的数据做一个封装,按格式打包好之后发出去即可。具体的处理逻辑、复杂的事情都不由MCU自己做。
MCU上也有一些可做的事情,比如开发操作系统等中间件。但是没有几个企业会需要你做
这些事情,因为需要稳定性的会找专门的供应商,需要降低成本的网上也有大把的开源代码。
在确定了OS之后,MCU开发的模式化是很清晰的。多少个任务,要做多少件事——可以非常清楚的定义。任务间通信的机制也没有多少多余选项,因此,很多你觉得有点意思的代码都不需要你自己来写,
AUTOSAR:供应商提供一个SDK,一个配置工具,通过一系列琐碎低效的配置之后,给你生成出来一堆代码,你所需要做的,就是把业务代码填写在工具给你生成的一个个回调函数的函数体中。
基于Linux的MPU开发:Linux系统本身够复杂,可研究的东西更多;Linux上可用的开发技术更多,你甚至都可以用多种编程语言去开发;只有做Linux驱动开发需要接触硬件,运行Linux的MPU性能更强,可以应用更复杂的算法;Linux开发的可配置性更低一些,你可以在更长的时间里去做一个敲代码的,而非一个在配置工具上点鼠标配参数的。
这并不是说做MCU开发就比MPU简单。只是Linux的开发后者你更多需要的是“代码”层面的编码和调试技术,前者你可能还需要很多很杂的东西,比如你要能读原理图、要了解很多外围设备的协议、读器件手册、用示波器定位故障……做嵌入式Linux,可以专注于软件开发,一直“写优雅的代码”;做MCU开发,则是很难达到这个目标的。
真正厉害的工程师不会被特定的技术领域所限制,无论是Linux,或者是裸机MCU程序,对他们来说都只是解决问题、完成项目的工具而已。
- 做一个功能简单的手环,一个简单的单片机运行一个前后台系统再增加消息机制和状态机足矣。
- 做一个带联网功能的车机系统,一个蓝牙音箱,则稍微复杂的单片机运行一个RTOS以减少应用逻辑设计的复杂度,足矣。
- 做手持设备,路由器,智能手表,则需要 Linux、安卓丰富的组件来支持,减少项目的开发成本。
最后
以上就是热情月亮为你收集整理的MCU_MPU开发的全部内容,希望文章能够帮你解决MCU_MPU开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复