通信协议与通信接口

一、协议与接口
任何的总线都有硬件层与软件层相关的设置。硬件层就是实际的接线口(接口);软件层面就是协议。不同的总线对应不同的传输协议,这个协议由硬件接口产生,需要在代码中规定协议中的相关逻辑。

接口对应的总线协议不一定是其总线协议,但总线协议对应的接口一定是其接口。

二、通信基本知识及常见总线
(一)通信基本知识
1.比特率与波特率

比特率:每秒传输的二进制位数。波特率:每秒传输的码元个数。

2.通信方向:单工、半双工、全双工

单工:只能接收或者发送。

半双工:既能接收也能发送,但是不能同时进行。

全双工:同时进行接收和发送。

3.串行通信与并行通信

串行通信:一次发送一位数据。

并行通信:一次发送多位数据。

因为串行通信虽然传输位数少,但是传输速度比较快,所以常用串行通信方式。

4.同步通信与异步通信

同步通信:发送和接收需要时钟线,在时钟信号的作用下进行发送与接收。

异步通信:发送和接收不需要时钟线,但是收发双方要规定数据位、停止位、校验位、波特率等。

常见的异步通信方式:串口(uart)、单总线。

常见的同步通信方式:spi、iic。

(二)常见的串行通信方式及对应总线
1.串口(usart)
(1)全双工异步通信,主要有两根收发线,TXD与RXD。TXD:发送线 RXD:接收线。

(2)信号线上的电平是TTL电平。因为信号线上电平的不同,有三种电平标准,所以产生三种不同的传输方式。即 普通ttl电平串口传输方式、RS-232电平传输方式、RS-485电平传输方式。但是软件层都是相同的(均为串口协议),只在信号传输电平方面不同。

2.IIC总线
(1)半双工同步通信。一条数据线SDA,一条时钟线SCL。

(2)iic支持多设备连接,设备数量受到总线最大电容限制,一主多从。空闲状态SDA、SCL均为高电平,由各自上拉电阻拉高,否则输出高阻态,总线处于释放状态。

(3)iic开始通信时,先由主机发送开始信号(总线处于占用状态),从机接收到开始信号后会产生应答信号,当主机接收到应答信号后发送端开始进行数据发送,传输完毕后,发送端产生非应答信号或者不产生任何信号,主机接收到非应答信号或者一段时间检测不到信号时,发送停止信号,结束本次传输。

(4)开始信号:SCL为高电平时,SDA由高变低。

停止信号:SCL为高电平时,SDA由低变高。

应答信号:一帧数据传输过程中,应答位为0时,是应答信号(ACK)。

非应答信号:一帧数据传输过程中,应答位为1时,是非应答信号(ACK)。

一帧数据的数据格式:数据位数(8位)+应答位(1位) 发送时,先发送最高位

地址信号:从机地址(7位)+传输方向位(R/T)0为主机发送,1位主机接收

(5)多种组合方式

主机发送数据:开始信号(主机)+地址信号+应答信号(从机)+数据(主)+应答信号(从)+数据(主)+非应答信号(从)+停止信号(主)。

主机接收数据:开始信号(主机)+地址信号+应答信号(从机)+数据(从)+应答信号(主)+数据(从)+非应答信号(主)+停止信号(主)。

复合过程:在SCL时钟配合下,在SDA上逐位发送每一位数据。一个时钟的边沿发一位。

(6)实际应用过程中,很少用到iic的硬件接口产生时序,所以一般是软件模拟iic时序。

3.SPI总线
(1)全双工同步通信,4条信号线。MISO:主设备数据输入,从设备数据输出线;MOSI:主设备输出、从设备输入线;SCLK:时钟信号线;NSS/CS:从设备片选信号线,由主设备控制、多个设备、多条片选线。

(2)NSS硬件模式:硬件控制片选。

NSS软件模式:软件控制片选,将NSS由高拉低。

SPI通信前NSS是高电平状态。

SPI起始信号:NSS由高变低。

结束信号:NSS由高变低。

(3)SPI硬件接口

