嵌入式能做什么产品?拆完家我悟了!

科技   2024-12-19 12:02   北京  

前言

大家好,我是科岩。

这是一篇科普文章,分享嵌入式能干啥,到底什么是嵌入式。

你大概应该知道嵌入式就是基于51单片机,stm32等等芯片,还有Linux操作系统做的硬件设备,但可能这些在你脑子里都是隐约的概念。

我从一个朋友家借来了一些嵌入式设备,它们有的主控是51单片机,有的是stm32,有Linux,还有一台英伟达的AI设备。

由于不是我的,就把它们拆开,帮大家一探究竟。

文章后面,还会讨论硬件工程师和软件工程师工作内容的区别,以及大家经常问的一个问题,就是初学者要不要学51单片机,我会分享一些我不建议学习51单片机的理由。

文章比较长也比较干,希望能给刚入门的你或多或少一些启发。

还是用一个脑图呈现给大家,高清版可以到公众号下载。

51单片机

首先来看51单片机。

使用51单片机的产品一般有着非常简单的逻辑。

逻辑是什么呢?其实就是【如果xxx,就xxx】,这样的一种条件判断,所有的处理器其实做的就是这一件事。

最常见的51产品就2大类:家电和玩具。

比如遥控车:

玩具枪:

遥控器:

牙刷、筋膜枪:

破壁机:

多功能锅:

用的基本都是51单片机。

先来拆个遥控器。

里面的构造非常简单,就是一块电路板,一颗芯片和一个红外发射头。

芯片上一般都会写字,我们叫丝印,会写明这个芯片的型号,这个遥控器芯片的型号是AD918C。

这是一颗遥控器专用的芯片,我没查到具体的资料,只能说大概率是一颗51芯片。

我们再看一下多功能锅,这个锅的功能可以火锅、烧烤、清蒸,通过旋钮可以控制火力大小,有2个按键可以控制开关和定时。

所以多功能锅芯片的处理逻辑是什么呢?如果旋钮旋在某一个档位,就给对应的火力;如果按了定时按钮,就可以定时做饭。

把它拆开:

那个主控芯片是一颗韩国现代半导体公司的,A96T218芯片,是一颗51单片机。

51单片机芯片的价格非常便宜,在几毛钱到几块钱之间。

它的处理器位数只有8位,位数越大,能处理的数据量和复杂度越高。

通常我们在谈论51单片机的时候,这个【51】的意思,实际上指的是单片机的一种指令集架构,它是英特尔公司发明的8051指令集,由于它比较经典,使用广泛,所以我们在说起51单片机时,常常用它代指所有的8位微处理器。

像前面的多功能锅,用的是韩国现代半导体的芯片,而芯片用的指令集是英特尔的8051指令集。

而其实8位处理器除了8051,还有很多种指令集,像microchip的PIC,ATMEL的AVR、意法半导体的stm8。

后面是指令集对应的芯片型号,这些也都很常见,只不过没有8051使用广泛而已。

8位MCU的主频一般在1MHZ到100MHZ之间,这个主频越大处理速度越快。

内存的范围是128字节到8K字节,硬盘或者说flash范围是2K到128K字节,这个量级的硬盘所能容纳的代码量是几百行到几千行。

它的引脚数量一般是8个到40个脚,引脚就是芯片伸出来的这些细细的铁丝或者说导线,芯片要通过这些导线控制其他的装置或者电路,比如电机的旋转或者是金属盘的加热。

所以【嵌入式】这个概念我们也可以定义一下了,就是把处理器嵌入到电气装置或者机械装置的内部,控制这些装置。

51单片机的电路板一般是1到4层,这个层数是什么意思?

我们看到的电路板表面密密麻麻有许多芯片啊、电阻、电容等等元器件,仔细看上面还有许多电线。芯片的引脚,就是通过这些导电的电线连接到元器件上控制它们。

电路板的材料是绝缘的,表面上我们只能看到正面和背面,实际上中间还有很多层,每个层上也都有导线,层数越多,这个电路板越复杂。

8位MCU的电路板一般都很简单。

那么,再看我们需要掌握的技术栈有哪些。

C语言是最基本的,之后就是GPIO、定时器、中断、串口这些最常用的,想使用这些功能,就需要学习寄存器、电子学知识,再深入些,还可以看看汇编指令集。

8位MCU的知名厂商,我简单列了国内2家和国外2家。

