485、CAN、单总线、SPI、I2C :1、是什么 2、特点 3、协议 4、使用方法 5、区别 6、通信方式

一、485

1 .是什么

RS485(一般称作 RS485/EIA-485)是串行通信标准。隶属于 OSI 模型物理层的电气特性规定为 2 线,半双工,多点通信的标准。它的电气特性和 RS-232 大不一样。用缆线两端的电压差值来表示传递信号。                                                                                                                                      RS485 仅仅规定了接受端和发送端的电气特性。它没有规定或推荐任何数据协议。其中串行通信

2.RS485 的特点


(1) 接口电平低,不易损坏芯片。RS485 的电气特性:逻辑“1”以两线间的电压差为+(2~ 6)V表示;逻辑“0”以两线间的电压差为-(2~6)V 表示。接口信号电平比 RS232 降低了,不易损坏接口电路的芯片,且该电平与 TTL 电平兼容,可方便与 TTL 电路连接。
(2) 传输速率高。10 米时,RS485 的数据最高传输速率可达 35Mbps,在 1200m 时,传输速度可达 100Kbps。
(3) 抗干扰能力强。RS485 接口是采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性好。
(4) 传输距离远,支持节点多。RS485 总线最长可以传输 1200m 以上(速率≤100Kbps)一般最大支持 32 个节点,如果使用特制的 485 芯片,可以达到 128 个或者 256 个节点,最大的可以支持到 400 个节点。

RS-485通信协议总线是一种传统的通信总线。它不能执行总线的自动仲裁,也就是说,它不能同时发送数据以避免总线竞争。因此,整个系统的通信效率必然较低,数据冗余大,RS-485总线不适合高速要求的应用场合。

3.协议

通信协议是指双方实体完成通信或服务所必须遵循的规则和约定,主要实现两个设备之间的数据交换功能.
通信协议分硬件层协议和软件层协议。

硬件层协议决定数据如何传输,比如要设备A要想设备B发送0x63,0x63的二进制数为0110 0011,这8个二进制数要从设备A传输到设备B,涉及到1怎么传,0怎么传,这就是硬件层要解决的问题。

硬件层协议目前比较多见的有RS-232、RS-485和SPI等。
其中串行通信RS-485规定:逻辑“1”以两线间的电压差为+(2-6)伏表示;逻辑“0”以两线间的电压差为-(2-6)伏表示。再者,比如要选择多少条线传输数据,选择什么材质的线传输输入,这些也是属于硬件层协议约束的。

4.使用方法

RS-232-C接口只允许连接总线上的一个收发器,即单站能力。RS-485接口允许多达128个收发器连接在总线上。也就是说,它具有多站功能,因此用户可以使用单个RS-485接口轻松建立设备网络。

5.通信方式

        RS-485标准采用平衡式发送和差分接收方式实现通信,由于传输线通常使用双绞线,又是差分传输,所以有极强的抗共模干扰的能力。RS-485采用半双工通信方式,支持多点数据通信。 

二、CAN

1 .CAN是什么

        CAN 是控制器局域网络 (Controller Area Network) 的简称,是一种多主方式的串行通讯总线,国际上应用最广泛的现场总线之一。它是由研发和生产汽车电子产品著称的德国 BOSCH 公司开发的,并最终成为国际标准(ISO11519以及ISO11898),是国际上应用最广泛的现场总线之一。

2.CAN 的特点

(1) 多主控制(I2C有主从机之分,CAN无所谓主机从机)
在总线空闲时,所有的单元都可开始发送消息(多主控制)。
“最先”访问总线的单元可获得发送权(不管后面消息的优先级是否比自身的高)。
多个单元“同时”开始发送时,发送高优先级 ID 消息的单元可获得发送权(只在同时发送时起作用)。
(2) 消息的发送(对比I2C是根据地址进行访问,这里ID非地址,而是一种表征优先级的标识符)
在 CAN 协议中,所有的消息都以固定的格式发送。当两个以上的单元同时开始发送消息时,根据ID (标识符) 决定优先级,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作,此处这里ID非地址,而是一种表征优先级的标识符。
(3) 系统的柔软性(对比I2C总线上的每个单元都有一个独立的地址)
与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的都不需要改变。
(4) 通信速度(波特率)
由CAN的物理层就可以看出,CAN是一种异步通信方式,所以通信前必须统一好同一网络上每个单元的波特率,即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。
(5) 远程数据请求
可通过发送“遥控帧” 请求其他单元发送数据。
(6) 错误检测功能·错误通知功能·错误恢复功能
所有的单元都可以检测错误(错误检测功能)。
检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。
正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
(7) 故障封闭
CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
(8) 连接
CAN 总线可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。

