站在2018看单片机和嵌入式芯片方案选型和发展趋势

楔子

我时常在想,现代社会发展变化速度之快超越了不少人的认知。罗胖子说跟不上时代要交认知税,颇有道理。半导体和IT行业又是旋涡中心,发展更加快,其实想一想其余行业的创新(美团外卖、滴滴打车、微信社交、淘宝京东电商,以及最新的新零售自动售货机、自动驾驶汽车等)本质上都是半导体行业的创新驱动的,都要靠先有芯片,先有配套的软件资源和开发人才,才能有人在这些行业创新。linux

入坑嵌入式开发多年的我,面对芯片及其相关的软件开发技术的快速发展变化,常常会去思考,这些发展变化的内在推进力和外在合理性在哪里,这些发展变化对咱们有哪些启发和引导,身处旋涡中心应该何去何从,才能保证本身不被历史洪流冲走,才能不断提高本身的价值。android

单片机

单片机是中文名,对应的英文名称是“Single Chip Microomputer”,不少人可能奇怪平时不是都说MCU(Micro Control Unit)吗?其实MCU准确翻译过来应该叫微控制器,如今不少中文书籍都用这个词,不用单片机了。由于单片机这个词是不少年前的概念了,在那个年代半导体工艺还在起步阶段,集成能力不好,每每是CPU一个芯片,SRAM一个芯片,Flash一个芯片,须要中断的话又得有个专门处理中断的芯片,因此一个完整可用的计算机系统是不少个芯片(Chip)作在一个PCB板上构成的。编程

单片机呢?就是在一个芯片(Chip)上集成了CPU、SRAM、Flash及其余须要模块,在一个Chip上实现一个微型计算机系统,因此就叫Single Chip Microcomputer,也就是单片机了。其实从这个角度来说,单片机这个词如今已经没意义了,由于如今的半导体工艺早就很厉害了,如今你买到的全部都是“单片机”,根本不存在分离式的所谓“多片机”。并且现代的单片机不但集成了CPU、SRAM、Flash等微型计算机不可少的部件,并且大多集成了不少内部外设,如Nand控制器、LCD控制器、串口通讯、定时器、RTC等等,因此如今的单片机其实应该叫SoC(System on Chip)。微信

英文是很准确的。这里有好几个词你能够体会下各自含义:microcomputer、computer、system、microcontroller。不严格区分的话这些词不少时候能够互相替换和通用的,可是严格说其实各自有不一样代指的。譬如computer,指的就是电脑,你能够理解为就是电脑,譬如笔记本、台式机这些。固然不少年前的电脑很庞大很笨重,因此computer就是指的这种有机箱外壳,有键盘鼠标,很庞大笨重,通用性强的电脑。而microcomputer指的就是单片机这类东西,它也是一个独立的电脑系统,有CPU和内存和外设这些,能跑计算机程序。可是他相对于computer来讲体积很小,并且不是通用的而是专用的,因此叫microcomputer。system呢?更倾向于整个系统,也就是说system=microcomputer+各类外设。简单理解就是,当串口、LCD控制器等模块进入了Chip内部时,整个microcomputer就成为system了。因此其实system才是更有意义,更适合现代单片机芯片的一个名字。因此如今咱们都把芯片叫SoC,这个名字更有价值。那microcontroller呢?如今不少单片机厂商都把本身的单片机叫microcontroller(微控制器),其实我我的理解,以为microcontroller的重点在于controller,也就是说他们想强调这个chip中集成的system是一个controller,擅长控制。而不是一个DSP(擅长运算)。网络

嵌入式

嵌入式的全称是嵌入式系统,英文是Embeded system,因此能够看出嵌入式是一个system。为何叫嵌入式呢?这里的嵌入指的是咱们把这个system(硬件上表现为一个Chip)嵌入到某个设备中去。譬如冰箱的板卡上的芯片就是一个嵌入到冰箱中的system,负责控制用户按键、冰箱照明灯、制冷系统等。能够看出,嵌入式系统这个名字主要是从芯片在使用时的组织形态来命名的。因此从这个角度讲,只要是被嵌入到设备中的芯片均可以被叫作嵌入式系统。架构