总结一下,我们常常说的51单片机,一般用来处理最简单的逻辑功能,51的意思是英特尔的8051指令集,由于使用广泛,常常在日常口语语境下用它泛指8位的微处理器。

32位机

接下来,我们再说下stm32,它能处理的逻辑功能要比8位机更加复杂,常用的产品包括家居、安防、汽车等等,非常广泛。

先看这个智能门锁,它通过机械结构控制门上的锁芯。


它支持4种开锁方式,指纹、刷卡、机械钥匙、和密码,所以主芯片的处理逻辑很容易想到,如果指纹比对正确,就开锁;如果读卡信息正确、密码正确,就开锁。

拆开也可以看到一块电路板,上面有指纹读取的芯片、读卡的芯片、还有和手机通信的蓝牙芯片,它的主芯片型号是EFM32,是美国芯科的32位单片机。

你可能没听过这个品牌。

没事品牌不重要,你只要知道它不是8位机,而是32位的就可以了。

我们再来拆这个模拟射击的产品。

这款产品可以用来模拟训练打靶,整个系统由枪、靶、报靶系统构成

枪不断发射激光信号,靶收到激光后,通过无线发射坐标数据给报靶端,报靶端会在靶面上画轨迹。

扣动扳机后,枪会发一个射击信号给报靶端,报靶端计算坐标,语音播报射击环数。

演示一下:

拆开看下,枪的主控芯片是一颗华大的HC32,芯片和电路板非常精细,有主控MCU,有通信芯片、激光芯片,还有控制电机的芯片。

靶面芯片是一颗兆易创新的GD32F103。

报靶端是一个STM8的8位MCU,用来接受无线信号,触摸屏的主控是安卓系统,通过串口和STM8通信,使用的是一颗64位的全志的A64芯片。

这个射击系统算比较复杂的系统了,从8位单片机,到32位单片机,再到64位的高端处理器,都有涉及。

ok,你可能会问,怎么到现在还没有STM32,STM32其实是意法半导体公司生产的arm指令集MCU的一种型号,因为它的开发工具、生态做的都很好,拉低了单片机开发的门槛,价格也不贵,所以使用非常广泛,大部分人都知道。

一款单片机做到这个程度确实很棒,让我不由得想竖起一个大拇指,如果你看到这里还没划走,会发现屏幕下方有个拇指,拜托点赞支持下科岩,鼓励我做出更好的内容。

由于大部分人都知道,所以常常说起stm32,就代指了32位单片机。

32位单片机的价格在几块钱到几十块钱的价格区间。

不像51单片机,我搜了半天没找到1块以内的。

常见32位芯片的指令集架构有这些。

最常用的当然是arm公司的Cortex M系列,使用这个架构的芯片型号有你们熟知的stm32芯片,国内兆易创新完全复制了对应版本,像我们刚刚拆的靶面,用的就是这款GD32F103。

另外,上面拆的锁的主控EFM32是Cortex M指令集,枪的主控华大HC32也是Cortex M,这个Cortex M后面如果举例常用芯片的话,这一个脑图都列不完,实在太多了。

所以与其说stm32使用广泛,不如说是arm Cortex M架构使用广泛。

除了arm,还有最近几年火热的RISC-V指令集,这是加州大学伯克利分校开源的指令集。

另外像中天微的指令集C-SKY,后来被阿里收购成了平头哥;atmel也有32位指令集,叫AVR32、微芯的PIC32也是32位的指令集。

32位MCU的主频范围大概在几十MHZ到几百MHZ之间,基本也是51的10倍。

内存范围,最小4K,最大640K字节;磁盘从2K到2M字节,能够容纳几千行到几万行的代码量。引脚数量是20到100脚,电路板层数最高6层,可能也有更多的,不过我没搜到。

软件的技术栈呢,由于代码量增加了,需要学习更多软件相关的知识,要懂数据结构、实时操作系统、还有网络,而和硬件相关的寄存器啊、电子学这些知识,稍微懂一点就够用,不用像51那样,研究每个寄存器的功能才能使用。

知名的厂商有这些。

如果你工作久了,应该都听过这些名字。

总结一下,stm32只是一款使用了arm Cortex M指令集的32位单片机的型号,由于它上手简单,所以在市场上使用广泛,而除了stm32,其实还有很多其他32位的arm指令集芯片,或者其他指令集芯片。

Linux

接下来是Linux,它比32位MCU更复杂了。

价格当然也更贵,最便宜的也要几十块钱,最贵的几千也有,它的位数是32位和64位,对应的,它做的产品也更贵了。

