嵌入式程序员必须了解的硬件知识(中文版)

嵌入式程序员必须了解的硬件知识(中文版)处理器芯片 – Processor Chip      单片机的处理器芯片是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

处理器芯片 – Processor Chip

     单片机的处理器芯片是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。车规级的芯片对于环境温度、振动、可靠性等方面的要求也比一般消费级芯片有更高的要求。

供电与接地 – Power Supply and Grounding

      单片机有供电接口与接地接口,供电接口采用直流供电,电压较低,常用的供电电压为DC5V或者DC3.3V。但是单片机的直流电压很多时候是由交流电压经过整流、滤波、稳压后得到,由于滤波不干净,所以直流电压中仍然会含有少许交流成分,就产生了纹波。并且以电池作为电源时也会因为负载的波动而产生纹波,即使使用最好的基准电压源器件,输出电压也难免会有纹波。如果单片机的供电电源出现干扰纹波,消除方法如下:

1、在交流电源端加装交流电源滤波器

2、直流电源加设LC滤波电路

3、在直流电源输出端加大滤波电容,消除电路的自激干扰

4、用金属屏蔽层封装电源单元电路并可靠的接地

      单片机的GND接口是作为单片机电路中的0V参考点

时钟 – Clock

       单片机能正常工作的必要条件之一就是时钟电路,时钟是单片机的脉搏,是单片机的驱动源,单片机工作是在统一的时钟脉冲控制下一拍一拍进行工作的,这个脉冲是由单片机控制器中的时序电路发出的,所以单片机就需要晶振。

       晶振的全称是石英晶体振荡器,是一种高精度和高稳定度的振荡器。通过一定的外接电路来生成频率和峰值稳定的正弦波。而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。

       单片机工作时,是一条一条地从ROM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。—个机器周期包括12个时钟周期。如果一个单片机选择了12兆赫兹晶振,它的时钟周期是1/12us,它的一个机器周期是12×(1/12)us,也就是1us。

      单片机的时钟信号由外部振荡和内部振荡两种方式得到:

内部时钟:一般采用使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容(C1、C2)即可,电容容量一般在15pF至50pF之间,对频率有微调作用。即构成了自激振荡器,发出的脉冲直接送入内部时钟电路。

注意:晶振和电容尽可能安装的与单片机引脚XTAL1和XTAL2靠近。主要是为了减少寄生电容,更好的保证振荡器稳定

外部时钟:将外部振荡脉冲接入XTAL1和XTAL2,即把已有的时钟信号引入单片机内,外部时钟方式适宜用来使单片机的时钟与外部信号一致。

      晶体振荡器的振荡信号从XTAL2端送入内部时钟电路,它将该振荡信号二分频,产生一个两相时钟信号P1和P2供单片机使用。时钟信号的周期称为状态时间S,它是振荡周期的2倍,P1信号在每个状态的前半周期有效,在每个状态的后半周期P2信号有效。CPU就是以两相时钟P1和P2为基本节拍协调单片机各部分有效工作的。

EXTAL 、XTAL分别是振荡器的输入和输出引脚。

多功能引脚 – Multi-function Pin

GPIO 通用输入输出引脚

      General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。(GPxCON用于选择引脚功能,GPxDAT用于读/写引脚数据;另外,GPxUP用于确定是否使用内部上拉电阻。)

不同系统间的GPIO的确切作用不同。通用常有下面几种:

1.输出值可写(高=1,低=0)。一些芯片也可以选择驱动这些值的方式,以便支持“线-或”或类似方案(开漏信号线)。

2.输入值可读(1,0)。一些芯片支持输出管脚回读,这在线或的情况下非常有用(以支持双向信号线)。GPIO控制器可能具有一个输入防故障/防反跳逻辑,有时还会有软件控制。

3.输入经常被用作中断信号,通常是边沿触发,但也有可能是电平触发。这些中断可以配置为系统唤醒事件,从而将系统从低功耗模式唤醒。

4.一个GPIO经常被配置为输入/输出双向,根据不同的产品单板需求,但也存在单向的情况。

