嵌入式基础概念

2022-12-15 0 1,048

一、ARM 的两个正式版坏习惯

< 1 > 两个坏习惯

ARM7和ARMv7并非一两件事;Cortex-A9比Cortex-A7更先出;

实际上是A8先出的,A8出后才出的A9,A9前面与此同时出的A15和A7。A8是R5的,A9是R5或TNUMBERGHz的,A9的操控性和耗电是取了折衷的。后出的A15相对于A9操控性大列佩季哈区,但耗电越来越低,耗电变大;A7相对于A9是操控性减少了,但耗电越来越低了。

< 2 > ARM的三种正式版

ARMMach正式版

比如说我那时加进的I.MX6ull的Mach正式版是ARMv7ARM SoC正式版

比如说我那时加进的I.MX6ull的 Soc正式版是Cortex-A7R5晶片机型

比如说我那时加进的是I.MX6ull此款晶片
嵌入式基础概念

< 3 > 特别注意

ARMMach正式版和SoC正式版是由ARM子公司确认的,而SoC机型是由积体电路子公司确认的。

Cortex系列产品后ARM产品组合拆分成3个系列产品,那个是消费市场行业龙头的须要和优先选择。

ARM早已正式发布了许多64位构架如A53等,主要就面向全国高操控性伺服器类应用领域。

ARM下一步棋重点项目产业发展路径是Cortex-M7,特征是低耗电,主要就面向全国物联网终端产品。

二、SoC 和 CPU 的差别

< 1 > 基本原理

SoC = System on Chip(在两个晶片首集两个控制系统)

晶片的产业发展路径:从CPU到SoC。

那时早已没有纯粹的CPU了,都是SoC。

ARM出卖的Mach其实就是CPU(当然还须要总线),各种外设是半导体厂商自己添加的

< 2 > 早期的CPU的工作原理

嵌入式基础概念

早期的CPU,晶片集成度非常低,CPU就是一颗单独的晶片,内部只集成了运算器和控制器,它只能运算和控制,这时候的CPU内部本是没用内存的,CPU离开了内存是没法计算的,当年CPU里面没有内存是因为内存集成不进去,其他的如串口也集成不进去,就只有单单两个CPU。

如果须要使用串口,须要在CPU外面使用两个串口控制器晶片通过PCB走线与CPU相连,然后CPU加上这些外设晶片构成的整个PCB板就叫做一块控制系统板,那个控制系统板和另两个控制系统板就可以通信了,CPU通过它的串口控制器和另两个控制系统板上的串口控制器进行通信,没法把串口控制器等功能集成到CPU晶片里面去。

比如说这里还要加进LCD,就须要在外围加入LCD控制器的晶片通过走线与CPU相连,这些晶片组成的两个整板叫做两个控制系统板。这些UART控制器、LCD控制器就叫外设,和CPU组合到一块板子上就是那时的一块K60晶片实现的功能,只是被集成为一块小小的晶片。这里的外设指的是控制系统板子以内,CPU以外的就叫外设,CPU就叫内部,内部只有运算器和控制器,叫内设。

< 3 > 那时的SoC

嵌入式基础概念

那时的CPU集成密度很高,以上那些功能那时都被集成在CPU里面,成为了一款晶片,比如说我那时用过的K60晶片,他就是带这些外设功能的。早期CPU外设的4个晶片那时都被集成到一块晶片里了,所以那时的System就是在两个晶片里面了。

也就是System on Chip(SoC),所以理论上CPU和SoC是有差别的,标准的CPU是指早期的只含有运算器和控制器的晶片,SoC就是早已将控制系统集成为一整个晶片的。所以那时买到的晶片都是SoC,标准的CPU是买不大的,那时的CPU都是内部早已集成了很多外设的。

三、PDP和单片机开发模式的差别

< 1 > 基本原理

单片机开发多为裸机,程序规模小,多为单个程序员独立开发。有些复杂的产品也会使用高端单片机,如STM32,并使用RTOS(uCOS、freeRTOS等等)。

PDP开发几乎全部基于PDP操作控制系统,目前使用最多的是Linux和Android。

< 2 > 技术特征:编程语言方面

单片机主要使用C语言(少量用汇编),和标准C略有不同,很少使用结构体、函数指针等C语言高级特性。

PDP开发较复杂,一般分底层和应用领域层。底层使用C语言,应用领域层使用C、C++、Java等语言均有。PDPC语言对结构体、数据结构、算法、函数指针(用来实现面向全国对象)等高级特性使用比较多。

< 3 > 技术特征:软硬件组件方面

3.1 单片机方面