Linux和前面2个概念又都不相同,它既不是指令集架构,也不是某款芯片的型号,而是一个软件操作系统。

你细品会发现,这其实是个挺有意思的事。

8位单片机领域,火出圈的是英特尔的51指令集;一说32单片机,火出圈的是意法半导体这家厂商的芯片型号;32位和64位的高性能处理器领域,火出圈的是纯软件的操作系统。

广为流传的东西完全不是一回事,为什么是这样呢?

我想,可能是因为,在8位单片机上写软件,常常需要操作寄存器,调用汇编指令,所以8位机的工程师会对汇编比较熟悉,哪个汇编指令好用就用哪个芯片;

而在32位单片机上写软件,芯片厂商把寄存器的使用都封装成了方便调用的函数,大家很少需要调用汇编指令,也不需要关心芯片的架构是什么,只关心哪个厂商的函数更好用更方便就行了;

到了Linux上,芯片厂商封装的函数已经由操作系统的驱动程序调用了,我们不关心芯片架构,不用汇编,连芯片的厂商现在也不需要关心了,只需要调用Linux操作系统提供的统一的、标准的接口就能实现各种各样的功能。

所以你看,在哪个层面工作,那个层面最广泛的技术就会广为流传,当然这只是我自己的一些看法哈。

拆个家用路由器看看。

用的是一颗海思的芯片,SD5650。

再拆个马路上的摄像头。

也有一颗海思的芯片,型号是3516。

除了这个采集摄像头图像的3516,还有一颗意法半导体STM8的8位机,应该是对摄像头做简单的控制。

再拆个智能音箱。

主控是一颗晶晨的A113X。

上面这3个设备,路由器、摄像头、智能音箱,相比51或STM32的设备,又更加复杂了,使用单片机性能不够,无法实现功能,必须使用性能更高的芯片,配合功能复杂的操作系统了。

常见的能够运行Linux的芯片和指令集架构包括这些,这里嵌入式领域使用最多的是Arm Cortex A系列,其他这几种架构大部分都是用在电脑上。

能运行Linux的芯片,主频的范围一般是几百MHZ到几个GHZ,我看英特尔的CPU已经能达到6GHZ了。内存范围128M到32G,硬盘128M到1T字节,引脚的数量,我查到最少的引脚是40个,最多可以有几千个。电路板层数大致是4到30层,各个领域不太一样。

这里的软件技术栈,多了Linux操作系统的使用,和进程、线程、socket接口的调用,当然,也还有GPIO、串口这些基础的硬件接口。

在Linux 上写代码,又比32单片机更高一层,可以完全不懂寄存器、电子学和指令集,只写C语言也是没问题的。

知名厂商我也只列了一些,前面这些是国内的,下面的都是美国的,这个领域的芯片也是咱们天天说的“卡脖子”的技术,前面的32还有51都是低性能的处理器,技术含量不是特别高,美国都不管咱们,我们也并不落后。

但到了这高性能的芯片,最新的技术,上面几家和下面几家相比,还有很大差距的。

SOC

接下来再分享一个概念,SOC,它是system on chip的缩写,翻译过来叫做“片上系统”。

这个概念是相对MCU或者CPU来说的,它的意思是把WiFi、蓝牙或者4G、5G等等这些功能与MCU或CPU集成到同一颗芯片上。

如果非要咬文嚼字,其实手机、平板上的,你知道的高通、联发科还有苹果的芯片,严格来说都属于SOC,而只有电脑上的英特尔啊、AMD这些芯片才是真正CPU的概念。

SOC一般使用在集成度高的产品上,比如手机、手表、手环等。

先拆一下这个大人用的理疗仪,实际图片就不展示了,这是我画的抽象现实主义写真图。

它由一个主控板外加3个震动马达组成,主控芯片是一颗TI的CC2541,这是一颗蓝牙芯片,可以通过手机控制。它的逻辑也很简单,就是控制马达的震动频率。

再拆一个儿童手表。

手环和手表的功能大家应该都知道,除了看时间,还可以计步、定位、测心率、代替公交刷卡,相比手环,手表还能打电话、安装一些APP。

可以看到,主控芯片是一颗紫光展锐的SL8521。

它集成了arm的A系列处理器,性能更高了,还集成了WiFi、蓝牙、GPS、4G通信等等的功能。

我们来画个图更直观做个对比看看。

如果一个智能手表用MCU的方案实现,大概会是这样:

中间是处理器,其他功能用特定的模块通过spi、i2c、串口等等协议进行通信。