5.大多是GPIO可以在获取到spinlock自旋锁时访问,但那些通过串行总线访问的通常不能如此操作(休眠的原因)。一些系统中会同时存在这两种形式的GPIO。

6.在一个给定单板上,每个GPIO用于一个特定的目的,如监控MMC/SD卡的插入/移除,检查卡写保护状态,驱动LED,配置发送器,串行总线位拆,触发一个硬件看门狗,触发一个开关之类的。

GPIO优点:

低功耗:GPIO具有更低的功率损耗(大约1μA,μC的工作电流则为100μA)。

集成IIC从机接口:GPIO内置IIC从机接口,即使在待机模式下也能够全速工作。

小封装:GPIO器件提供最小的封装尺寸 ― 3mm x 3mm QFN!

低成本:不用为没有使用的功能买单。

快速上市:不需要编写额外的代码、文档,不需要任何维护工作。

灵活的灯光控制:内置多路高分辨率的PWM输出。

可预先确定响应时间:缩短或确定外部事件与中断之间的响应时间。

更好的灯光效果:匹配的电流输出确保均匀的显示亮度。

布线简单:仅需使用2条就可以组成IIC总线或3条组成SPI总线。

PWM

PWM的全称是脉冲宽度调制(Pulse-width modulation),是通过将有效的电信号分散成离散形式从而来降低电信号所传递的平均功率的一种方式;

所以根据面积等效法则,可以通过对改变脉冲的时间宽度,来等效的获得所需要合成的相应幅值和频率的波形,这里有两个要点:

1)PWM方波的周期是固定的。无论我们使用单片机、树莓派或者PLC,在让其产生PWM波形之前,都首先要设置波形的周期。比如可以是100ms,也可以是50us等等。一旦该时间值确定,其波形的周期就确定了,不会在波形的产生过程中发生更改,除非你停止PWM功能再次更改周期值;

2)PWM方波的宽度是可以调节的。这里的宽度,是指方波中高电平持续的时间,显然,这个时间的范围是0方波的周期,也就是周期时间的0100%。这种改变方波脉冲宽度的技术,就是脉冲宽度调制(PWM)技术。

pwm的频率: 是指1秒钟内信号从高电平到低电平再回到高电平的次数(一个周期); 也就是说一秒钟PWM有多少个周期 单位: Hz 表示方式: 50Hz 100Hz
pwm的周期: T=1/f 周期=1/频率 50Hz = 20ms 一个周期 ,如果频率为50Hz ,也就是说一个周期是20ms 那么一秒钟就有 50次PWM周期
占空比: 是一个脉冲周期内,高电平的时间与整个周期时间的比例 单位: % (0%-100%) 表示方式:20%

嵌入式程序员必须了解的硬件知识(中文版)

周期: 一个脉冲信号的时间 ,1s内测周期次数等于频率

脉宽时间: 高电平时间
上图中 脉宽时间占总周期时间的比例,就是占空比  比方说周期的时间是10ms,脉宽时间是8ms 那么低电平时间就是2ms 总的占空比 8/8+2= 80%
这就是占空比为80%的脉冲信号
PWM通过调节占空比,就可以调节脉冲宽度(脉宽时间) 的频率,就是单位时间内脉冲信号的次数,频率越大 ,以20Hz 占空比为80% 举例 就是1秒钟之内输出了20次脉冲信号 每次的高电平时间为40ms

嵌入式程序员必须了解的硬件知识(中文版)

上图中,周期为T,T1为高电平时间,T2 为低电平时间

单片机的IO口输出的是数字信号,IO口只能输出高电平和低电平
假设高电平为5V 低电平则为0V 那么我们要输出不同的模拟电压,就要用到PWM,通过改变IO口输出的方波的占空比从而获得使用数字信号模拟成的模拟电压信号
我们知道,电压是以一种连接1或断开0的重复脉冲序列被夹到模拟负载上去的(例如LED灯,直流电机等),连接即是直流供电输出,断开即是直流供电断开。通过对连接和断开时间的控制,理论上来讲,可以输出任意不大于最大电压值(即0~5V之间任意大小)的模拟电压
比方说 占空比为50% 那就是高电平时间一半,低电平时间一半,在一定的频率下,就可以得到模拟的2.5V输出电压 那么75%的占空比 得到的电压就是3.75V**
**