单片机多涉及许多简单外设,譬如串口、I2C、ADC、LCD(小屏幕和分辨率)。其实单片机也能搞USB、用网卡上网,但单片机裸机写出的网卡通信首先你写出它是很麻烦的,须要花很长时间,而且它不能运加进产品上,此时更好的就上ARM+Linux操作控制系统,直接驱动仿真移植一下,基于Linux的应用领域层编程写网络通信程序更容易;

USB同理,操作控制系统自带驱动程序,你单片机上还要自己去写,麻烦死了,还不一定顶事;对于音视频编解码,那时晶片里都有硬件音视频编解码了,当然你也可以依赖操作控制系统自己写。

用以前的许多简单的单片机玩玩串口、I2C、ADC、LCD这些自己写还是能接受的,还是写的出的,也不会花费太长的时间。那时高端的单片机,如STM32都是提供了库的,库里包含的如USB的源代码、串口源代码等都不用我们自己写了,因为自己通过寄存器来实现上述功能很多人写不出,单片机位数高了,变复杂了。实际上使用库编程就是单片机PDP领域了。

3.2 PDP方面

PDP控制系统涉及更多复杂外设,譬如网络(有线网卡、WiFi、蓝牙等)、USB、音视频编解码等。基于操作控制系统开发的好处就在于操作控制系统早已给我们提供了很多的此基础构架,不须要我们重头从零开始写,如网络组件、蓝牙、硬件音视频编解码、USB驱动等等。用单片机啥都要靠自己重头写。

3.3 总结

我们那时使用的是单片机的库来开发,就是属于单片机PDP。而PDP控制系统的本质就是单片机里面提供的库。

< 4 > 操作控制系统与裸机的差别

裸机运行的程序代码,一般由两个main函数中的while死循环和各种中断服务程序组成,平时CPU执行while循环中的代码,出现其他事件时,跳转到中断服务程序进行处理,没有多任务、线程的基本概念。

而引入操作控制系统后,程序执行时可以把两个应用领域程序拆分为多个任务,每个任务完成一部分工作,并且每个任务都可以写成死循环。操作控制系统根据任务的优先级,通过调度器使CPU分时执行各个任务,保证每个任务都能够得到运行。

若调度方法优良,则可使任务看起来是并行执行的,减少了CPU的空闲时间,提高了CPU的利用率。由操作控制系统的任务管理衍生出相应的CPU管理、内存管理,它们分别负责分配任务对CPU的占有权和管理任务所占有的内存空间。在linux操作控制系统中,还具有文件管理、I/O设备管理的功能。

四、PDP控制系统的特征

< 1 > 专用、软硬件可裁剪可配置

传统计算机,比如说笔记本电脑就是通用的,各行各业的人士都可以使用笔记本电脑,用笔记本电脑做不同的事情。但PDP控制系统是专用的,比如说给空调开发的PDP控制系统,空调控制器就只能供给空调使用。

软硬件可裁剪可配置,指的是PDP控制系统的配置是可以动态变化的,如软件部分里,Linux控制系统最大的特征就是可裁剪性,像那种很庞大的伺服器集群就是用的Linux控制系统,但那个Linux控制系统能够经裁剪部分而放在其它晶片里,Linux控制系统要大可以很大,要小可以很小。

< 2 > 低耗电、高可靠性、高稳定性

很多PDP控制系统是通过电池供电的,低耗电在电池供电里是很有意义的。用电池供电的PDP产品对低耗电的要求是很高的,比如说给小孩配的防走丢式GPS定位器,低耗电要求就很高,一周充一次电我能接受,但你让我隔两个小时充一次电,那我用它干屁,小孩走丢了的时候,你没电了可还行。

手机的高可靠性、高稳定性要求没有很高,因为如果死机了是能接受的,但如果像控制电梯的PDP设备,你可靠性和稳定性不高,电梯突然从19楼掉到2楼,不得吓死人。

< 3 > 相对于PC机而言软件代码短小精悍

< 4 > 代码可固化

可固化指代码可以烧录到硬件里,烧录指通过某种方式将程序下载到PDP硬件里。固化就是这一次烧录进去的程序,下一次重新开机程序还在;没有固化就是这次下载的程序,等到下次关机重启程序就没了,须要重新下载。

< 5 > 实时性

Linux控制系统是两个非实时操作控制系统

实时操作控制系统(RTOS)是指当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理控制系统做出快速响应,并控制所有实时任务协调一致运行的操作控制系统。提供及时响应和高可靠性是其主要就特征。

< 6 > 若交互性

强交互性:人和手机之间的交互,以及人和电脑游戏之间的交互