如果是SOC实现的方案:

会将蓝牙、wifi等等这些常用功能,集成到一颗芯片中,再通过spi或者其他协议和不是很常用的功能芯片通信。

相比之下,MCU的方案更加灵活,可以任意增减功能;而SOC的方案集成度更高,可以做成非常小巧的产品。

SOC的厂商,除了上面提到的那些手机、平板芯片,还有蓝牙、wifi的芯片,下面是比较常见的厂商。

XPU

我们再说最后一种芯片,XPU,就是各种PU,有GPU、NPU、TPU还有DPU,这些能进行大规模人工智能算法的芯片。

GPU:Graphic Processing Unit,图形处理器 

NPU:Neural Processing Unit,神经处理器 

TPU:Tensor Processing Unit,张量处理器 

DPU:Data Processing Unit,数据处理器

这类芯片的常见产品包括自动驾驶、人脸识别等等功能。

我那个朋友从这种人脸识别自动售货柜里:

拆下来了一个盒子,可以看到,这个盒子上有很多接口,可以接485、继电器、网线,还能插SIM卡。

现在把它打开看看。

有一颗4G的通信模组,用来和云平台通信。

有一颗stm32f407的MCU,这应该是实现货柜的开关门之类的控制功能用的。

还有一个英伟达的Jetson边缘AI处理器,用它实现人脸识别。

XPU的位数一般都是32或64位,指令集架构呢,我搜到这几个:

PTX是英伟达自己的,MLU是咱们国内专做AI芯片的一家公司寒武纪自己的指令集。

XPU的性能呢,是用TOPS作为单位,意思是处理器一秒钟可进行几万亿次的操作,也可以换算成CPU的主频。

然后,比较知名的芯片厂商有这些:

前面几家都是国内的,后面是国外的几个大厂。

相关岗位

再来说下嵌入式的相关岗位。

我前面说到的,51单片机、stm32、linux还有XPU,所有的产品都是芯片、电阻电容、电路板,外面套个壳子组成的。

你能看见的外壳,其实是结构工程师的工作。

比如门锁:

它里面结构很复杂,电路板怎么摆放、哪里需要打螺丝开孔,哪里需要装电池,哪里是塑料,哪里是金属,最后这个外观好不好看,外观是工业设计我就不细分了,我们都认为是结构工程师的工作。

一名结构工程师的工作就是画图,需要的技能包括机械设计、材料、建模这些知识。

硬件工程师的工作也是画图,他要把芯片、电容电阻这些元器件用电线连起来,画成电路图给电路板的生产厂家来生产电路板。

需要掌握的技能就是各个芯片、元器件的功能、特性是什么样的,按照一定的规则把它们用电线连起来。

最后是软件工程师的工作,就是写代码控制各个元器件,软件工程师的工作是表面上你看不到的,他们实现了整个产品的各项具体功能。

需要掌握的技能就是操作系统、数据结构这些计算机软件相关的知识了。

无论是51、stm32还是Linux、XPU,本质上,这几个岗位工程师的工作没有任何区别,只不过就是简单与复杂的关系。

51单片机的电路板一般就2层,代码量一般也就几百行,无论是软件还是硬件都不复杂,很多公司都是一个人搞定软硬件。

stm32这种32位MCU做的产品有的简单,有的复杂,也有一个人搞定软硬件的,也有一个团队软硬件分工明确来开发的。

到Linux、XPU这种级别,无论是软件还是硬件的开发,都比较复杂了,基本没有哪家公司是一个人做了所有的软硬件工作,都是几个人负责硬件,几个人负责软件。

为什么不建议初学者学51

首先我要说明的一点是,51单片机无论是技术还是产品,永远都不会过时。

从技术角度看,51芯片和8051指令集可以说是计算机的鼻祖,无论后面的MCU、CPU多么复杂,其本质或者说其内部的处理器结构仍是一样的,都需要时钟、计算单元、内存、中断控制器、定时器这些最基本的模块。

所以无论怎么发展,51芯片所体现出来的计算机结构知识是不会过时的。

从产品角度看也一样,无论何时,我们都需要微波炉、洗衣机、冰箱、榨汁机这些家用电器,小孩也都需要电动玩具。家电和玩具的控制逻辑简单,用51完全能实现,而且是成本最低的,51单片机还是很有市场的。

但是,我仍然不建议你学,有3个理由。

第一点,51单片机其实并不适合入门。

有人说51单片机比stm32简单,我不这么认为。

