一、计算机组成基础

1、CPU、MPU、MCU、SOC的区别

1、CPU(Central Processing Unit),是一台计算机的运算核心和控制核心。CPU由运算器、控制器和寄存器及实现它们之间联系的数据、控制及状态的总线构成。差不多所有的CPU的运作原理可分为四个阶段:提取(Fetch)、解码(Decode)、执行(Execute)和写回(Writeback)。 CPU从存储器或高速缓冲存储器中取出指令,放入指令寄存器,并对指令译码,并执行指令。所谓的计算机的可编程性主要是指对CPU的编程。

2、MPU (Micro Processor Unit),叫微处理器(不是微控制器)

  • 是具有CPU的硅芯片(可理解为增强版CPU),能依据厂商预定义的指令集执行算数和逻辑运算
  • 非独立单元,需要结合其他芯片(定时器芯片、存储器芯片、中断控制器等)才能完成所需功能;
  • 不含I/O端口。需要在外部可编程外设接口芯片(eg 8255)辅助下,才能实现I/O端口功能。
  • 通用设计领域:不是为任何已有的特定计算目的而设计的芯片;
  • 面相高端市场,重点关注性能;这种芯片往往是个人计算机和高端工作站的核心CPU;
  • 与MCU相比,功耗节省方面的设计较少;
  • Intel X86,ARM的一些Cortex-A芯片如飞思卡尔i.MX6、全志A20、TI AM335X等都属于MPU。

3、MCU(Micro Control Unit),叫微控制器,又称单片微型计算机或者单片机。是指随着大规模集成电路的出现及其发展,将计算机的CPU、RAM、ROM、定时计数器和多种I/O接口集成在一片芯片上,形成芯片级的芯片,比如51,AVR、Cortex-M这些芯片,内部除了CPU外还有RAM、ROM,可以直接加简单的外围器件(电阻,电容)就可以运行代码了。而如x86、ARM这些MPU就不能直接放代码了,它只不过是增强版的CPU,所以得添加RAM,ROM。

大多数情况下4位MCU应用于计算器、汽车仪表、汽车防盗装置、呼叫器、无线电话、CD播放器、液晶显示控制器、液晶游戏机、儿童玩具、磅秤、充电器、胎压仪、温湿度计、遥控器和傻瓜照相机等;8位MCU应用于电表、电机控制器、电动玩具机、变频冷气机、呼叫器等等。其中,8位、16位单片机主要应用于一般的控制领域,一般不用操作系统。而16位MCU主要应用于行动电话、数码相机和摄录机等;大多数32位MCU应用于Modem、GPS、PDA、HPC、STB、Hub.Bridge、Router工作站、ISDN电话、激光打印机及彩色传真机;通常使用64位嵌入式操作系统进行网络操作、多媒体处理等复杂处理的情况。

4、SOC(System on Chip),指的是片上系统,MCU只是芯片级的芯片,而SOC是系统级的芯片,它既像MCU(51,avr)那样有内置RAM、ROM同时又像MPU那样强大,不单单是放简单的代码,可以放系统级的代码,也就是说可以运行操作系统(将就认为是MCU集成化与MPU强处理力各优点二合一)。

参考:
https://www.21ic.com/jichuzhishi/mcu/questions/2017-06-22/725474.html

2、大/小端 vs LSB/MSB first

大小端和LSB MSB本质区别:排序的单位不同,大小端以字节(B,Byte)为单位,而LSB/MSB以位(b,bit)为单位。

LSB(Least Significant Bit),意为最低有效位;【从低位(个位)开始读就是小端】
MSB(Most Significant Bit),意为最高有效位。【从高位开始读就是大端】

以位为单位。LSB first表示顺序(0:31),MSB first表示逆序(31:0)。
通常,一个芯片的管脚中,对于一个多比特的信号,比如32根的地址线,从低开始按0到31编个号。MSB就是31,LSB就是0。
那么如果标记为:ADDR[31:0]就是MSB first的方式,如果标记为ADDR[0:31]就是LSB first的方式。LSB和MSB是以机器码【就是bit吧?】为单位进行排序。