嵌入式程序员必须了解的硬件知识(中文版)

pwm的调节作用来源于对“占周期”的宽度控制,“占周期”变宽,输出的能量就会提高,通过阻容变换电路所得到的平均电压值也会上升,“占周期”变窄,输出的电压信号的电压平均值就会降低,通过阻容变换电路所得到的平均电压值也会下降 ,也就是,在一定的频率下,通过不同的占空比 即可得到不同的输出模拟电压 ,pwm就是通过这种原理实现D/A转换的。

比如下面这张图:T是波形的周期,它是固定值;在一个周期中,脉冲的宽度是不同的,有三种:25%、50%和75%,这就是通过PWM技术产生不同脉冲宽度的波形。

嵌入式程序员必须了解的硬件知识(中文版)

PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换,让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。
对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。。

AD

AD:模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。

由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。

DA

DA:数模转换器,又称D/A转换器,简称DAC,它是把数字量转变成模拟的器件。D/A转换器基本上由4个部分组成,即权电阻网络、运算放大器、基准电源和模拟开关。模数转换器中一般都要用到数模转换器,模数转换器即A/D转换器,简称ADC,它是把连续的模拟信号转变为离散的数字信号的器件。

总线 地址总线和数据总线

      总线(Bus)一般指通过分时复用的方式,将信息以一个或多个源部件传送到一个或多个目的部件的一组传输线。是电脑中传输数据的公共通道。 按照功能划分,大体上可以分为地址总线和数据总线。有的系统中,数据总线和地址总线是复用的,即总线在某些时刻出现的信号表示数据而另一些时刻表示地址;而有的系统是分开的。

      总线可分成CPU总线,存储器总线,I/O通道总线和外围接口总线四个层次。每个层次的总线又分为地址总线、控制总线、数据总线等三种。地址总线和控制总线上的信号是由执行总线操作的主设备产生的,CPU和DMA控制器都有权控制总线。数据总线是为各部件之间提供数据传送的通路。只有在控制总线和地址总线的作用下,数据总线才有意义

数据总线技术指标:

  1、总线的带宽(总线数据传输速率) :程序总线的带宽指的是单位时间内总线上传送的数据量,即每钞钟传送MB的最大稳态数据传输率。与总线密切相关的两个因素是总线的位宽和总线的工作频率,它们之间的关系:

  总线的带宽=总线的工作频率*总线的位宽/8

  2、总线的位宽

  总线的位宽指的是总线能同时传送的二进制数据的位数,或数据总线的位数,即32位、64位等总线宽度的概念。总线的位宽越宽,每秒钟数据传输率越大,总线的带宽越宽。

  3、总线的工作频率

  总线的工作时钟频率以MHZ为单位,工作频率越高,总线工作速度越快,总线带宽越宽。

数据总线作用:

  数据总线是双向三态形式的总线,即他既可以把CPU的数据传送到存储器或I/O接口等其它部件,也可以将其它部件的数据传送到CPU。数据总线的位数是微型计算机的一个重要指标,通常与微处理的字长相一致。例如Intel 8086微处理器字长16位,其数据总线宽度也是16位。需要指出的是,数据的含义是广义的,它可以是真正的数据,也可以指令代码或状态信息,有时甚至是一个控制信息,因此,在实际工作中,数据总线上传送的并不一定仅仅是真正意义上的数据。

地址总线又称位址总线,属于一种电脑总线 (一部份),是由CPU 或有DMA 能力的单元,用来沟通这些单元想要存取(读取/写入)电脑内存元件/地方的实体位址。

地址总线作用:

  地址总线AB是专门用来传送地址的,由于地址只能从CPU传向外部存储器或I/O端口,所以地址总线总是单向三态的,这与数据总线不同。地址总线的位数决定了CPU可直接寻址的内存空间大小,比如8位微机的地址总线为16位,则其最大可寻址空间为2^16=64KB,16位微型机的地址总线为20位,其可寻址空间为2^20=1MB。一般来说,若地址总线为n位,则可寻址空间为2^n字节。