如果比喻成数学的话,我觉得大家都是加法,一个层面的东西,并不是51单片机是加法,stm32是微积分。

有同学说直接学32学不明白,那我觉得你直接学51大概率也学不明白。

要么就是你学错了,什么总线、时钟分频、中断优先级,各种各样功能的寄存器,让一个没有计算机学科知识、没有电路基础的人去学,肯定是学不会的。

要么就是你看的书不会讲,或者教你的人不会教。

我之前说过,学习技术就3个阶段,会用、知道怎么实现、知道为什么这么实现。

作为初学者,会用C语言操作单片机就可以了,并不需要了解汇编指令集、寄存器功能、处理器体系结构这些知识。

比如串口收发数据的操作,如果你学习51单片机,就得看串口的各个寄存器的功能,不了解这些,你都没法使用串口。

但stm32不一样,它把这些内容都封装成函数,非常简单,点灯用函数,发数据用函数,这更顺应初学者的思维方式,并且符合C语言的语法习惯。

第二点,51单片机没有学习的必要性。

如果一个初学者直接学习51单片机,那他需要学习各种寄存器的功能,设置不同的值会产生什么不同的效果,甚至还要学一点8051的汇编,然后才能控制它。

而如果一个初学者直接学习stm32,随便调用几个函数就能实现点灯啊、定时器啊、串口收发数据这些功能了。

接着应该把时间花在学习数据结构、实时操作系统、网络通信,或者其他的无线模块这些知识上。

因为稍复杂功能的产品,比如说智能锁,没有良好的数据结构、代码结构,那写出来的代码一定漏洞百出,改一个旧bug,造一个新bug出来。

但这些知识在51里基本用不上,因为51的产品功能逻辑都非常简单。

如果你说,你学习51的目的就是为了学习计算机的体系结构,或者学习汇编语言,那直接学习arm的体系结构,而不是8051的结构不是更好么,因为体系结构,汇编语言其实大家都类似啊,看这2张对比图。

这是51的体系结构和汇编:

这是STM32的体系结构和汇编:

区别并不大,STM32仅仅多了几个常用外设,这些外设也是你不得不学的东西。

也就是说,你学8051和学arm,其实学的是一个东西,都是计算机的结构,它们的复杂度相差不大,你所花费的时间、精力是一样的。学会51的结构,arm的很快也可以学会;学会arm的,51的也可以很快掌握。

那我们为什么不学习一个使用场景更广泛的架构呢?

最后一点,只会51,你大概率找不到工作,注意我说的是只会51,不会其他的。

我去各大招聘网站搜“51单片机”,没有一个招聘需求只写51单片机而不写stm32的。

为什么会这样?因为51单片机的技术已经成熟得熟透了,各个产品功能简单,也早就固定没有什么变化了,一个做51产品的公司,可能有几十甚至上百种产品,每种产品功能早就很稳定,不再需要迭代新功能了,没有必要招一个工程师专门做51的开发。

技术的进步就有着这样的规律,原本复杂的技术,随着时间的推移,会变得越来越容易上手,因为有许多公司用,并且很多人做科普做培训。

20年前51算是高科技,10年前stm32是高科技。

你现在觉得一个嵌入式工程师基于AI芯片训练AI算法简直高大上,但10年之后,随着用的人、科普的人越来越多,那个时候使用AI芯片,和现在的STM32也会一样的简单。

这是一个很容易就能得出的结论,因为过去的51和stm32都是这么过来的。

所以现在大多数公司都是有32单片机的项目,顺便做做51的产品。你直接学习32,完全能胜任51。

ok,这3点是我自己的想法,基于这样的想法,我在设计我自己的嵌入式培训课程时,只涉及stm32和Linux,并不包括51单片机,因为没有必要性。

我见识也有限,可能不对,欢迎你在评论区跟大家分享你的看法。

另外如果你是学生需要考试,或者你就是想学习51的指令集,那也没有问题,如果期望靠学会51就能找到工作,我觉得很难。

end

ok,这篇文章内容就到这里啦,如果对你有帮助有启发,欢迎点赞、收藏、转发。

END

来源:科岩成果

版权归原作者所有,如有侵权,请联系删除

推荐阅读
ChatGPT全球宕机,我的天塌了!
美国悬赏$1000万,要抓一个成都技术大咖
预热两年半的STM32N6,到底有哪些亮点?

→点关注,不迷路←
嵌入式微处理器
关注嵌入式相关技术和资讯,你想知道的都在这里。
 最新文章