3.协议

帧的种类
通信是通过以下 5 种类型的帧进行的:

其中,数据帧和遥控帧有标准格式和扩展格式两种格式。
标准格式有11 个位的标识符(ID),扩展格式有29 个位的ID 。
数据帧
数据帧由 7 个段构成,包括:
(1)帧起始。表示数据帧开始的段。
(2)仲裁段。表示该帧优先级的段。
(3)控制段。表示数据的字节数及保留位的段。
(4)数据段。数据的内容,一帧可发送0~8个字节的数据。
(5)CRC段。检查帧的传输错误的段。
(6)ACK段。表示确认正常接收的段。
(7)帧结束。表示数据帧结束的段。

(1) 帧起始(标准、扩展格式相同)
表示帧开始的段。1 个位的显性位(逻辑0)。

(2) 仲裁段(构成ID)
表示数据的优先级的段。标准格式和扩展格式在此的构成有所不同。

*1 ID
从MSB开始,禁止高7位都为隐性,即不能:ID=1111111XXXX。
*2 RTR
远程请求位。0,数据帧;1, 遥控帧;
*3 SRR
替代远程请求位。设置为1(隐性电平);
*4 IDE
标识符选择位。0,标准帧;1,扩展帧;

(3) 控制段
控制段由 6 个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。

*1 保留位(r0、r1)
保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
*2 数据长度码(DLC)
数据的字节数必须为 0~8 字节。但接收方对 DLC = 9~15 的情况并不视为错误。
*3 IDE
标识符选择位。0,标准帧;1,扩展帧;

(4) 数据段
数据段可包含 0~8 个字节的数据。从 MSB(最高位)开始输出。
(5) CRC 段
CRC 段是检查帧传输错误的帧。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于与ACK段区别开来)构成。

*1 CRC的值计算范围包括:帧起始、仲裁段、控制段、数据段。
*2 接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

(6) ACK 段
ACK 段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。

*1 发送单元的 ACK 段
发送单元在 ACK 段发送 2 个位的隐性位。
*2 接收单元的 ACK 段
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发 送 ACK”或者“返回 ACK”。

(7),帧结束。由7个位的隐性位组成。标准帧和扩展帧在这个段格式完全一样。
遥控帧
接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据帧的数据段。
遥控帧的构成如图 24 所示。
(1) 帧起始(SOF)
表示帧开始的段。
(2) 仲裁段
表示该帧优先级的段。可请求具有相同 ID 的数据帧。
(3) 控制段
表示数据的字节数及保留位的段。
(4) CRC 段
检查帧的传输错误的段。
(5) ACK 段
表示确认正常接收的段。
(6) 帧结束
表示遥控帧结束的段。
位时序
帧是以位为单位的,由发送单元在非同步的情况下发送的每秒钟的位数称为位速率(波特率)。一个位可分为 4 段,分别是:
• 同步段(SS)
• 传播时间段(PTS)
• 相位缓冲段 1(PBS1)
• 相位缓冲段 2(PBS2)
这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。
也就是说,1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。
1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。
再同步
在接收过程中检测出总线上的电平变化时进行的同步调整。
每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步。但如果发生了超出 SJW值的误差时,最大调整量不能超过 SJW 值。

4.使用方法

        CAN 控制器是根据CAN_L和CAN_H上的电位差(即差分信号的形式)来判断总线电平。总线总线电平分为显性电平(对应逻辑0,电位差为2V左右)和隐性电平(对应逻辑1,电位差为0V),二者必居其一。发送方通过使总线电平发生跳变,将消息发送给接收方。

