【学习笔记】html
UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器编程
串行、异步通讯、两条数据线、全双工发送和接收、点对点通讯。网络
在嵌入式系统中经常使用于主机与辅助设备之间的通讯(嵌入式领域应用普遍)异步
一、起始位:发送1位逻辑0(低电平),开始传输数据。
二、数据位:能够是5~8位的数据,先发低位,再发高位,通常常见的就是8位(1个字节),其余的如7位的ASCII码。
三、校验位:奇偶校验,将数据位加上校验位,1的位数为偶数(偶校验),1的位数4为奇数(奇校验),【校验位无关紧要,根据需求选择】
四、中止位:中止位是数据传输结束的标志,能够是1/1.5/2位的逻辑1(高电平)。
五、空闲位:空闲时数据线为高电平状态,表明无数据传输。分布式
发送的波特率和接受的波特率要保持一致,且为了不累计偏差,不能连续发送多个字节,这就是数据最多发送8位的缘由。性能
比特率的概念学习
UART传输速率的概念——比特率。优化
比特率的单位是bps,全称是bit per second,意为每秒钟传输的bit数量。ui
比特率9600bps,表明每秒钟传输bit的数量为9600,那么传输1bit数据的时间就是1/9600=104us,比特率115200bps,表明传输1bit数据的时间是8us。.net
交叉链接
设置引脚功能的本质:就是将引脚与相应的功能相链接,如链接到GPIO,或链接到UART
(1)设置发送引脚和接收引脚
(2)设置UART帧格式
(3)设置UART发送发送和接收模式
(4)设置UART的波特率
(1)等待发送寄存器为空
(2)将发送的数据写入发送寄存器
(1)判断接收寄存器是否接收到了数据
(2)若是接收到,则读取到寄存器
通常在开发中不多直接用串口进行编程,由于它存在不少问题,在实际应用中,一般用优化的UART:RS23二、RS485
一、电气接口不统一
UART只是对信号的时序进行了定义,而未定义接口的电气特性
(1)UART没有规定不一样器件链接时链接器的标准,因此不一样器件之间经过UART通讯时链接很不方便
(2)UART通讯时通常直接使用处理器使用的电平,即TTL电平,但不一样的处理器使用的电平存在差别,因此不一样的处理器使用UART通讯时通常不能直接相连。
二、抗干扰能力差
通常直接使用TTL(+5V等价于逻辑“1”,0V等价于逻辑“0”)信号表示0和1,可是TTL信号抗干扰能力较差,数据在传输过程当中很容易出错。
三、通讯距离极短
因为TTL信号的抗干扰能力差,因此其通讯举例也很短,通常只能用于一个电路板上的两个不一样芯片之间的通讯。
简介:这两个协议只是单纯的电气层面的协议,是依赖于串口UART的。
RS232协议是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家、计算机终端生产厂家共同制定的用于串行通信的标准。起初为25根线,后来被IBM简化为9根线,可是现代工业控制的RS-232接口通常只使用RXD、TXD、GND三条线。
改标准规定采用一个标准的链接器,标准中对链接器的每个引脚的做用加以规定,还对信号的电平加以规定。
逻辑“1”:电平为-5V到-15V
逻辑“0”:电平为+5V到+15V
选用该电气标准的目的在于提升抗干扰能力,增大通讯距离,其传送距离通常可达15m。
电平转换MAX232:能够把TTL信号和232信号相互转化,以延长通讯距离(15m)。
(1)接口信号电平值较高,容易损坏接口电路的芯片,又由于与TTL电平不兼容,因此须要使用电平转换芯片才能与TTL电路链接。
(2)通讯速度较低
(3)易产生共模干扰,抗噪声干扰性弱
(4)传输距离较短(15m)
(1)也是对串口在电气层面的改良,相比于RS232,RS485提升了抗干扰能力,而且极大加强了通讯的距离(1500m)
(2)具备多站能力,这样能够利用单一的RS485接口方便的创建起一个设备网络。不在是点对点的通讯,而是相似于IIC同样能够挂不少芯片设备,从而组成一个网络。
采用双绞线,用两根线的差分电压值高低表示逻辑电平,并消除共模干扰。
因为两根线传输差分信号,因此发送和接收不能同时进行,故只能采用半双工的方式工做。
电平转换:
因为处理器产生的信号通常都是TTL信号并非符合RS485标准的信号,因此通常还须要再处理器外部去添加电路将TTL信号转换成差分信号。
(1)接口信号电平值较低,不易损坏接口电路的芯片,且与TTL电平兼容,可方便地与TTL电路链接。
(2)通讯速度快
(3)抗噪声干扰强
(4)传输距离较远(1500m)
(5)可实现多节点组网
IIC(Inter-Integrated Circuit)实际上是IICBus简称,因此中文应该叫集成电路总线。由飞利浦公司推出。
串行、半双工、硬件结构简单、成本低、应用普遍、非点对点通讯。
近距离、低速芯片之间的通讯(抗干扰差,不能用于长距离)
数据线SDA:用于收发数据
时钟线SCL:用于通讯双方的时钟同步
把芯片的SCL接到总线SCL上,把芯片的SDA接到总线SDA上。
IIC总线是一种多主机总线,链接在总线的器件分为主机和从机,主机有权发起和结束一次通讯,而从机智能被呼叫。
当由多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误的产生。
每一个器件均可以做为主机或者从机,可是同一时刻只能由一个主机。总线上增长和删除器件,不影响其余器件正常工做。
每个链接到IIC总线上的器件都有一个惟一的地址(7bit)。
一个器件,当它接收数据的时候是做为接收器,发送数据的时候做为发送器。
(1)主机发送起始信号启用总线【其余主机接收到信号,知道总线被占用,则待机,从机接收到信号,准备好接收信号】
(2)主机发送第一个字节数据指明从机地址和后续字节的传送方向【高7bit指明从机地址,而最后第零位,用于肯定是主机给从机发送数据(0表示主机到从机)仍是从机给主机发送数据(1表示从机到主机)】
(3)被寻址的从机发送应答信号回应主机【其余从机闭嘴了】
(4)发送器发送一个字节的数据【发送器是谁,要看最后一位是0仍是1】
(5)接收器发送应答信号回应发送器
(...)循环步骤四、5【这两步和二、3两步本质上同样】【这两步的前提是主从机都已经肯定好了,即通讯过程当中改变不了方向】
(n)通讯完成后主机发送中止信号释放总线
第一个数据必须是主机给从机发,用于肯定地址和方向,后续的方向由字节的第一位决定。通讯过程当中能够连续发送无数个字节的数据,方向不容许改变。
整个过程就包含了四种信号:起始信号、发送一个字节、应答信号...、中止信号
起始信号:SCL为高电平时,SDA由高变低表示起始信号
中止信号:SCL为高电平时,SDA由低变高表示中止信号
起始信号和中止信号都是由主机发出,起始信号产生后总线处于占用状态,中止信号产生后总线处于空闲状态。
在起始信号和中止信号之间,用于已经作好应答的主从机之间的通讯,其余主机是不能启用总线的。
IIC总线通讯时每一个字节为8位长度,数据传输时先发高位、再发低位。
发送器每发完一个字节数据,接收器必须发送1位应答位来回应发送器,即一帧共有9位。
IIC总线协议:
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是一种可以实现分布式实时控制的串行通讯网络。
传输速度最高到1Mbps,通讯距离最远到10km,无损位仲裁机制,多主结构。近些年来,CAN控制器价格愈来愈低。
(1)低成本:ECUs经过单个CAN接口进行通讯,布线成本低。
(2)高集成:CAN总线系统容许在全部ECUs上进行集中错误诊断和配置。
(3)可靠性:该系统对子系统的故障和电磁干扰具备很强的鲁棒性,是汽车控制系统的理想选择。
(4)高效率:能够经过id对消息进行优先级排序,以便最高优先级的id不被中断。
(5 )灵活性:每一个ECU包含一个用于CAN总线收发芯片,随意添加CAN总线节点。
CAN的高性能和可靠性已被认同,并被普遍的应用与工业自动化、船舶、医疗设备、工业设备等方面。
CAN总线网络主要挂在CAN_H和CAN_L,各个节点经过这两条线实现信号的串行差分传输,为了不信号的反射和干扰,还须要在CAN_H和CAN_L之间接上120欧姆的终端电阻为何是120Ω,由于电缆的特性阻抗为120Ω,为了模拟无限远的传输线。
CAN收发器做用是负责逻辑电平和信号电平之间的转换
TXD:发送数据输入
RXD:接收数据输入
CANL:低电平CAN总线
CANH:高电平CAN总线
S:选择进入高速模式仍是静音模式
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控制器将CPU传来的信号转换为逻辑电平(即逻辑0-显性电平或者逻辑1-隐性电平)。CAN发射器接收逻辑电平以后,再将其转换为差分电平输出到CAN总线上。
接收过程: CAN接收器将CAN_H 和 CAN_L 线上传来的差分电平转换为逻辑电平输出到CAN控制器,CAN控制器再把该逻辑电平转化为相应的信号发送到CPU上。
CAN总线传输的是CAN帧,CAN的通讯帧分红五种,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。
其中数据帧根据仲裁段长度不一样分为标准帧(2.0A)和扩展帧(2.0B)
如下是数据帧的两种帧格式:
由一个显性(低电平)组成
由七个隐形位(高电平)组成
只要总线空闲,总线上任何节点均可以发送报文,若是有两个或两个以上的节点开始传送报文,那么就会存在总线访问冲突的可能。可是CAN使用了标识符的逐位仲裁方法能够解决这个问题。
CAN总线控制器在发送数据的同时监控总线电平,若是电平不一样,则中止发送并作其余处理。若是该位位于仲裁段,则退出总线竞争;若是位于其余段,则产生错误事件。
帧ID越小,优先级越高。因为数据帧的RTR位为显性电平,远程帧为隐性电平,因此帧格式和帧ID相同的状况下,数据帧优先于远程帧;因为标准帧的IDE位为显性电平,扩展帧的IDE位为隐形电平,对于前11位ID相同的标准帧和扩展帧,标准帧优先级比扩展帧高。
控制段共6位,标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;扩展帧控制段则由IDE、r一、r0和DLC组成
一个数据帧传输的数据量为0~8个字节,这种短帧结构使得CAN-bus实时性很高,很是适合汽车和工控应用场合
数据量小,发送和接收时间短,实时性高,被干扰的几率小,抗干扰能力强。
CAN-bus使用CRC校验进行数据检错,CRC校验值存放于CRC段。 CRC校验段由15位CRC值和1位CRC界定符构成
当一个接收节点接收的帧起始到CRC段之间的内容没发生错误时,它将在ACK段发送一个显性电平
与数据帧相比,远程帧结构上无数据段,由6个段组成,同理分为标准格式和扩展格式,且RTR位为1(隐性电平)
以下图所示因为数据帧的RTR位为显性电平,远程帧的RTR位为隐性电平。
因此帧格式和帧ID都相同状况下,数据帧的优先级比远程帧优先级高
数据帧与远程帧的区别
尽管CAN-bus是可靠性很高的总线,但依然可能出现错误;CAN-bus的错误类型共有5种
当出现5种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构以下,其中错误标识分为主动错误标识和被动错误标识
为防止自身因为某些缘由致使没法正常接收的节点一直发送错误帧,干扰其余节点通讯,CAN-bus规定了节点的3种状态及其行为
(注:这些错误处理的机制是由硬件自主完成的这样作的目的就是只要CAN在收到数据确定是正确的数据)。
当某个接收节点没有作好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成
因为存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过6个位的现象
帧间隔用于将数据帧或远程帧和他们以前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。
帧间隔事后,若是无节点发送帧,则总线进入空闲。
帧间隔事后,若是被动错误节点要发送帧,则先发送8个隐性电平的传输延迟,再发送帧。
CAN-bus整个链路层处理数据的流程
SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一
种同步串行接口技术,是一种高速的,全双工,同步的通讯总线。
高速、同步、串行、全双工、非差分、总线式、主从机通讯模式、通讯简单、数据传输率快。
没有应答机制肯定是否收到数据,可靠性较IIC差。
(1)SDO/MOSI:主设备数据输出,从设备数据输入
(2)SDI/MISO:主设备数据输入,从设备数据输出
(3)SCLK:时钟信号,由主设备产生
(4)CS/SS:从设备使能信号,由主设备控制
当有多个从设备的时候,由于每一个从设备上都有一个片选引脚接入到主设备机中,当咱们的主设备和某个从设备通讯时将须要将从设备对应的片选引脚电平拉低或者是拉高。
SPI通讯有4种不一样的模式,不一样的从设备可能在出厂是就是配
置为某种模式,这是不能改变的;但咱们的通讯双方必须是工做在同一模式下,因此咱们
能够对咱们的主设备的SPI模式进行配置,经过CPOL(时钟极性)和CPHA(时钟相位)来
控制咱们主设备的通讯模式,具体以下:
时钟极性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由高电平到低电平的跳变,因此数据采集是在上升沿,数据发送是在降低沿。
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器。USART通讯线路简单,可胜任较长距离的可靠通讯(RS-232为例,最大通讯距离可达15米)。被广发应用于工业控制、医疗设备、POS系统等。
所谓同步通讯,是指数据传送是以数据块(一组字符)为单位,字符于字符之间、字符内部的位与位之间都同步。
(1)以数据块位单位传送信息
(2)在一个数据块(信息帧)内,字符与字符间无间隔
(3)接收时钟与发送时钟严格同步
简言之:由时钟同步
所谓异步通讯,是指数据传送以字符位单位,字符与字符之间的传送是彻底异步的,位于位之间的传送基本上是同步的。
(1)以字符为单位传送信息
(2)相邻两个字符间的间隔是任意长
(3)接收时钟和发送时钟只要相近就能够
异步方式特色简单说就是:字符间异步,字符内部各位同步
因为异步通讯不须要同步时钟,使用简单,所以通常传统通讯都采用异步模式。
一帧数据由4个部分组成
(1)1位起始位,规定位低电平0
(2)5~8位为数据位,即要传送的有效信息
(3)1位奇偶校验位
(4)1~2位中止位,规定高电平1
一个transfer(传输)由一个或多个transaction(事务)构成,一个transaction(事务)由一个或多个packet(包)构成,一个packet(包)由一个或多个sync(域)构成。
1.传输数据通讯
USB的数据通信首先是基于传输(transfer)的,传输的类型有:中断传输、批量传输、同步传输、控制传输。
2.事务数据通信
一次传输由一个或多个事务(transaction)构成,事务能够分为:in事务、out事务、setup事务。
3.包数据通信
一个事务由一个或多个包(packet)构成,包可分为:令牌包(setup)、数据包(data)、握手包(ack)、特殊包。
4.域数据通信
一个包由多个域构成,域可分为:同步域(sync)、标识域(pid)、地址域(addr)、端点域(endp)、帧号域(fram)、数据域(data)、校验域(crc)。
传输分为四种类型:批量传输、等时(同步)传输、中断传输、控制传输。
大容量数据的通讯,数据能够占用任意带宽,并容忍延迟 。如USB打印机、扫描仪、大容量储存设备等。
批量输出事务:
(1)主机先发出一个OUT令牌包(包含设备地址,端点号)。
(2)而后再发送一个DATA包,这时地址和端点匹配的设备就会收下这个数据包,主机切换到接收模式,等待设备返回握手包。
(3)设备解码令牌包,数据包都准确无误,而且有足够的缓冲区来保存数据后就会使用ACK/NYET握手包来应答主机(只有高速模式才有NYET握手包,他表示本次数据成功接收,可是没有能力接收下一次传输),若是没有足够的缓冲区来保存数据,就返回NAC,告诉主机目前没有缓冲区可用,主机会在稍后时间从新该批量传输事务。若是设备检查到数据正确,但端点处于挂起状态,返回STALL。若是检测到有错误(如校验错误,位填充错误),则不作任何响应,让主机等待超时。
批量输入事务:
(1)主机首先发送一个IN令牌包(包含设备地址,端点号)。
(2)主机切换到接收数据状态等待设备返回数据。若是设备检测到错误,不作任何响应,主机等待超时。若是此时有地址和端点匹配的设备,而且没有检测到错误,则该设备做出反应:设备有数据须要返回,就将一个数据包放在总线上;若是没有数据须要返回,设备返回NAK响应主机;若是该端点处于挂起状态,设备返回STALL。若是主机收到设备发送的数据包并解码正确后,使用ACK握手包应答设备。若是主机检测到错误,则不作任何响应,设备会检测到超时。注意:USB协议规定,不容许主机使用NAK来拒绝接收数据包。主机收到NAK,知道设备暂时没有数据返回,主机会在稍后时间从新该批量输入事务。
容许有限延迟的通讯 如人机接口设备(HID)中的鼠标、键盘、轨迹球等。
中断传输是一种保证查询频率的传输。中断端点在端点描述符中要报告它的查询间隔,主机会保证在小于这个时间间隔的范围内安排一次传输。
持续性的传输,用于传输与时效相关的信息,而且在数据中保存时间戳的信息 ,如音频视频设备。
等时(同步)传输用在数据量大、对实时性要求高的场合,如音频设备,视频设备等,这些设备对数据的延迟很敏感。对于音频或视频设备数据的100%正确性要求不高,少许的数据错误是能够容忍的,主要是保证数据不能停顿,因此等时传输是不保证数据100%正确的。当数据错误时,再也不重传操做。所以等时传输没有应答包,数据是否正确,由数据的CRC校验来确认。
用于命令和状态的传输
控制传输可分为三个过程:(1)创建过程 (2)数据过程(可选) (3)状态过程
特性:
每一个USB设备都必须有控制端点,支持控制传输来进行命令和状态的传输。USB主机驱动将经过控制传输与USB设备的控制端点通讯,完成USB设备的枚举和配置 。
方向:
控制传输是双向的传输,必须有IN和OUT两个方向上的特定端点号的控制端点来完成两个方向上的控制传输 。
这里只用(PID04),PID47是PID0~4的取反,用来校验PID
PID1~0:01 令牌包、11 数据包、10 握手包、00 特殊包
命令 (Token) 、Packet 帧首 (Start of Frame) 、Packet 数据 (Data) 、Packet 握手 (Handshake) Packet
不一样类型包,以上的组成部件有所不一样
令牌包用来启动一次USB传输。
输出(OUT)令牌包:用来通知设备将要输出一个数据包
输入(IN)令牌包:用来通知设备返回一个数据包
创建(SETUP)令牌包:只用在控制传输中,和输出令牌包做用同样,也是通知设备将要输出一个数据包,二者区别在于:
SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,而且设备必需要接收,而OUT令牌包没有这些限制
例子:
帧起始包:在每帧(或微帧)开始时发送,以广播的形式发送,全部USB全速设备和高速设备均可以接收到SOF包。
例子:
0xA5:1010 0101:对应上面PID表可知是帧起始包
例子:
例子:
当一个USB设备插入主机后,会有如下活动:
在USB设备的逻辑组织中,包含设备、配置、接口和端点4个层次。设备一般有一个或多个配置,配置一般有一个或多个接口,接口一般有零个或多个端点。 ![img]
咱们插上鼠标后后出现以下的信息,咱们先来分析第一个传输:
咱们看到第一个是控制传输,它包含了4个事物,分别是:1个setup事务,3个in事务,1个out事务,咱们先打开setup事务:
咱们看到这个事务里包含了3个包
第一个包是令牌包,它由主控制器发送给目标设备的0号端口,用于设置目标设备的地址和端口号,咱们看到后面两个包都缺省了地址与端口号。在usb系统中,全部的通讯都是由主机发出相应的令牌所引发的。
第二个是数据包,由主控器发送给目标设备,其中数据的内容表示:
80:表示要求设备向主机发送信息
06:表示GET_DESCRIPTOR,即设备向主机发送设备描述符
00与01:Word-sized field that varies according to request
00与40:Word-sized field that varies according to request; typically used to pass an index or offset
00:Number of bytes to transfer if there is a:Data stage
总结一下第二个包就是向默认地址0 发送GET_DESCRIPTOR 指令包,请求设备发送设备描述符
第三个是应答包:设备接收到主机发送的数据后会给出应答
接着咱们看第一个in事务
咱们看到这个事务里也有三个包
第一个是in包:由主机发送给设备,表示要设备向主机发送上面请求的设备描述符
第二个是数据包:由设备发送给主机,固然是发送设备描述符,咱们来分析一下:
12:表示接下来要求主机向设备发送信息
01:CLEAR_FEATURE、
第三个是应答包,由主机发送给设备
接着咱们来看第二个in事务
这个事务里依旧是3个包
第一个是in包:由主机发送给设备,表示须要输入
第二个是数据包:由设备发送给主机,咱们来解析一下:
6D:表示要求主机发给设备数据
04:Reserved for future use
第三个是主机给设备的应答包
最后来看out事务
第一个是out包:由主机发给设备
第二个是数据包:由主机发给设备,无数据
第三个包是设备给主机的应答包