那这个范围太宽了,说真的你很难找到不属于嵌入式的system······因此我常常以为嵌入式这个名词根本是废话,根本没意义。好在这个理解只是广义上的嵌入式的定义,可是咱们平时讲嵌入式大多时候是从狭义上理解的。app

狭义上讲,嵌入式是为了区别于单片机。咱们常常把芯片中不带MMU(memory management unit)从而不支持虚拟地址,只能跑裸机或RTOS(典型如ucos、华为LiteOS、RT-Thread、freertos等)的system叫单片机(典型如STM3二、NXP LPC系列、新的NXP imxRT1052系列等),而把芯片自带MMU能够支持虚拟地址,可以跑Linux、Vxworks、WinCE、Android这样的操做系统的system叫嵌入式。因此linux WinCE等也常被叫作嵌入式操做系统,就是这么回事。你仔细回顾下,其实大部分人在讲单片机和嵌入式时都是从狭义角度出发的,并不是广义。框架

单片机的技术和市场情况

单片机是出货量最大的一类计算机。这个很好理解,由于单片机用途太普遍了,全部家电内置的控制系统几乎都是单片机的,这个数目就很惊人了。还有各类公共设施,工厂自动化设备等几乎也都是单片机控制的。单片机的厂商和品类也是很是多,我下面列举几类经常使用的。ide

  • 8位和4位机。这类单片机性能低配置低,可是优点是价格便宜。因此不少低端家电产品都会用到,小家电是这类单片机最大的市场。为了下降成本,这类单片机不少只能用汇编编程(固然近几年不少也提供了C编译器),不少芯片采用bounding封装(就是芯片内核直接贴在PCB上而后用黑乎乎硬胶黏住,你们玩过LCD1602的看那后面那个圆盘型黑色的就是)。作这类产品的之前都是台湾一些小芯片厂商。这些年中国大陆也涌现了不少这类芯片厂商,这些单片机行业大多对标某个具体应用领域,对行业需求很熟悉,直接推出适用这个行业的解决方案。外行的人可能根本都没据说过这种单片机的型号和相关信息。总的来讲,这属于比较低端的行业,不太建议你们学习和进入。尤为如今中国在搞产业升级,落后的传统家电产品不断降价还卖不出去,相反各类高端功能和外观的“产业升级”型家电产品利润很高。因此这种适用于传统老旧电子产品的芯片和技术其实并不值得去投入。
  • 51单片机。其实51单片机也是8位机,之因此单独拿出来讲是由于51单片机实在太出名了。实际上当年单片机百家争鸣的时候(大约1980年代吧)51单片机只是其中一种,还有不少其余很厉害的,惋惜都被时间给雨打风吹去了。51单片机之因此出名并活到如今,是由于Intel后来开放了51内核的版权,因此不少公司不少人能够毫无顾忌的使用它而不担忧付费或版权风险。实际上到了如今(2018年),51单片机已是很老很没有技术优点的解决方案了,可是为何还在大量使用?主要有如下几个缘由:一是大量存量项目和存量开发者,这些人很熟悉51单片机,甚至不少老工程师可能只会51单片机,不少老的项目也不可能再去从新开发因此沿用了51单片机。二是51单片机也够便宜,不少对性能没有过多要求的产品干脆就用51也挺好。三是51内核开放,因此不少须要内置单片机核的SoC(譬如不少电容触摸屏芯片,不少指纹识别芯片等)就会选择用51核,不要钱还够用嘛,不选这个选谁。不少同窗问我还要不要学51单片机?我认为仍是要学。一个缘由是51单片机的开发用到的技术技能在开发别的单片机时照样有用,因此学了51未来再学其余的也会快不少,时间不会白花的。另外一个缘由是确实有时候实际开发也会遇到用到51单片机的,因此学会了也算是个拿得出手的技能。因此若是你要学习单片机开发,从51单片机入手绝对不会错。可是要记得不要沉迷于51了,要迅速学会51单片机后,迅速继续学习更现代更实用的其余单片机(譬如stm32)。不少人学会51后就不动了,这就好像幼儿园毕业就不继续读书了同样,是不对的。
  • STM32单片机。终于到了STM32这个当红辣子鸡了,ST于2007年发布了第一款STM32,至今已经11年了。STM32是ARM Cortex-M内核的单片机,实际上一样使用ARM Cortex-M系列内核的单片机还有不少(譬如NXP的LPC系列,原Freescale的K60系列,台湾新唐的M051系列,国内如兆易创新的GD32系列等),STM32只是其中的表明做而已。ARM这些年风头很强,在application级别的SoC中大胜Intel,如今手机行业的芯片都被ARM吃掉了,MIPS之类的更是被压的生不如死。在单片机领域,ARM的Cortex-M系列(M0、M三、M四、M7)也是大获全胜,不少半导体厂商都放弃了本身原来的架构转而作ARM内核的单片机了。怎么说呢,我的以为ARM内核的单片机很适合当前时代,尤为STM32这种,无论硬件配置仍是开发工具都深得市场承认,普及度愈来愈高。强烈建议大学学单片机就学STM32,会玩STM32颇有价值。至于GD32之类国产的相似STM32的单片机,我认为后面会愈来愈强,甚至会主导市场把洋品牌赶出中国。这些芯片的开发方式也很类同于STM32,因此会了STM32开发很容易切过去,不用担忧。
  • 其余单片机。我指的是PIC、ATmega、MSP430、STM8之类的,这些不是很熟悉因此不予详细论述。总的来讲,这些单片机性价比都不错,在各自领域都有必定竞争力,可是仍是不如STM32使用领域宽广。因此除非是公司研发用到,不然不建议主动学习。
  • 高性能高价格单片机。这里我特指的是如STM32F七、STM32H七、NXP imxRT1052之类的单片机。这类虽然是单片机,可是性能比通常单片机强劲不少,外设也复杂不少,甚至须要外接SDRAM来提供更大内存,外接SLC Nand或Spiflash来提供存储。同时从价格角度讲这些单片机大多在人民币30元以上,甚至高达100多元。这些真的是单片机中的战斗机,价格都能吓死人了。对于这类单片机,我我的其实很不看好。其实写这篇长文,就是想解释我为何不看好这类单片机。感兴趣的同窗能够继续看下文分析。

    嵌入式的技术和市场情况

    嵌入式领域目前最火的就是ARM+linux和ARM+android。
    芯片都是基于ARM的,低端的有ARM九、ARM11,高端的有Cortex-A七、Cortex-A八、Cortex-A九、Cortex-A5三、Cortex-A57等。从单核心到双核心、四核心、八核心都有。厂商也一大堆,国产进口台产等都有。覆盖面也广,消费级、工业级、车规级都有。工具