大端(Big-endian):数据的高位字节存放在地址的低端 低位字节存放在地址高端;
小端(Little-endian):数据的高位字节存放在地址的高端 低位字节存放在地址低端;

以字节为单位。大端通俗的理解就是赋值数从左自右;小端则是从右自左。
eg:十六进制的地址 0x12345678,每个数是4位,共32位
[地址]低地址——>高地址 0x00000001 0x00000008 0x00000010 0x00000018 ,每个地址都存储8bit
[数据]高字节——>低字节 0x00000012 0x00000034 0x00000056 0x00000078
大端:高字节在低地址,即顺序存储,0x00000012 0x00000034 0x00000056 0x00000078
小端:低字节在低地址,即逆序存储,0x00000078 0x00000056 0x00000034 0x00000012
【这个逆序不是完全逆序,而是以字节为单位逆序,而字节内是正序!】

在芯片中应当留意寄存器是否有LSB或者MSB的字样,有的话应当对数据的序列进行改写,这几天就被这坑,坑了一段时间,因为之前一直没有接触过LSB和MSB,可是接触过大小端的概念,先入为主的想法,让我在一个简单的问题困扰许久。现在才发现理论知识是相当重要,特别是许多数据手册上它们对一些常识是有时候没有进行说明的,因此,这就需要我们平时多积累,网上也是没有大神特别整理这些常识性的东西。开源资料较少,这个我感觉就是硬件编程比软件编程比较明显鸡肋的地方吧。。。

举个例子

题:
时间用48位表示,板卡采用LSB first,传输采用小端。已知时间0x123456789ABC,求(1)板卡引脚的值(2)传输编码

答:
(1)板卡各引脚的值如下表

值(16进制) 1 2 ... B C
值(2进制) 0001 0010 ... 1011 1100
引脚位置 0~3 4~7 ... 40~43 44~47

(2)传输编码如下
0xBC9A78563412

参考:
https://blog.csdn.net/anbaixiu/article/details/78487910

3、寄存器

(1)PC vs IP

PC是Program+Counter的缩写,翻成中文是程序计数器,它是CPU中的寄存器,作用是用于指示计算机在其程序序列中的位置。
在Intel x86和Itanium微处理器中,它叫做指令指针(Instruction pointer IP),有时又称为指令地址寄存器(Instruction address register IAR)、指令计数器或只是指令序列器的一部分。
由此可知PC就像我们每个家庭里都有儿子(PC),这个儿子在老张(Intel x86和Itanium微处理器)家就叫张三(IP)。

参考:
https://blog.csdn.net/LightUpHeaven/article/details/126648569

4、冯诺依曼结构 vs 哈佛结构

冯诺依曼结构:程序和数据在一个存储器

  • 指令和数据共用一个存储器,指令线和数据线是共用的,为区分二者采用分时复用技术。也就是说,指令和数据只能顺序发送、不能同时进行,指令运行速度受限,典型的以时间换空间
  • 优点是指令丰富、功能较强。
  • 采用该结构的微处理器MPU有Intel公司的8051系列(51单片机)、Motorola公司的M68HC系列、Atmel公司的AT89系列等等
  • 冯诺依曼结构的瓶颈:由于存储器速度很慢,CPU只能被迫等待存储器读写数据,因此遏制了CPU的吞吐量,限制了计算机速度。哈佛结构对指令进行了优化,比冯诺依曼结构要快一些,但仍然逃不出大的存储器瓶颈

哈佛结构:程序和数据分离,在两个存储器

  • 执行指令时,取指令和取数据同时进行。一般指令线宽于数据线。
  • 微处理器指令大多是字节指令,大大提高了程序存储器的空间利用率,有利于实现超小型化
  • 采用该结构的微处理器MPU有Microchip公司的PIC系列、Zilog公司的Z86系列、Atmel公司的AT90S系列等等

