本文转自嵌入式资讯精选公众号,特别鸣谢,
编者按:初学习ARM单片机的同学们可能会对ARM的架构定义并不是很明确,形形色色的名词背后到底代表什么含义呢?请听听这位嵌入式工程师的经验总结。
ARM架构: 由英国ARM公司设计的一系列32位的RISC微处理器架构总称,现有ARMv1~ARMv8种类。
ARM7:一类采用ARMv3或ARMv4架构的,使用冯诺依曼结构的内核。
ARM9:一类采用ARMv4或ARMv5架构的,使用哈佛结构的内核。
Cortex M3:采用了ARMv7架构的,使用哈佛结构的内核。
Cortex M4:采用了ARMv7架构的,使用哈佛结构的内核。(较前者最大区:别增加了一个DSP处理功能,SIMD单指令多数据功能。其他区别请自己在实际项目开发中体验)
STM32:意法半导体公司(ST)推出的系列基于Cortex-M0/Cortex-M3/Cortex-M4等内核的微处理器/微控制器芯片。
51:Intel在1981年推出的由8031微控制器芯片改造升级的、使用CISC指令集的、冯诺依曼架构的、8位的8051微控制器。后Intel将8051微控制器的内核授权给其他芯片厂商,使得市面上广泛出现类似于8051的芯片,这种采用8051内核的芯片被简称为51。
AVR:一系列由ATMEL公司在九十年代出推出的系列8位的、采用改进哈佛结构的、使用RISC指令集的微处理器芯片。
补充知识:
最开始的Intel公司都是自己从头研发处理器芯片。从4004、8008、8086、80286……TI公司的TMS 1000……还有其他的公司研发的可编程芯片。因为是不同公司,而且个公司之间也不可能有交流(防止商业秘密泄露),所以各自做的都芯片都有在内部CPU、总线、存储单元、指令集上的不同(如果有相同,那就是专利侵权了,比如INTEL当年锲而不舍控告AMD)。但每个公司研发的新老芯片之间都有一定的结构和技术是上的传承,所以出现了不同公司研发的芯片中有不同的架构。
架构 architecture:是一个抽象的概念,是一个结构内的元素及元素间关系的一种主观映射的产物。概念性的东西请看微架构。比如我们常说的计算机处理器有486、Ivy Bridge、Pentium M……这就是架构的不同(其都从属于x86架构),维基的内容里只提到了计算机处理器中的常见硬件架构,而没提到你想了解的、常用语嵌入式系统中的微处理器/微控制器芯片所用到的架构。
ARM架构到STM32这些名称都属于ARM架构的范畴。
内核 IP core: 概念请看IP核。可以说IP核是硬件架构这个抽象概念在芯片内的具体实现。
上面说了,最开始都是各个厂家自己做,从架构研发到芯片成型,这种好处是自己完全掌握了核心技术。但劣势是投入巨大,一旦大投入但设计出来的芯片因为架构的不合理而导致市场流失,那之前的投入就打水漂了。
而当年INTEL的8031和8051在嵌入式工控领域热卖(其实现在还有些工控领域坚持用8031,因为稳定,这个以后有空再说)。而Intel可能是从生产成本和扩展领域方面的考虑(人家做计算机微处理器比这赚钱多了),自己逐渐放弃了8051芯片的生产,转而允许授权其他公司生产。集成芯片内部就是一堆晶体管的集合,用硬件描述语言来规定晶体管的排列组合从而实现中央处理器、总线,存储单元……,Intel把如何实现8051架构的硬件描述语言授权卖给其他公司(买内核),获授权的公司就能生产具有8051内核的芯片了。
微控制器MCU/微处理器μP:
一开始只有小型微型计算机所使用的微处理器,后来Intel从4004发展到8086阶段中衍生除了专门用于工业控制方面的8031到8051,然后是用于计算机的微处理器慢慢发展向超高集成度、大容量、高频率、大处理能力以符合计算机技术的日益发展需求。而8051则平稳发展向了高稳定性、多功能集成度的微控制器,以满足工业控制领域对内存需求相对不是太大,但稳定性高、外设功能较多、占用面积小的要求。
最开始的区分就是微控制器带有内部RAM(等同于计算机的内存条,当然芯片内集成不会有那么大的内存,一般撑死了128K内存)、和ROM(等同于计算机的硬盘,当然也不会有想硬盘大的容量),以及其他的外设功能(如串口、spi、I2C等功能)。简单的说就是把一个缩小资源容量的计算机放到一个芯片内。也因为这样单芯片集成了一个完整的计算机系统在里面,大陆地区在80、90年代的电子工程师将其称为“单片机”,然后影响至今。(注意,一个完整的计算机系统是处理器、总线、存储结构、输入输出结构,所以不要跟我说为啥没有显示器和鼠标键盘它单片机也敢说继承了一个计算机系统,你可以翻翻《计算机系统原理》课本)
而计算机微处理器因为需要从处理数据角度考虑,纯粹只做处理方面的升级,所以在一开始的区分中,微处理器是不集成RAM、ROM、和其他 外设功能的。
只是因为PowerPC往嵌入式发展,以及后来ARM的出现,开始慢慢的又缩小了微处理器和微控制器的区别,这些微处理器也开始集成了RAM、ROM、其他外设……
但现在国际上也没有一个统一的,通用的标准说微处理器和微处理器之间的区别是什么。跟“单片机”一样,都是工程师自己叫出来的。也有人把8051也成为微处理器的……
而从我做过的Ti的DSP、ARM7、ARM9等芯片来看:微处理器μP是需要通过并口外扩RAM、ROM,并且程序从外部ROM启动,在外部RAM运行的。微控制器MCU通过内部ROM启动程序,在内部或外部RAM运行程序的。
这只是我的个人见解,因为有的芯片可以被配置为微处理器,也可以被配置为微控制器,其配置后的区别就是程序从哪里启动在哪里运行。比如德州仪器TI的TMS320F2812 DSP芯片。
BTW:DSP芯片本质上其实也是一个微处理器/微控制器芯片,只是它内含了DSP数字信号处理功能,比如上面说到的Cortex-M4也是集成了DSP数字信号处理功能呢,但ARM公司不称呼它为DSP,这都是工程师自己称的。没有统一标准。
冯诺依曼结构:是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。应该说ARMv3之类的内核的存储结构模式和寻址模式使用了这种冯诺依曼结构,一个完整的微处理器架构还需要指令集等其他系列结构。如果不理解冯诺依曼结构的话,建议学习一下《计算机系统》或《计算机系统原理》这一类书籍。在我记忆中貌似大学大一大二必修的《计算机原理》这一类的都会提到(用于考计算机一二级神马的教材)。
插一个关于嵌入式概念的补充
IEEE和IEC对于嵌入式系统(Embedded System)的诠释,从最早期的4004、8031、8051,直到现在流行的ARM和很难学的PowerPC,这些芯片如果应用在“用于控制、监视或者辅助操作机器和设备的装置”上时,都应该是属于嵌入式。(还有人曾将X86架构的80386用于嵌入式系统的)所以不要再来问我如何从单片机转向嵌入式这种问题了。因为做单片机开发本身就是嵌入式开发。要问请问清楚你是想宗8051转向ARM还是PowerPC。
嵌入式
程序猿
嵌入式程序猿致力于打造程序猿工程师交流分享的精品移动平台,欢迎各位猿友加入和分享。微信搜索嵌入式程序猿添加关注,或者长按下方二维码,选择识别图中二维码添加关注。