数据总线和地址总线的区别:

  数据总线:为各部件之间提供数据传送的通路。地址总线:控制器传送地址编码给存储器的通路,32位和64位指的是地址。

SPI总线

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一 种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

SPI优点:
支持全双工通信
通信简单
数据传输速率快

缺点:
没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据可靠性上有一定的缺陷。

特点:
1):高速、同步、全双工、总线式
2):主从机通信模式(MCU与外设)

协议通信时序详解:
1):SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共
有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。
(1)SDO/MOSI – 主设备数据输出,从设备数据输入;
(2)SDI/MISO – 主设备数据输入,从设备数据输出;
(3)SCLK – 时钟信号,由主设备产生;
(4)CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设
备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。

2):需要说明的是,我们SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们
可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:
Mode0:CPOL=0,CPHA=0
Mode1:CPOL=0,CPHA=1
Mode2:CPOL=1,CPHA=0
Mode3:CPOL=1,CPHA=1

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿:
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

例如:
CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的
SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是保持高电平要么是保持低电平。

I2C总线

I2C是Inter-Integrated Circuit的简称,读作:I-squared-C。由飞利浦公司于1980年代提出,为了让主板、嵌入式系统或手机用以连接低速周边外部设备而发展。

主要用途:

SOC和周边外设间的通信(如:EEPROM,电容触摸芯片,各种Sensor等)。

I2C总线只使用两条双向漏极开路的信号线(串行数据线:SDA,及串行时钟线:SCL),并利用电阻上拉。I2C总线仅仅使用SCL、SDA两根信号线,就实现了设备间的数据交互,极大地简化了对硬件资源和PCB板布线空间的占用。I2C总线广泛应用在EEPROM、实时时钟、LCD、及其他芯片的接口。I2C允许相当大的工作电压范围,典型的电压基准为:+3.3V或+5V。

SCL(Serial Clock):串行时钟线,传输CLK信号,一般是主设备向从设备提供
SDA(Serial Data):串行数据线,传输通信数据

I2C总线通信协议

时序:在通信中时序是通信线上按时间顺序发生的电平变化,及这些电平变化对通信的意义。

每个通信周期都由一个起始位开始通信,由一个结束位结束通信,中间部分是传递的数据。

每个通信周期,主设备会先发8位的从设备地址(从设备地址由高7位的实际从设备地址和低1位的读/写标志位组成),主设备以广播的形式发送从设备地址,I2C总线上的所有从设备收到地址后,判断从设备地址是否匹配,不匹配的从设备继续等待,匹配的设备发出一个应答信号。

同一时刻,主设备、从设备只能有一个设备发送数据。

起始位和结束位

I2C总线通讯由起始位开始通讯,由结束位停止通讯,并释放I2C总线。起始位和结束位都由主设备发出。
起始位(S) :在SCL为高电平时,SDA由高电平变为低电平
结束位(P) :在SCL为高电平时,SDA由低电平变为高电平

如下图所示:

嵌入式程序员必须了解的硬件知识(中文版)

数据格式与应答

I2C数据以字节(即8bits)为单位传输,每个字节传输完后都会有一个ACK应答信号。应答信号的时钟是由主设备产生的。

应答(ACK) :拉低SDA线,并在SCL为高电平期间保持SDA线为低电平
非应答(NOACK) :不要拉低SDA线(此时SDA线为高电平),并在SCL为高电平期间保持SDA线为高电平

在传输期间,如果从设备来不及处理主设备发送的数据,从设备会保持SCL线为低电平,强迫主设备等待从设备释放SCL线,直到从设备处理完后,释放SCL线,接着进行数据传输。

如下图所示:

嵌入式程序员必须了解的硬件知识(中文版)

数据传输通讯

1)写数据

开始数据传输后,先发送一个起始位(S),主设备发送一个地址数据(由7bit的从设备地址,和最低位的写标志位组成的8bit字节数据,该读写标志位决定数据的传输方向),然后,主设备释放SDA线,并等待从设备的应答信号(ACK)。每一个字节数据的传输都要跟一个应答信号位。数据传输以停止位(P)结束,并且释放I2C总线。