弱交互性:比如说路由器,人们只会关心网络还在没,网连上没。才不会去管它怎么运行的,也不会去看它。

< 7 > 专用开发工具及开发环境

如 gcc 交叉编译器等

五、PDP控制系统的组成

< 1 > 硬件

微处理器存储器(内存、Flash等)I/O接口、输入输出设备等

< 2 > 软件

PDP操作控制系统(底层)BSP(board support package 板级支持包)应用领域软件(上层)

六、PDP程序的编译运行过程

从源代码到CPU执行过程:

嵌入式基础概念

在Linux里是elf二进制格式,它仅仅是二进制的一种格式,比如说在Windows,二进制可执行程序是exe格式。因为裸机程序是要烧录的,elf格式的二进制程序里有很多冗余的东西,所以用objcopy工具将其转化为Bin格式可烧录的文件

七、CPU设计方式产业发展

早期简单CPU,指令和功能都很有限,一般只能完成加减乘除运算。CISC年代,CPU功能扩展依赖于指令集的扩展,就是CPU的设计者设计了完成更多任务的指令供用户使用。指令集的扩展实质是CPU内部组合逻辑电路的扩展。比如说那时的Intel就是用的CISC,那时候比的就是谁的指令集多。

RISC年代,CPU仅提供此基础功能指令(譬如内存与寄存器通信指令,基本运算与判断指令等),功能扩展由使用CPU的人利用此基础构架来灵活实现,就是那些更高级的指令我们自己来写,比如说此基础构架只提供30条指令,自己人为利用这30条指令,用软件编程编出300条功能(当然这些都是在CPU外部人为编程完成的),而CISC就是类似直接给你提供300条指令。RISC迁移到也就是开发我们那时用的晶片,比如说ARM就是用的RISC。因为提供指令集的减少,RISC的CPU就比CISC的简单,组合逻辑电路就减少了,耗电就降下来了,CPU结构相对简单了价格也就便宜了。所以那时的手机、平板一般优先选择用RISC减少耗电。

八、什么是IO?什么是内存?

< 1 > 内存

内存是程序的运行场所,内存和CPU之间通过总线连接,CPU通过一定的地址来访问具体内存单元

< 2 > IO

IO 是输入输出接口,是CPU和其他外部设备(如串口、LCD、触摸屏、LED等)之间通信的道路。一般的IO就是指CPU的各种内部或外部外设

< 3 > IO 的访问方式

IO 指的是与COU连接的各种外设CPU访问各种外设有2种方式:一种是类似于访问内存的方式,即把外设的寄存器当做两个内存地址来读写,从而以访问内存相同的方式来操作外设,叫IO与内存统一编址方式(统一编制一般在RISC的CPU里,如ARM);另一种是使用专用的CPU指令来访问某种特定外设,叫IO与内存独立编址(独立编址有CISC的思想)。

< 4 > 内存的访问方式

内存通过CPU的数据总线来寻址定位,然后通过CPU数据总线来读写CPU的地址总线的位数是CPU设计时确认的,因此一款CPU所能寻址的范围是一定的,而内存是须要占用CPU的寻址空间的。内存与CPU的这种总线式连接方式是一种直接连接,优点是效率高访问快,缺点是资源有限,扩展性差。

九、冯诺依曼结构与哈佛结构

程序和数据都放在内存中,且不彼此分离的结构称为冯诺依曼结构。譬如Intel的CPU均采用冯诺依曼结构。程序和数据分开独立放在不同的内存块中,彼此完全分离的结构称为哈佛结构。譬如大部分的单片机(MCS51、ARM9等)均采用哈佛结构。常见的ARM(除ARM7外)都是哈佛结构哈佛结构保证了ARM CPU运行的稳定性和安全性,因此ARM适用于PDP领域哈佛结构也决定了ARM裸机程序(使用实地址即物理地址)的链接比较麻烦,必须使用复杂的链接脚本告知链接器如何组织程序;对于OS之上的应用领域(工作在虚拟地址之中)则不须要考虑这么多。所以裸机程序要写链接脚本,因为使用了实地址。而应用领域程序不用写链接脚本。

十、寄存器相关

< 1 > 什么是寄存器

寄存器属于CPU外设的硬件组成部分CPU可以像访问内存一样访问寄存器寄存器是CPU的硬件设计者制定的,目的是留作外设被编程控制的“活动开关”正如汇编指令集是CPU的编程接口API一样,寄存器是外设硬件的软件编程接口API。使用软件编程控制某一硬件,其实就是编程读写该硬件的寄存器。

< 2 > 通用寄存器和特殊功能寄存器

