从软件工程师的角度,理解单片机
1. 单片机系列
单片机就是一个百搭的通用CPU,提供各种接口来对整体进行控制,相当一个总调度,当然,简单的功能一片CPU独立工作也就完成了。原来的51系列就是一堆IO口,后来慢慢的把常用的PWM,AD之类的功能加入了单片机。主要包括用了无数年仍然牛逼、各大学必教的51系列,还有AVR,PIC,ARM,HOTEK……其实ARM9以后,已经说不清ARM算哪类了,目前的架构来看,更接近DSP。
1.1. C51
C51是INTEL公司早起的8051产品的简称,现在泛指一切用51内核的单片机,包括STC(宏晶)公司出的增强型80C51、80C52和ATLEM公司的一系列产品,属于单片机入门级,寄存器数目少,直接操作简单。
8051系列已经是辉煌的末日了。构架上已经拖后腿了。除了老代码、老系统升级,就是特定领域的芯片上使用。但是他至今还占用很大份额的原因是——大学的课本是他。
1.2. Arduino
Arduino准确的说是一个单片机及其外设的集合,主控是ATMEL出的AVR单片机,你可以理解成比51厉害一点。这个集合之所以出名在于其操作太简单。STM32库函数的一大堆命令,在这里只需要一句,并且有相当丰富的外设模块。
Arduino虽然可以替换更高速的芯片,但究其最常见的uno——AVR芯片(16位)来说,性能跟宏晶的51单片机差不多,但价钱可是51单片机的10几倍。所以其定位一直是“玩具”。
1.3. STM32
STM32是ST公司基于ARM Cortex-M3系列内核设计的一系列32位单片机,寄存器复杂,直接用汇编操作比较麻烦,但是用ST给的库函数十分方便。
1.4. ARM
ARM这个含义太多,首先它是英国一家公司的名字,这家公司不生产芯片,它只卖授权,然后ARM公司卖出去的处理器架构也叫作ARM架构,再细分有ARM5.ARM7.ARM9 .ARM11再高级一点有CORTEX系列,这个系列的A子系列叫做应用处理器,你的手机平板都是用的这一个系列的,不要在意是苹果还是三星,架构都是ARM没错的。
平常我们所说的ARM应该是指ARM架构的芯片如ARM7,ARM9。
- ARM7使用V4指令集
- ARM9使用V5指令集
- ARM10使用V5指令集
- ARM11使用V6指令集
- Cortex使用V7指令集
Cortex是ARM公司推出的以V7指令集设计出来的一系列arm核,其中包括:
- Cortex-M1, Cortex-M0, Cortex-M4
- STM32是就是ST公司基于Cortex-M3生产的CPU
1.5. FPGA
FPGA可编程门阵列,和stm32等单片机有很大的不同。单片机是在处理器上运行你写的程序,程序是只能顺序(串行)执行的。
而FPGA(CPLD)是一块拥有很多数字电路单元的电路板,使用VHDL或者Verilog语言描述所需要的功能,综合软件将代码转换成相应的数字电路,将输出文件烧到FPGA中FPGA中的资源就会连接成你想要的样子,等于是设计了一款芯片。数字电路是可以同时执行的,所以FPGA可以并行,运算力非常强大。
应用领域:
- 一般用来做高速接口或数字信号处理,比如视频压缩,高频信号(数据)处理等。
- 也可以做仪器,很多示波器都是用FPGA做的。
- 当然也可以做控制,像单片机一样用,不过有些大材小用了。
1.6. ASIC
ASIC原本就是专门为某一项功能开发的专用集成芯片,比如你看摄像头里面的芯片,小小的一片,集成度很低,成本很低,可是够用了。一个山寨摄像头卖才卖30块,买一片ARM多少钱?后来ASIC发展了一些,称为半定制专用集成电路。
1.7. DSP
DSP实际应该称为DSPs,即用于DSP处理的专用芯片。跟普通计算机的区别一方面是他是哈佛结构的,也就是数据和程序空间分开(普通计算机是冯诺依曼结构)。另一方面他有流水线结构,不过现在其他也有了,见贤思齐。再一方面他有专用的硬件算法电路,用以完成DSP运算,比如最基本的乘法累加。上过DSP的就知道,蝶形算法FFT什么的,拆成最基本单元就是乘法累加,把这部分加速了,整体性能就有非常大的提高。
DSP对于流媒体的处理能力远远的优于通用CPU。所以你看现在手机CPU,至少语音部分都是用DSP的。后来DSP概念也复杂化,各家都把一个控制核心整合到DSP里面,比如现在的智能手机芯片。可以看一下高通或者TI的片,基本是一个ARM核控制整体运算,一个DSP处理语音编解码,一个GPU负责图像运算,一个基带和天线处理模块负责通信,再加一些七七八八的东东比如GPS模块什么的。
1.8. 总结
从系统角度,
- 8051都是裸跑
- STM32可以跑RTOS
- ARM(Cortex-A级别)就可以用来跑Linux或Android
从价格角度:
- C51: ¥3~4
- Arduino: ¥20~40
- STM32: ¥20~90
- ARM: 当然更贵了