2)读数据

开始通讯时,主设备先发送一个起始信号(S),主设备发送一个地址数据(由7bit的从设备地址,和最低位的写标志位组成的8bit字节数据),然后,主设备释放SDA线,并等待从设备的应答信号(ACK),从设备应答主设备后,主设备再发送要读取的寄存器地址,从设备应答主设备(ACK),主设备再次发送起始信号(Sr),主设备发送设备地址(包含读标志),从设备应答主设备,并将该寄存器的值发送给主设备;

读取单字节数据
主设备要读取的数据,如果是只有一个字节的数值,就要结束应答,主设备要先发送一个非应答信号(NOACK),再发送结束信号(P);
读取多字节数据
主设备要读取的数据,如果是大于一个字节的多个数据,就发送ACK应答信号(ACK),而不是非应答信号(NOACK),然后主设备再次接收从设备发送的数据,依次类推,直到主设备读取的数值是最后一个字节数据后,需要主设备给从设备发送非应答信号(NOACK),再发送结束信号(P),结束I2C通讯,并释放I2C总线。

嵌入式程序员必须了解的硬件知识(中文版)

注意:所有的数据传输过程中,SDA线的电平变化必须在SCL为低电平时进行,SDA线的电平在SCL线为高电平时要保持稳定不变。如下图所示:

嵌入式程序员必须了解的硬件知识(中文版)

SPI总线和I2C总线的异同点:

1:I2C总线是半双工,2根线SCL SDA;SPI总线实现全双工,4根线SCK CS MOSI MISO。

2:I2C是多主机总线,通过SDA上的地址信息来锁定从设备(每次只有一个主机控制总线);SPI只有一个主设备,主设备通过CS片选来确定从设备。

3:I2C总线传输速度100Kbps—-4Mbps;SPI可达30Mbps以上。

4:I2C总线空闲时SDA SCL都是高电平,SPI总线空闲状态由CPOL(时钟极性)决定。

5:I2C高电平时SDA下降沿标志传输开始,上升沿标志传输结束;SPI总线CS拉低标志传输开始,CS拉高标志传输结束。

6:I2C总线SCL高电平采样;SPI具体根据CPHA(时钟相位)决定,一般情况下,master device是SCK的上升沿发送,下降沿采集。

7:I2C和SPI总线数据传输都是MSB(最高有效位)在前,LSB在后(串口是LSB在前)。

8:I2C总线和SPI总线时钟都是由主设备产生,并且只在数据传输时发出时钟。

9:I2C总线读写时序比较固定统一,设备驱动编写方便。SPI总线不同从设备datasheet来实现读写,相对复杂一些。

UART总线

      UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。

UART是一个大家族,其包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同。

嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。常用的就三根引线:发送线TX、接收线RX、电平参考地线GND。

嵌入式程序员必须了解的硬件知识(中文版)

功能:计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。

        它是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入输出数据的缓冲区,比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。

通信协议:UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。

嵌入式程序员必须了解的硬件知识(中文版)

其中各位的意义如下:

起始位:先发出一个逻辑”0″的信号,表示传输字符的开始。

资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。

奇偶校验位:资料位加上这一位后,使得”1″的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。

停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。 由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。

空闲位:处于逻辑”1″状态,表示当前线路上没有资料传送。

波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。

CAN总线

CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种能够实现分布式实时控制的串行通信网络。
优点:
传输速度最高到1Mbps,通信距离最远到10km,无损位仲裁机制,多主结构。
低成本:ECUs通过单个CAN接口进行通信,布线成本低。 
高集成:CAN总线系统允许在所有ECUs上进行集中错误诊断和配置。 
可靠性:该系统对子系统的故障和电磁干扰具有很强的鲁棒性,是汽车控制系统的理想选择。
高效率:可以通过id对消息进行优先级排序,以便最高优先级的id不被中断。
灵活性:每个ECU包含一个用于CAN总线收发芯片,随意添加CAN总线节点。