ARM有许多系列,如ARM7,ARM9,ARM10E,XScale,Cortex等,其中哈佛结构、冯诺依曼结构都有。

  • 如控制领域最常用的ARM7系列是冯诺依曼结构,
  • 而Cortex-M3系列(STM芯片的ARM处理器内核)是哈佛结构。

5、处理器架构+指令集

CISC复杂指令集:8051(51单片机),x86
RISC精简指令集:ARM,MIPS,RISC-V

6、STM内核系列

性能由高到低:Cortex-A(手机,Linux),-R(实时性),-M(性价比高)
学习顺序:从M系列学起,然后学A。

参考:
https://www.bilibili.com/video/BV1bv4y1R7dp/?p=2

7、接口

EMIF(External Memory Interface)外部存储器接口,外存接口
PLL(Phase-Locked Loop)锁相环路,简称锁相环,是一种反馈控制电路。PLL可以把芯片内部的高频不规则时钟与外部晶振的低频规则时钟,调成一个高频规则时钟。

  • 芯片的时钟可以自己产生,可以由几个反相器接在一起构成一个简单的振荡器产生时钟,它的频率可以到很快的速度,但是时钟周期却没那么固定,一会快一会慢的。
  • 而从芯片外面来的晶振一般具有稳定的时钟周期,但频率低,只能是在兆赫兹的量级。
  • PLL就是利用外部晶振作为参考时钟,来输出一个周期稳定的高频率的时钟,这个时钟供芯片的时序电路使用。可以说PLL是整个芯片的源头,从PLL出来的时钟我们认为就是干净的、后端可以直接用的时钟了。

参考:
https://blog.csdn.net/qq_40700822/article/details/106098102
https://zhuanlan.zhihu.com/p/453753255

8、开发板vs评估板

开发板development boards(demo board?)

开发板,是用来进行嵌入式系统开发的电路板,包括中央处理器、存储器、输入设备、输出设备、数据通路/总线和外部资源接口等一系列硬件组件。
常见的开发板有51、ARM、FPGA、DSP开发板。

开发板一般由嵌入式系统开发者根据开发需求自己订制,也可由用户自行研究设计。
开发板是为初学者了解和学习系统的硬件和软件,同时部分开发板也提供的基础集成开发环境和软件源代码和硬件原理图等。

嵌入式系统开发,
要先选定满足自己开发所需型号CPU、FPGA、DSP,
其次根据选定型号的CPU、FPGA、DSP等选择支持选定芯片的开发板范围。
再次,优选开发板提供的开发环境及技术支持的能力和水平。
最后还要考虑开发板板子除了集成CPU、FPGA、DSP等之外,还需要较完善输入及输出的界面,如键盘和LCD,程序下载接口、内存(RAM)、FlashROM、电源模块等。
同时为了开发初期的调试方便,还会引出几个特殊的引脚,如JTAG接口、USB和串口等,以供外接的调试模块所使用。

评估板evaluation boards

一般就是测试版,
很多软件都是评估版的,因为没有注册,想要注册是需要向软件商交费的,所以评估版软件会有许多的功能限制,
还有的是某些硬件的评估板,一般是用来测试用的,里面会有许多不稳定的因素,是需要向厂商反馈的。

参考:
https://zhidao.baidu.com/question/361137117207293852.html

9、芯片 vs 模组 vs 开发板

芯片:只含处理器内核及必要的电路,需要外接许多元件才能实现功能、不直接用于产品开发。
模组:以芯片为核心,增加一些必要的外围电路,如时钟源、FLASH存储器等,使其成为可独立工作的模块。模组是面向“产品”的,即模组最终会嵌入到电视、电冰箱、空调等不同的产品中去。
开发板:在模组基础上集成更多硬件,如USB、按键、LED灯等,为开发者提供一个方便程序下载、调试和演示的平台,更便捷,可直接用USB与电脑连接。开发板只是用于对模组进行测试和学习的工具。它不是产品的最终形态,而是“模组→产品”过程中的一个“临时中间变量”。最终用于产品中的是烧录测试学习时保留下来代码的模组,而不是开发板。
软件开发包(SDK):是针对某款芯片的开发,包含了实现芯片功能所需的完备软件集。因此,对于不同的开发板,只要用的是同一种芯片,SDK是相同的。