5.通信方式

        由于 CAN 属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步通讯那样,节点间使用约定好的波特率进行通讯,特别地, CAN 还会使用“位同步”的方式来抗干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。

三、单总线

1 .单总线是什么

        单总线(1-Wire BUS)是由Dallas公司开发的一种通用数据总线。单总线是由一根通信线(DQ)组成,且异步、半双工。

        单总线只需要一根通信线即可实现数据的双向传输,当采用寄生供电时,还可以省去设备的VDD线路,此时,供电加通信只需要DQ和GND两根线

2.单总线的特点

单总线技术具有节省I/O资源,结构简单、成本低廉、便于总线扩展维护等优点。将地址线、数据线、控制线合为一根信号线。单总线系统使用自身的网络接口的传感器和其它器件。该接口的数据通信和供电仅需通过一根数据线再加一根地线,这意味着微控制器仅需一个端口即可与单总线传感器通信。

单总线系统网络工作于一主多从模式(多点网络)。时序非常灵活,允许从机以高达16kbps的速率与主机通信。每个单总线器件都有一个全球唯一的64位ROM ID,允许单总线系统主机精确选择位于网络任何位置的一个从机进行通信。1单总线系统采用漏极开路模式工作,主机(或需要输出数据的从机)将数据线拉低到地表示数据0,将数据线释放为高表示数据1。这通常通过在数据线和VCC之间连一个分立电阻实现。

3.协议

单总线协议主要分为初始化总线协议,读总线协议和写总线协议.

4.使用方法

        单总线初始化协议过程大致如下:先输出低电平,至少保持480us,一般在480us到960us之间,接着输出高电平,延时15~60us.这个时候51单片机就进入了接收模式,这个时候从机需要60到240us发送一个低电平脉冲,如果这时主机接收到的是低电平,就需要主机从开始进入接收模式到初始化结束至少延时480us,这才算是完成了单总线通信的初始化‘。

        单总线写时序协议过程大致如下:但总线协议的写时序还主要分为写0和写1,本身它的传输也是低位传输。整个写时序的时间至少需要60us,并且两次写时序的时间间隙至少是1us.写1时序主要是先输出低电平,延时2us,然后写1,延时50us.写0时序,先写0,延时60us,然后写1,延时2us的时间.

        单总线读时序协议过程大致如下:整个读时序的时间至少需要60us,而且两次读时序的时间间隙至少是1us.主机先输出低电平2us,然后延时12us,这个时候主机进入接收模式,读取当前的电平状态,然后再延时50us,读取数据也是从低位开始读取。

四、SPI

1 .SPI是什么

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

2.SPI的特点

  (1):高速、同步、全双工、非差分、总线式
  (2):主从机通信模式

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

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

3.协议

SPI通讯协议(Serial Peripheral Interface),即串行外围设备接口,是一种高速全双工的通信总线(比I2C协议快)。它被广泛地使用在ADC、LCD等设备与MCU间,要求通讯速率较高的场合。

一、物理层