CAN总线网络:

嵌入式程序员必须了解的硬件知识(中文版)

CAN总线网络主要挂在CAN_H和CAN_L,各个节点通过这两条线实现信号的串行差分传输,为了避免信号的反射和干扰,还需要在CAN_H和CAN_L之间接上120欧姆的终端电阻。(为什么是120Ω,因为电缆的特性阻抗为120Ω,为了模拟无限远的传输线。)

CAN收发器:

CAN收发器的作用是负责逻辑电平和信号电平之间的转换。

嵌入式程序员必须了解的硬件知识(中文版)

即从CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上,CAN总线上的节点都可以决定自己是否需要总线上的数据。具体的引脚定义如下:

嵌入式程序员必须了解的硬件知识(中文版)

CAN信号表示:

CAN总线采用不归零码位填充技术,也就是说CAN总线上的信号有两种不同的信号状态,分别是显性的(Dominant)逻辑0和隐形的(recessive)逻辑1,信号每一次传输完后不需要返回到逻辑0(显性)的电平。

嵌入式程序员必须了解的硬件知识(中文版)

显性与隐性电平的解释:
CAN的数据总线有两条,一条是黄色的CAN_High,一条是绿色的CAN_Low。当没有数据发送时,两条线的电平一样都为2.5V,称为静电平,也就是隐性电平。当有信号发送时,CAN_High的电平升高1V,即3.5V,CAN_Low的电平降低1V,即1.5V。
按照定义的:
CAN_H-CAN_L < 0.5V 时候为隐性的,逻辑信号表现为”逻辑1″- 高电平。  CAN_H-CAN_L > 0.9V 时候为显性的,逻辑信号表现为”逻辑0″- 低电平。

CAN信号传输 :
发送过程: CAN控制器将CPU传来的信号转换为逻辑电平(即逻辑0-显性电平或者逻辑1-隐性电平)。CAN发射器接收逻辑电平之后,再将其转换为差分电平输出到CAN总线上。

嵌入式程序员必须了解的硬件知识(中文版)

接收过程:  CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。

嵌入式程序员必须了解的硬件知识(中文版)

CAN数据传输:

CAN总线传输的是CAN帧,CAN的通信帧分成五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。

数据帧根据仲裁段长度不同分为标准帧(2.0A)和扩展帧(2.0B)

嵌入式程序员必须了解的硬件知识(中文版)

帧起始

由一个显性位(低电平)组成,发送节点发送帧起始,其他节点同步于帧起始;

帧结束

由7个隐形位(高电平)组成。

嵌入式程序员必须了解的硬件知识(中文版)

仲裁段
只要总线空闲,总线上任何节点都可以发送报文,如果有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。但是CAN使用了标识符的逐位仲裁方法可以解决这个问题。
CAN总线控制器在发送数据的同时监控总线电平,如果电平不同,则停止发送并做其他处理。如果该位位于仲裁段,则退出总线竞争;如果位于其他段,则产生错误事件。

嵌入式程序员必须了解的硬件知识(中文版)

帧ID越小,优先级越高。由于数据帧的RTR位为显性电平,远程帧为隐性电平,所以帧格式和帧ID相同的情况下,数据帧优先于远程帧;由于标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。

嵌入式程序员必须了解的硬件知识(中文版)

数据段

一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,非常适合汽车和工控应用场合如图27所示。

嵌入式程序员必须了解的硬件知识(中文版)

数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。

中断

      中断,即CPU在正常执行程序的过程中,遇到外部/内部的紧急事件需要处理,暂时中断(中止)当前程序的执行,而转去为事件服务,待服务完毕,再返回到暂停处(断点)继续执行原来的程序。

嵌入式程序员必须了解的硬件知识(中文版)

嵌入式程序员必须了解的硬件知识(中文版)

嵌入式程序员必须了解的硬件知识(中文版)