SoC中有2类寄存器:通用寄存器和SFR通用寄存器(ARM中有37个)是CPU的组成部分,CPU的很多活动都须要通用寄存器的支持和参与。SFR(special function register,特殊功能寄存器)不在CPU中,而存在于CPU的外设中,我们通过访问外设的SFR来编程操控那个外设,这就是硬件编程控制的方法。通用寄存器的功能在CPU设计的时候是没有定的,可以自己人为的去规定、使用;SFR寄存器的某一位具体能实现什么功能都是被定死的,无法改变的。

十一、内存和外存

< 1 > 内存(RAM)

即内部存储器,是用来运行程序的,作为程序运行的环境,因为内存是RAM随机存储的,CPU可以通过地址总线和它们相连接的。举例:DRAM、SRAM、DDR

< 2 > SRAM 和 DRAM

2.1 SRAM(静态内存)

缺点:容量小、价格高优点:不须要软件初始化,直接上电就能使用

2.2 DRAM(动态内存)

优点:容量大、价格低缺点:上电后不能直接使用,须要软件初始化后才能使用

2.3 总结

单片机中:内存需求量小,而且希望开发尽量简单,适合全部用SRAMPDP控制系统:内存需求量大,而且没有NorFlash等可启动介质PC机:内存需求量大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM

< 3 > 外存(ROM)

即外部存储器,用来存储东西的(程序、文档、数据等)

举例:硬盘、Flash(包含Nand、iNand… U盘、SSD)、光盘

< 4 > CPU与内存、外存的连接方式

CPU连接内存和外存的连接方式不同。

内存须要直接访问,所以是通过地址总线&数据总线的总线式访问方式连接的(好处是直接访问,随机访问;坏处是占用CPU的地址空间,大小受限)

举例:如下图所示CPU与内存连接是一根一根地址线相连接上的。有地址总线的条数决定它能访问内存的大小,所以一般总线的条数确认了,CPU能够访问的最大内存也就确认了,内存的大小一般是相对于其它的外存允许的地址范围大。

比如说此款晶片DRAM的起始地址从0X20000000到0X7FFFFFFF就是1G的大小,表示CPU在内存寻址最大为1G。再就是我那时使用的I.MX6ULL的内存大小是512MB,

那么

嵌入式基础概念
嵌入式基础概念

外存是通过CPU的外存接口来连接的(好处是不占用CPU的地址空间,坏处是访问速度没有总线式快,访问时序较复杂)

举例:如下图所示,这里NAND的范围是256MB,但这可不意味着CPU只能接256MB大小的NAND Flash,一般开发板上接的都是两个GB大小的NAND Flash,如果仅仅是两个NAND Flash就须要占用两个G的空间,和内存一样通过地址总线来接的,那基本是吃不消的。

所以外存是通过许多接口来连接的,所以对于如下晶片的设定,在连接NAND Flash的时候就只有256MB的空间大小,但还是能与两个G的NAND Flash连接上然后放到如下这么一段看起来比较小的空间里去。因为在非总线式连接里面,有两个接口程序的时序操作去访问它的。

嵌入式基础概念

< 5 > SoC常用外部存储器

5.1 Flash:电子式访问

NorFlash

特征:容量小、价格高。优点是可以和CPU直接总线式相连,CPU上电后可以直接读取,所以一般用作启动介质,启动代码烧写到NorFlash里,然后NorFlash接到地址总线上,一般接到CPU的SROM bank。

比如说台式机的bios就是一块Nor Flash,bios里面事先烧好了一段启动代码,用来启动。而且以前的板子就是含有一块NorFlash和一块NandFlash,NorFlash专门用来主板启动,启动后用NandFlash当硬盘。

NandFlash(跟硬盘一样)

特征:容量大、价格低。缺点是不能总线式访问,也就是说不能上电CPU直接读取,须要CPU先运行许多初始化软件,然后通过时序接口读写EMMC、iNand、moviNand

eMMC(PDPMMC卡,e表示embeded),也就是eMMC本身是两个晶片,但它类似是一张SD卡,你把EMMC卡当做晶片放在主板上,就相当于给开发板插了一张SD卡。EMMC卡、SD卡本身内部就有两个CPU,它自己内部就可以做许多处理,相当于给主板上的CPU减轻负担。oneNANDSD卡、TF卡、MMC卡eSSD

5.2 硬盘:机械式访问、磁存储原理

硬盘:通过机械式访问、磁存储原理、SATA是接口

SATA硬盘(SATA是一种接口)

————————————————

版权声明:本文为CSDN博主「万树不会古冬u」的原创文章,原文链接:https://blog.csdn.net/RedValkyrie/article/details/105421319

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务