嵌入式级别的ARM由于有MMU因此能够很好的跑复杂OS,所以虽然芯片自己也能够裸机运行,可是基本没有人用这类芯片来跑裸机或者RTOS的。都会上操做系统。简单说,若是产品不须要华丽美观的人机界面就上linux(譬如路由器、网络摄像机),若是须要人机界面可是界面简单注重功能和稳定性,那就上linux+QT(譬如工控HMI、电动车充电桩、停车场显示),若是产品很注重人机交互的用户体验,那就上Android(譬如智能手机、智能电视机、游戏机等)。

总的来讲,嵌入式系统的复杂性高、开发难度大、学习曲线长。由于软件上的复杂性,致使出bug的可能性大。一旦出bug查找起来也更加须要技巧和经验。因此不少公司用嵌入式linux或android作产品问题不少,这一方面和开发者的技术能力有关,另外一方面和公司不能花时间和成本去潜心把产品作稳定作成熟有关。

嵌入式和单片机的真正区别

其实分析到这里,你们也知道了嵌入式和单片机的真正区别,那就是有没有linux或android这类复杂操做系统。

单片机不是裸奔就是RTOS,其实玩过RTOS和linux的同窗都知道,RTOS虽然也叫操做系统,可是和linux这种根本不是一个级别。差远了,更不用说android了,android里随便拿出来一个模块代码量都比一个完整的RTOS都庞大,都要复杂。因此有没有linux/android这类复杂OS对开发来讲真的很不同。