SS:从设备选择信号线,常称为片选信号线,也称为NSS、CS。
每个从设备都有独立的这一条SS信号线,本信号线独占主机的一个引脚,即有多少个从设备,就有多少条片选信号线。l2C协议中通过设备地址来寻址、选中总线上的某个设备并与其进行通讯;而SPI协议中没有设备地址,它使用SS信号线来寻址,当主机要选择从设备时,把该从设备的SS信号线设置为低电平,该从设备即被选中,即片选有效,接着主机开始与被选中的从设备进行SPI通讯。所以SPI通讯以SS线置低电平为开始信号,以SS线被拉高作为结束信号。
SCK:时钟信号线。
它由通讯主机产生,决定了通讯的速率,不同的设备支持的最高时钟频率不一样,如STM32的SPI时钟频率最大为f(pclk)/2,两个设备之间通讯时,通讯速率受限于低速设备。
MOSI:(Master Output ,Slave Input)
主设备输出/从设备输入引脚。
主机的数据从这条信号线输出,从机由这条信号线读入主机发送的数据,即这条线上数据的方向为主机到从机。
MISO:(Master Input,Slave Output):
主设备输入/从设备输出引脚。
主机从这条信号线读入数据,从机的数据由这条信号线输出到主机,即在这条线上数据的方向为从机到主机。
注:MISO和MOSI相当于SDA,而SDA又有TX和RX引脚进行数据发送与接收。都是全双工。MOSI相当于TX,MISO相当于RX。区别在于,STM32与电脑连接时,TX应与RX相连接,RX与TX相连接;而使用SPI协议时,一条数据通道连的两端就是MISO与MOSI,例如,STM32的MISO引脚的另一端就是MOSI,不需要交叉连接,且这条连接的信号线是共用的。
二、协议层
SPI的协议层定义了通讯的起始和终止信号、数据有效性、时钟同步等环节。
(1)通信环节:
NSS输出端:片选引脚 。片选信号是低电平有效,因此片选引脚传输过程中一直到是低电平
SCK输出端:SCK引脚。上升沿触发,下降沿采样。图中上升沿时的数据无效,下降沿即下一个上升沿之间的数据有效。但SPI协议中上升沿和下降沿含义不像I2C协议定死,可以另定义。
数据信号线:MOSI输出端和MISO输入端
字节序
1、LSB:全称为Least Significant Bit,在二进制数中意为最低有效位,一般来说,MSB位于二进制数的最左侧,LSB位于二进制数的最右侧。图中MSBOUT即输出时字节序为从左到右。 并且对于上文物理层的图例来说,MOSI输出一个数据,MISO就输入一个数据,且两者是同时进行的。
2、MSB:全称为Most Significant Bit,在二进制数中属于最高有效位,MSB是最高加权位,与十进制数字中最左边的一位类似。
(2)通讯的起始与停止信号
标号①处,NSS信号线由高变低,是SPI通讯的起始信号。NSS是每个从机各自独占的信号线,当从机检在自己的NSS线检测到起始信号后,就知道自己被主机选中了,开始准备与主机通讯。
在图中的标号⑥处,NSS信号由低变高,是SPI通讯的停止信号,表示本次通讯结束,从机的选中状态被取消。
(3)数据有效性
SPI使用MOSI及MISO信号线来传输数据,使用SCK信号线进行数据同步。MOSI及MISO数据线在SCK的每个时钟周期传输一位数据,且数据输入输出是同时进行的。
(4)CPOL/CPHA及通讯模式
CPOL:时钟极性,指SPI通讯设备在空闲时间时,SCK时钟信号线的电平信号(即SPI通讯开始前、NSS线为高电平时SCK的状态)。CPOL=0时,SCK在空闲状态时为低电平,CPOL=1时,则SCK在空闲状态时为高电平。代表了通讯时的两种极性。
CPHA:时钟相位,指数据的采样的时刻。当CPHA=0时,MOSI或MISO数据线上的信号将会在SCK时钟线的“奇数边沿”被采样;当CPHA=1时,数据线在SCK的“偶数边沿”采样。
CPOL及CPHA的不同状态,SPI分成了四种模式,主机与从机需要工作在相同的模式下才可以正常通讯,实际中采用的常是模式0和模式3。

4.使用方法

当服务提供者提供了接口的一种具体实现后,在jar包的META-INF/services目录下创建一个以“接口全限定名”为命名的文件,内容为实现类的全限定名;
接口实现类所在的jar包放在主程序的classpath中;
主程序通过java.util.ServiceLoder动态装载实现模块,它通过扫描所有META-INF/services目录下的配置文件找到实现类的全限定名,把类加载到JVM;
SPI的实现类必须有一个无参的构造方法;

5.通信方式

SPI通信方式一般4线,可实现单工双向通信;3线可实现单向通信。

MOSI(SDO):主设备输出数据,从设备输入数据线。

MISO(SDI):主设备输入数据,从设备输出数据线。

SCLK:主设备产生的时钟信号线。

CS(SS):片选信号线(从设备使能信号线)。