内部结构:主机的移位寄存器和从机的移位寄存器在同一个时钟控制下,通过信号线互相发送数据,在8个时钟控制下,两个寄存器中的值互相交换,形成一个环,使读和写同时完成。 主机通过向它的SPI串行寄存器写入一个字节来发起一次启动传输。

(4)时钟信号的相位与极性。由CR寄存器的CPOL位和CPHA位决定,可能产生4种时序关系。

CPOL(时钟极性):控制没有数据传输时时钟空闲状态的电平,对主模式和从模式下的设备都有效。CPOL=0,SCLK引脚空闲状态为低电平;CPOL=1,SCLK引脚空闲状态为高电平。

CPHA(时钟相位):

① CPHA=1 SCLK时钟的第2个边沿进行数据采样,信号此时被锁存。

CPOL=0时,第二个边沿为下降沿,CPOL=1,第二个边沿为上升沿。

②CPHA=0 SCLK时钟的第1个边沿进行数据采样,信号此时被锁存。

CPOL=0时,第二个边沿为上升沿,CPOL=1,第二个边沿为下降沿。

锁存:把信号暂存以维持某种电平状态。

数据有效性:边沿有效,在边沿采样。在采样边沿的相反边沿改变数据(此时数据无效)

CPOL和CPHA组合选择捕获数据的时钟边沿。需要根据外设的相位和极性来配置主机的相位和极性,两者要相同。

(5)数据帧格式:CR1寄存器控制

数据位可以是高位在前,也可以是低位在前;一帧数据可以是8位或者16位。

(6)状态标志:读状态标志寄存器 有3种状态标志。

发送区缓冲空闲标志(TXE):TXE为1时,表示为空,可由硬件置位1,软件清零,调用相关函数时,自动清空。为空时,可以写一个待发送的数据进入,当写入DR寄存器时,TXE被清除。

接收缓冲区非空(RXNE):RXNE=1时,表示数据寄存器接收缓冲区中不包含有效的接收数据,读SPI数据寄存器可以清除此标志。

SPI硬件有1个数据寄存器,2个缓冲区。

忙(BUSY)标志:bsy标志由硬件设置与清除。

(7)SPI接口可以配置为支持SPI协议或者支持I2S音频协议。默认是SPI方式,可以通过软件切换到i2s方式。

4. RS-232和RS-485
(1)普通串口电平是TTL电平 范围: 0~5V 232电平是+15V~-15V 485电平是:-6V~+6V

(2)普通串口通信要变成232或者485通信时,要将电平转换(一般采用电平转换芯片),才可以进行通信。

电平转换芯片:串口与其他不是串口的设备通信时,需要使用电平转换芯片,将通信双方的电平转换为相同。常见芯片:CH340 、PL2303、CP2102、FT232

(3)常见232传输线为9针或者25针,全双工信号线。单端信号线,只有两个节点可以通信,交叉连接。

(4) RS485

工业环境中常用的的通信协议,抗干扰强。485是在232基础上面改的,协议层不变(均为串口协议),只是改变了物理层(电平信号改变)。信号线为差分信号线,传输差分信号。支持多个节点,任意节点间通过总线通信。

(5)232和485通信示意图

232:

串口控制器A ~ 收发器(电平转换芯片)~DB9(25)接口 ~~~~DB9(25)接口 ~ 收发器(电平转换芯片)~ 串口控制器B

DB9(25)接口 ~~~~DB9(25)接口 之间 RX和TX交叉相连。

485:

串口控制器 ~收发器(电平转换芯片) TX与485A 相连 RX与 485B相连 485A和B连接到总线上 其他节点可以通过总线通信。 A连A B连B

(6)差分信号可以提高抗干扰,因为信号线上的逻辑(逻辑1或0)是两根信号线电压差值,无论怎样干扰,他们的差值不变,通过两根线的差值表示逻辑1和0。

(7)采用差分信号通讯的协议:usb、485、以太网、can

5.CAN总线
(1)CAN:控制器局域网络,常用于汽车于工业控制。半双工异步通信,有can_high和can_low两根信号线,组成差分线,以差分信号通讯。两根线有两种形式:开环总线和闭环总线

闭环总线:所有的节点连在两根线上,两根线的两端通过120Ω电阻连接,组成闭环。高速近距。最大总线长度为40m。