其他非通用功能 Capsense

      CapSense触摸感应技术是Cypress半导体使用CY8C21x34系列PSoC芯片开发的、用于触摸式按键、触摸式滚动条(Slider)、触摸式平板(Touchpad)的触摸感应技术。它利用PSoC的CY8C21x34系列芯片一些特有的资源,根据电容感应的原理和松弛震荡器的技术实现触摸感应。区别于其他触摸感应技术,CapSense技术具有几乎不需要外围元件,每一个按键的灵敏度可单独调整,一个芯片可同时实施触多个触摸式按键和触摸式滚动条等优点。

      CapSense技术是根据电容感应的原理和松弛震荡器来实现触摸感应。PCB板上相邻的导线或铜箔之间存在寄生电容Cp。当有手指接近或触摸铜箔时,相当于附加了两个电容,这两个电容等效于并联在Cp上的一个电容Cf。如果在手指与铜箔之间有不导电的介质,它将影响Cf。介质越厚、介质的介电常数εr越小,对它的影响就越大。

补充知识:

寄生电容:本来没有在那个地方设计电容,但由于布线之间总是有互容,互容就好像是寄生在布线之间的一样,所以叫寄生电容,又称杂散电容。

电平信号和差分信号:

      电平信号和差分信号是用来描述通信线路传输方式的,即如何在通信线路上表达1和0。

      电平信号的传输线中有一个参考电平线(一般是GND),然后信号线上的信号值是由信号线电平和参考电平线的电压差决定。

      差分信号的传输线中没有参考电平,所有都是信号线,1和0的表达依靠信号线之间的电压差。

      电平信号的2根通信线之间的电平差异容易受到干扰,传输容易失败;差分信号不容易受到干扰因此传输质量比较稳定,现代通信一般都使用差分信号。

发送方和接收方按照同一个时钟节拍工作就叫同步;发送方和接收方按照自己的节拍工作就叫异步;

同步通信中,通信双方按照统一节拍工作,所以配合很好;一般需要发送方给接收方发送信息同时发送时钟信号,接收方根据发送方给它的时钟信号来安排自己的节奏。同步通信用在通信双方信息交换频率固定,或者经常通信时。

异步通信又叫异步通知。在双方通信的频率不固定时(有时3ms收发一次,有时3天才收发一次)不适合使用同步通信,而适合异步通信。异步通信时接收方不必一直在意发送方,发送方需要发送信息时会首先给接收方一个信息开始的起始信号,接收方接收到起始信号后就认为后面紧跟着的就是有效信息,才会开始注意接收信息,直到收到发送方发过来的结束标志。

并行接口和串行接口:

  • 串行、并行主要是考虑通信线的根数,就是发送方和接收方同时可以传递的信息量的多少;

  • 譬如在电平信号下,1根参考电平线+1根信号线可以传递1位二进制;如果我们有3根线(2根信号线+1根参考线)就可以同时发送2位二进制;如果想同时发送8位二进制就需要9根线。在差分信号下,2根线(彼此差分)可以同时发送1位二进制;如果需要同时发送8位二进制,需要16根线。

  • 似乎并行接口比串行接口要快(串行接口一次只能发送1位二进制,而并行接口一次可以发送多位二进制)要更优秀;但是实际上串行接口才是王道,用的比较广。因为更省信号线,而且对传输线的要求更低、成本更低;而且串行时可以通过提高通信速度来提高总体通信性能,不一定非得要并行。经过这么多年发展,最终胜出的是:异步、串行、差分,譬如USB和网络通信

RS232电平和TTL电平:

(1)电平信号是用信号线电平减去参考线电平得到电压差,这个电压差决定了传输值是1还是0。

(2)在电平信号时多少V代表1,多少V代表0不是固定的,取决于电平标准。

  • 譬如RS232电平中-3V~-15V表示1;+3~+15V表示0;TTL电平则是+5V表示1,0V表示0。
  • RS232的电平定义比较大,适合干扰大、距离远的情况;TTL电平电压范围小,适合距离近且干扰小的情况。
  • 台式电脑后面的串口插座就是RS232接口的,在工业上用串口时都用这个,传输距离小于15米;TTL电平一般用在电路板内部两个芯片之间。

今天的文章嵌入式程序员必须了解的硬件知识(中文版)分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13813.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注