【搞明白了这个区别,我才懂了不同博主的实现方式的差异:
用开发板的,只是学习用,因为开发板贵、而且很多功能没用,所以我尽量不用这种方式。
郑羊羊是直接操作模组,还是比较厉害的。

无线关灯神器:https://www.cnblogs.com/sybil-hxl/p/17628595.html

二、网络+通信 基础

1、网络协议

(1)协议层次

一切通信网络都遵循OSI七层协议标准:Physical Data Net Transport Session Presentation Application

网络层次 协议
应用层 1553B
传输层 COM
数据链路层 USB,以太网双绞线
物理层 USB,以太网双绞线,高低电平

航天中用的1553B总线协议,属于应用层协议

USB,以太网双绞线

  • 属于物理层和数据链路层
  • USB(Universal Serial Bus),通用串行总线

(2)协议模式

协议是用来通信的,不管哪层协议,无非两种模式:拉pull和推push

pull是请求-响应模式,push是订阅模式。

很多协议都针对应用场景有了所谓“改进版”,就是从仅有拉模式,增加了推模式。

例如,WebSocket比Http“先进”,Telemetry比SNMP“先进”。
实际上不是真正的先进,只是更适合订阅这种应用场景,就说是先进了。

拉模式 推模式 协议层次
SNMP Telemetry 应用层
WebSocket Http 应用层
1553B 应用层

理解1553B:类比HTTP协议,RT是服务端,只能响应,BC是客户端。MT仅仅是收集记录总线上的信息,没有在HTTP中的对应角色。

2、网络传输单工、半双工、全双工

(1)单工

定义:单工数据传输只支持数据在一个方向上传输。

举例:意思就是A只能发信号,B只能接受信号,通信是单向的。类比于灯塔发发出光信号,航船只能接受信号。

(2)半双工

定义:半双工数据传输允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。

举例:指A 能发信号给B,B也能发信号给A,但这两个过程不能同时进行。可以想象一下对讲机,你收到的回复并不是都马上就有的。而且前提是双方不能在同一个状态,如果双方同时处于收状态,或同时处于发状态,便不能正常通信了。

计算机主机用串行接口连接显示终端时, 在半双工方式中,输入过程和输出过程使用同一通路 。有些计算机和显示终端之间采用半双工方式工作,这时,从键盘打入的字符在发送到主机的同时就被送到终端上显示出来,而不是用回送的办法, 所以避免了接收过程和发送过程同时进行的情况。

(3)全双工

定义:全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

举例:全双工比半双工又进了一步。在A 给B发信号的同时,B也可以给A发信号。典型的例子就是打电话,双方都能说,对方也能听到。

网卡的全双工是指网卡在发送数据的同时也能够接收数据,两者同步进行。网卡一般都支持全双工。对于全双工以太,IEEE 制订了802.3x 全双工 / 流控制标准,该标准对全双工方式下的流控制机制做了具体的规定。

(4)半双工和全双工区别

1、半双工传输模式采用载波侦听多路访问 /冲突检测。传统的共享型 LAN以半双工模式运行 ,线路上容易发生传输冲突。与集线器相连的节点(即多个节点共享一条到交换机端口的连接)必须以半双工模式运行。因为这种节点必须能够冲突检测,类似于单车道桥梁。

2 、全双工传输模式可以用于点到点以太网连接和快速以太网连接,同时不会发生冲突,因为他们使用双绞线中两条不同线路,类似于双车道桥梁。

3、一般在网卡的高级属性里可以修改网卡的双工类型,默认是自动协商。交换机上有Duplex灯,如果亮表示工作在全双工方式。绝大多数的交换机均能自动识别与支持双工方式,无需手工设置。

参考:
https://zhuanlan.zhihu.com/p/359300197

三、电路基础

posted on 2022-09-19 21:07  西伯尔  阅读(239)  评论(0编辑  收藏  举报