开环总线:两根线分开。各条线上均有2.2kΩ电阻,低速远距。

(2)can的通信节点:由一个can控制器和can收发器组成。控制器(串口控制器)和收发器之间有TX和RX信号线相连,收发器和can总线由high和low线相连。tx和rx是普通ttl电平。high和low是一对差分信号。can通信无主机与从机,所有节点都会发,广播出去,根据报文id确定顺序。

(3)协议层

波特率及位同步

使用波特率进行通讯,使用 位同步 来抗干扰,再同步 吸收误差。

位时序分解实现位同步(将每一位数据位分解),有最小时间单位TQ。和串口一样 一个数据位传1或0。一个数据位长度为8~25TQ。一个数据位可以分为:ss段、pts段、pbs1段、pbs2段。

ss段:同步段,1tq固定。若节点检测总线信号跳变沿在ss段范围内,则表示节点与总线同步时序,当同步时,采样的总线电平为改位的电平。

pts段:传播时间段,补偿网络物理延迟时间,经常和pbs1段在一块 1~8tq。

PBS1段、pbs2段:相位缓冲段。信号的采样点位于两个段的交界处。通过控制各段长度,对采样点进行偏移,更精确采样。采样时,数据稳定,得到该位逻辑1或0。s1 : 1~8TQ, s2 :2~8tq。

sjw段:可以插入的补偿长度。若不同步,为了避免下次误差,重新同步时 ①在pbs1段插入sjw段(延时)。②在pbs2段减去sjw长度(提前)。

再同步机制:延时与提前

延时:总线跳变在ss段后。提前:总线跳变在前一个pbs2段。

波特率:传输一位需要的时间 1Mbps;

(4)CAN报文

报文:打包的数据、操作命令、同步信号。

报文结构:传输的起始标签+片选标签+控制标签+原始数据段+crc校验标签+应答标签+传输结束标签。 将上述按特定格式打包,组成各种帧(形成5种报文),就可以用一个通道传输。

5种报文(帧):数据帧、遥控帧、错误帧、过载帧、帧间隔。

数据帧:节点向外传输数据。

遥控帧:用于向远端请求数据。

错误帧:向远端节点通知校验错误。

过载帧:本节点尚未做好接收准备。

帧间隔:将数据帧及遥控帧与前面的帧分开。

(5)数据帧结构

有两种:标准和拓展(根据仲裁段的数据帧id是否是标准或扩展)

标准帧:以1个逻辑0开始,以连续7个逻辑1结束。

帧结构:帧起始(sof)+仲裁段+控制块+数据段+crc段+ack段+帧结束(eof)

帧的最小单位是位。

帧起始:只有1位。逻辑电平0 。通知其他节点将有数据传输,其他节点通过帧起始的信号的电平跳变实现硬同步。

仲裁段:当有多个报文被发送时,决定哪个能被传输(不分配优先级和地址,对于重要信息,打包优先级高的ID)。主要内容为数据帧ID,标志格式:11位 ;拓展格式:29位。

控制块:由rtr位、ide位、ssr位、r1和r0位、dlc段组成。

rtr:区分数据帧和遥控帧。0为数据,1为遥控。数据帧优先于遥控帧。

ide:确定是扩展数据帧还是标准数据帧。0为标准,1为扩展。

ssr:只存在于扩展格式,代替rtr位,原来的rtr位移到后面新增的18位ID后面。

r1和r0:没有设置值,保留默认为0,r1在拓展中有。

dlc段:最多4位,表示0-8。确定本报在的数据有多少字节。

数据段:最多8字节,高位先行。

crc段:15位。报文发送时,会计算crc码,若计算的不等于接收到,则向发送节点反馈错误信息,发送错误帧,请求重新发送。计算有can控制器硬件完成,出错时处理则由软件控制最大重发数。

ack段:ack槽位,ack界定符。发送字节发送1,接收字节发送0表示应答。错误帧和扩展帧相同。

帧结束:7个隐形位。

CAN协议是基础,实际用的是can open协议。
————————————————
版权声明:本文为CSDN博主「letting go~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_58690677/article/details/129392777

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值