SPI有四种模式,一般Slave设备的SPI模式是出厂就设定好的,此时我们要修改Master设备的SPI模式,使得两者统一模式,这样才能正常通信。

CPOL(时钟极性):

当CPOL=0,表示SCLK=0时候,SPI处于空闲状态;只是在SCLK为高电平时候有效。

同理,CPOL=1,表示SCLK=1时候,SPI处于空闲状态;只是在SCLK为低电平时候有效。

CPHA(时钟相位):
 

当CPOL=0,表示SCLK=0时候,SPI处于空闲状态;只是在SCLK为高电平时候有效。

同理,CPOL=1,表示SCLK=1时候,SPI处于空闲状态;只是在SCLK为低电平时候有效。

CPHA(时钟相位):

当CPHA=0,表示数据采样在第一个边沿,数据发送在第二个边沿。

同理,CPHA=1,表示数据发送在第一个边沿,数据采样在第二个边沿。

 

Mode0: CPOL=0, CPHA=0; 上升沿采样,下降沿发送。

Mode1: CPOL=0,CPHA=1;  上升沿发送,下降沿采样。

Mode2: CPOL=1, CPHA=0; 下降沿采样,上升沿发送。

Mode3: CPOL=1, CPHA=1; 下降沿发送,上升沿采样。

五、I2C

1 .I2C是什么

 它就是为了让机器之间能够相互明白的一种通信协议,本质上所有的通信协议例如I2C,SPI,USART等与让人类相互交流的中文,英文等没区别。前者是让机器之间能相互理解,后者让人类相互理解。

2.I2C的特点

   ①串行通信: 数据是一位一位的传输的。

     ②两根通讯线:SCL-时钟线,SDA数据线。

     ③同步:有时钟线SCL时钟频率一致,就是同步。

     ④半双工:有SDA数据线,数据就能A穿B,B传A,实现双工功能,又因为只有一条SDA,只能分时复用,所以是半双工

     ⑤有数据应答:发送一个字节的数据后,让数据接收端给数据发送端一个应答,不然数据发送端怎么知道数据是否发送成功?

3.协议

I2C是一种同步半双工的通信协议,同一时刻只能向一个方向传送数据。I2C总线由SCL时钟线和SDA数据线组成,时钟线控制收发数据的频率。

4.使用方法

I2C用通过总线通信将多个设备连接在一起,可以解决数据接口缺少的问题,是不同单片机间实现通信的一种方式
在arduino中设有SDA /SCL接口。这些接口在板子上有预定义的,当然也可以自己定义这种接口。
需查看所使用设备的电子线路图来设置SDA/SCL的通信接口。
WEMOS (SDA=D14=4 / SCL=D15=5)
在使用过程中分为主从。目前来看主端需要定义两个端口的PIN值,从端不必
主从两端都需要定义设备号

5.通信方式

   由于I2C采用的是主从式通信方式,所以,通信的过程完全由主设备仲裁。在通信之前,必须由主设备发送一个起始信号,决定数据是否可以开始传送,并且在结束通信时,必须再由主设备发送一个结束信号,以表示通信已经结束。

因为,通信之前,主设备需要发送一个起始信号,所以,先讲一下起始信号。通过上面的图就可以知道(上图中的第一个波形图是SDA数据线,第二个波形图是SCL时钟信号线),起始信号是在SCL时钟信号线处于高电平时,SDA数据线由高电平转换为低电平,也就是产生一个下降沿,就意味着起始信号已经发送,数据的通信可以进行了。

六、区别

虽说RS-485没有标准的数据协议格式,但和CAN总线在很多地方是有相似的,比如A&B和CANH&CANL都是差分信号,通信都需要收发器,都需要120欧姆的匹配电阻等等。

与 I2C、SPI 等具有时钟信号的同步通讯方式不同,CAN 通讯并不是以时钟信号来进行同步的,它是一种异步通讯,只具有 CAN_High 和 CAN_Low 两条信号线,共同构成一组差分信号线,以差分信号的形式进行通讯。 

单总线即one-wire总线,与SPI、I²C串行数据通信方式不同。它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值