譬如从C语言角度来说,个人《嵌入式linux核心课程》第4部分《4.C语言深度解析》这个课程,就是专门针对嵌入式linux开发中C语言功力不足的人推出的。不少作了多年单片机的同窗看了后都感慨,真的是不作linux不知道C语言水深。结构体和指针这些元素在单片机编程中彻底体现不出来魅力,可是在linux内核中却获得了完美的发挥和释放。不去真正研究,实在很难体会出那种美感和震撼。

嵌入式和单片机的交集

嵌入式和单片机有没有交集呢?这里说的交集意思是:某些产品既能够用嵌入式来解决,也能够用单片机来解决。

之前是没有的。你想一想通常单片机几块钱十几块钱,而嵌入式系统SoC加上DDR和Flash至少几十块,怎么可能有交集。就算单片机能作的事你嵌入式也能作,可是我十几块钱能搞定的工做凭什么要花几十块上嵌入式呢?因此之前这2者没交集。根本不是一个档次范围内的事儿。

可是近两年状况发生了变化。首先是不少高端单片机的配置和价格愈来愈高。譬如2017年10月发布的NXP imxRT1052系列单片机,号称跨界处理器。为何叫跨界?跨的是哪两界?

咱们知道单片机嘛,就要单芯片提供整个system,简单说至少cpu、sram、flash这三大件不能少,要否则根本没法独立运行嘛。因此你看无论是51单片机仍是STM32都是内部有CPU,有SRAM,有Flash的,这就是典型的单片机。而嵌入式SoC不一样,譬如S5PV210内部只有CPU和少许SRAM,它要正常工做须要外部集成DDR SDRAM和Flash(EMMC)。因此嵌入式的system不能在一个chip上,通常典型的嵌入式系统的system由一块核心板构成,这块核心板上集成了SoC、DDR SDRAM、Flash、电源模块等,这叫嵌入式系统。而所谓跨界处理器,跨的就是单片机和嵌入式这两界。这个imxRT1052内部集成了CPU和SRAM,可是没有Flash,它须要外部提供独立的Flash芯片才能组成一个system。因此这东西既不是典型的单片机也不是典型的嵌入式,可是既像单片机,又像嵌入式,因此NXP说这个是跨界处理器。甭管好很差用,名字听起来酷酷的。

顺便多说一句,NXP为何这么设计?实际上是由于单片机内置Flash都很贵,imxRT1052为何能比一样性能的STM32便宜那么多,主要缘由就是由于他没有内置Flash。因此不少人都说ST落后于NXP了,其实没有。只能说NXP这个设计在单片机界是一种创新,对比来看显得STM32F七、STM32H7性价比太差了。不过实话实说,STM32的F7和H7确实性价比很垃圾,我都不知道就一个单片机卖一百可能是准备上天?谁给ST的勇气这么订价的,梁静茹吗?

算了,懒得吐槽F7和H7了。就说这个跨界处理器imxRT1052吧,这东西主频有600MHz,有消费级和工业级,带各类外设(反正你能用到的基本都有了),能够带最大分辨率1024*768的TFT LCD(固然了须要外接SDRAM做为显存)。这东西相对于普通单片机来讲就是神通常的存在啊,通常玩单片机的看到这个数据吓得直接就跪下叫爸爸了。再说价格,这东西官方公布的批量价格是人民币30元左右。想想感受性价比爆棚啊。其实STM32也没那么弱,F7和H7的主频虽然没有600MHz那么变态,可是H7的性能总体比RT1052并无太大劣势。就算不叫爸爸一声大哥总逃不了。之因此F7和H7没掀起大浪关键仍是价格太吓人了,通常人据说100多直接内心骂娘转身走人了,根本不想了解你的性能。而imxRT1052的30元确实很诱人,听起来彷佛真的是高性能低价格了,不少人甚至据此判断NXP要“干死”ST了。

跨界处理器的尴尬

高性能跨界处理器初看彷佛很不错,实际上并无那么容易成功。缘由就在于这种高性能单片机实际上和低性能高性价比的嵌入式linux解决方案比并无优点。

是的,不少人以为600M主频的单片机才30块很便宜很厉害。那是由于你不熟悉嵌入式的解决方案。实际上imxRT1052单芯片是不能很好工做的,他要实现高性能至少须要外置Flash和SDRAM,就算只是1Gbit的SLC Nand和32MB 的SDRAM,再加上RT1052BOM成本也在50元左右了。再加上RT1052虽然号称批量30元,可是实际上小批量拿货价都在40-50元,因此目前市场上RT1052的核心板售价都在120-150元之间了。这个价格其实并不便宜,有不少嵌入式linux的解决方案都比这个性价比高。

譬如NXP的imx6ul,内置Cortex-A7单核心,最高主频1.2GHz,也是工业级,各类你能想到的外设都有了。标配256MB SLC Nand和256MB DDR的核心板,市场最低售价119元,比RT1052还低一些。

实际上还有性价比更高的方案,譬如咱们深创客推出的NUC972牛顿板中使用的新唐NUC972方案,内置64MB DDR,外部配置1Gbit SLC Nand。主板批量能够作到100元内。性价比完胜RT1052这类高性能单片机。

不少人可能会说,我不会嵌入式linux开发,我只会单片机开发啊。因此你linux的方案性价比再高跟我不要紧,单片机的才跟我有关系。我想说这绝对是一种误解,百分百的误解。为何?

单片机就三个字,你别以为叫单片机的都是一种东西。单片机和单片机是不同的,你以为主频600MHz的单片机带1024*768分辨率的TFT LCD,它的开发方式和难度会和10块钱不到的STM32F103同样?软件开发是跟着硬件走的,什么样性能的硬件就应该配套什么样的软件开发方式和相应资源,也会要求开发者具有某种相应素质。因此不要以为都是单片机就亲切,就能玩。实际上要把高端单片机彻底发挥性能作出好看的GUI而且用到项目中解决掉全部的BUG并非一件容易的事情。

结语

这篇文章写的比较浅,主要是讲了下单片机和嵌入式系统的由来和差别。引出了高端单片机(STM32H七、imxRT1052等)和高性价比嵌入式linux解决方案的的一个对比。主要是但愿抛给你们一个思考点,引导你们去思考如何分析和评价一款芯片方案,从而在作项目时可以更好的选型适合本身的芯片方案。总的来讲,个人观点是:能用几块十几块的单片机就用单片机,若是这些高性价比的单片机不能知足要求非要上几十块的高性能单片机,那你确实应该考虑下是否应该一步到位上高性价比的嵌入式linux解决方案。不少人担忧linux不会开发,其实不该该这么考虑。真正沉下去作项目,你会发现用嵌入式linux并无那么难,并且高端单片机加上RTOS和一堆框架、协议栈以后也不简单。出了问题也很差找。并且嵌入式linux通过多年积累,其方案稳定性大多都不错。而高端单片机的配套RTOS和框架协议栈等中间件每每处在发展初期,每每bug不少。所以,建议你们值得投入时间去学习嵌入式linux软件开发的技能。

今天先讲到这,后续有时间再继续更深度来高性价比的嵌入式linux解决方案的各类技术细节。

相关文章
相关标签/搜索