单片机各种通信协议详解

2023-05-16

**

一、IIC通信协议

**
(1)概述

  • I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由 NXP(原 PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
  • 经常 IIC 和 SPI 接口被认为指定是一种硬件设备,但其实这样的说法是不尽准确的,严格的说他们都是人们所定义的软硬结合体,分为物理层(四线结构)和协议层(主机,从机,时钟极性,时钟相位)。
    -IIC, SPI 的区别不仅在与物理层, IIC 比 SPI 有着一套更为复杂的协议层定义。下面来分别说明一下 IIC 的物理层和协议层

(2) IIC 的物理层

  • a.只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL,(IIC 是半双工,而不是全双工)。
  • b.每个连接到总线的器件都可以通过唯一的地址和其它器件通信,主机/从机角色和地址可配置,主机可以作为主机发送器和主机接收器。
  • c.IIC 是真正的多主机总线,(而这个 SPI 在每次通信前都需要把主机定死,而 IIC 可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。
  • d.传输速率在标准模式下可以达到 100kb/s,快速模式下可以达到 400kb/s。
  • e.连接到总线的 IC 数量只是受到总线的最大负载电容 400pf 限制。
  • 一个典型的 IIC 接口如下图所示
    在这里插入图片描述

二、 SPI 协议

  • 通常 SPI 通信要求 4 根线,分别是 MOSI(mast output salve input), MISO, CLK, CS。
  • 当发送和接受数据的工作都准备好了,只要有时钟 CLK,就发送数据,没有时钟就不发送,而且一个时钟周期发送一位(bit)数据,所以发送数据的快慢由时钟频率来控制。
  • 至于时钟和数据的相位没有特别严格的要求(而 IIC 中,数据的变化只能在 SCL 是低电平的时候发生), SPI数据的变化是一个时钟周期一次,这样的方法来传输数据就简单多了。我们可以根据需求对时钟的极性和相位做调整,看看是在时钟上升沿还是下降沿来发送数据,还有停止发送时时钟的极性,是保持高电平还是低电平。
  • 另外在多机通信时, SPI 只是简单的通过一个片选信号来选择哪个设备占用总线,但是 IIC 是通过发送从设备地址来自动选择的。

三、 什么是 TTL 电平、 CMOS 电平?

  • TL 电平信号被利用的最多是因为通常数据表示采用二进制规定, +5V 等价于逻辑"1", 0V 等价于逻辑"0",这被称做
    TTL(晶体管-晶体管逻辑电平)信号系统,这是计算机处理器控制的设备内部各部分之间通信的标 准技术。
  • CMOS 电平和 TTL 电平: CMOS 电平电压范围在 3~15V,比如: 当 5V 供电时,输出在 4.6 以上为高电平,输出在
    0.05V 以下为低电平。输入在 3.5V 以上为高电平,输入在 1.5V 以下为低电平。而对于 TTL 芯片,供电范围在 0~5V,常见都是 5V,如 74 系列 5V 供电,输出在2.7V 以上为高电平,输出在 0.5V 以下为低电平,输入在 2V 以上为高电平,在 0.8V 以下为低电平。因此, CMOS 电路与 TTL 电路就有一个电平转换的问题,使两者电平域值能匹配
  • TTL 高电平 3.6~5V,低电平 0V~2.4V
  • CMOS 电平 Vcc 可达到 12V

四、 RS-232 协议

  • RS232(异步传输标准接口),是个人计算机上的通讯接口之一,也称串口或串行通讯接口。
  • 由电子工业协会(Electronic Industries Association, EIA) 所制定的异步传输标准接口。通常 RS-232 接口以9 个引脚 (DB-9) 或是 25 个引脚 (DB-25) 的型态出现,一般个人计算机上会有两组 RS-232 接口,分别称为COM1 和 COM2。是目前最常用的一种串行通讯接口。
  • 标准 RS232 接口: 常用串口只需要 TX 与 RX 即可。
    在这里插入图片描述

五、 CAN 总线

  • CAN 是控制器局域网络(Controller Area Network, CAN)的简称,是由以研发和生产汽车电子产品著称的德国BOSCH 公司开发的,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。 在北美 和西欧, CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以 CAN 为底层协议专为大型货车和重工机械车辆设计的J1939 协议。
  • CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后, CAN 通过 ISO11898 及 ISO11519 进行了标准化,在欧洲已是汽车网络的标准协议。
  • CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。现场总线是当今自动化领域技术发展的热点之一,被誉为自动化领域的计算机局域网。它的出现为分布式控制系统实现各节点之间实时、可靠的数据通信提供了强有力的技术支持。

CAN 的报文格式

  • 在总线中传送的报文,每帧由 7 部分组成。 CAN 协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为 11位,扩展格式为 29 位。
  • 在标准格式中,报文的起始位称为帧起始(SOF),然后是由 11 位标识符和远程发送请求位 (RTR)组成的仲裁场。 RTR 位标明是数据帧还是请求帧,在请求帧中没有数据字节。
  • 控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为 0~8 个字节,其后有一个检测数据错误的循环冗余检查(CRC)。
  • 应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑 1),这时正确接收报文的接收站发送主控电平(逻辑 0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。
  • 报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

六、 485 总线

  • 在要求通信距 离为几十米到上千米时,广泛采用 RS-485 串行总线标准。 RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。
  • RS232 串口可以与 485 之间互转, 在单片机上使用 485 总线与使用 RS232 串口一样, 需要使用芯片转换电平即可!

七、 Modbus 通讯协议

  • Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络(例如以太网)和其它设备之间可以通信。它已经成为一种通用工业标准。有了它,不同厂商生产的控制设备可以连成工业网络,进行集中监控。此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种网络进行通信的。它描述了一个控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式。
  • 当在同一 Modbus 网络上通信时,此协议决定了每个控制器需要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用 Modbus 协议发出。在其它网络上,包含了 Modbus 协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
  • 此协议支持传统的 RS-232、 RS-422、 RS-485 和以太网设备。许多工业设备,包括 PLC, DCS,智能仪表等都在使用 Modbus 协议作为他们之间的通信标准。
    Modbus 具有以下几个特点:
  • 标准、开放,用户可以免费、放心地使用 Modbus 协议,不需要交纳许可证费,也不会侵犯知识产 权。目前,支持 Modbus 的厂家超过400家,支持 Modbus 的产品超过 600 种。
  • Modbus 可以支持多种电气接口,如 RS-232、 RS-485 等,还可以在各种介质上传送,如双绞线、光纤、无线等。
  • Modbus 的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机各种通信协议详解 的相关文章

  • Linux中记录终端(Terminal)输出到文本文件四种方法

    Linux中记录终端 xff08 Terminal xff09 输出到文本文件 Linux中记录终端 xff08 Terminal xff09 输出到文本文件 一 xff0c 如何把命令运行的结果保存到文件当中 二 command gt f
  • C++ 标准库头文件汇集:

    C 43 43 标准库头文件汇集 xff1a C 43 43 标准库的接口由下列头文件的汇集定义 C 43 43 标准库头文件汇集 xff1a 概念库协程库工具库动态内存管理数值极限错误处理字符串库容器库迭代器库范围库算法库数值库本地化库输
  • C++开源库列表总结记录

    开源 C 43 43 库列表 前言包管理器库音频 音频指纹格式标签CD 性能测试 通信 并发 配置 XMLJSONYAMLTOMLHOCONCSS容器 密码学 数据库 嵌入语言绑定 嵌入式 实时 文件元数据 金融计算 游戏引擎架构 通用多媒
  • C++转义序列和操作符优先级

    C 43 43 转义序列和操作符优先级 1 转义序列 xff1a 2 C 43 43 运算符优先级注解 1 转义序列 xff1a 转义序列 描述 表示 简单转义序列 39 单引号 ASCII 编码中为字节 0x27 34 双引号 ASCII
  • PX4:Policy “CMP0097“ is not known to this version of CMake.

    make px4 fmu v3 时报的错 CMake版本的问题 由https blog csdn net zhizhengguan article details 118380965推测 xff0c 删除cmake policy也没事 ma
  • 安装Anaconda3后再安装ROS(用于PX4)

    记录一下安装anaconda后再安装ROS xff0c 方便未来找错误 出现no module wstool 仔细观察报错信息发现调用的库都在anaconda3 lib python3 7里面了 随后按照https www cnblogs
  • Offboard仿真时出现CMD: Unexpected command 176, result 0

    在用PX4 43 gazebo 43 ROS仿真offboard例程时 xff0c 如果出现以下问题 xff1a 运行以下命令 xff1a roslaunch mavros px4 launch fcu url span class tok
  • Offboard例程的python版本

    因为python的库很丰富 xff0c 有现成的解方程库 xff0c 比如sympy 自己写了一份python版本的自动起飞2m的程序 假设自定义的包名为offb xff0c 在offb下新建scripts文件夹 xff0c 将py文件放在
  • 子类与父类构造函数调用顺序

    子类与父类构造函数调用顺序 构造函数 当创建子类对象时 构造函数的调用顺序 xff1a 静态数据成员的构造函数 gt 父类的构造函数 gt 非静态的数据成员的构造函数 gt 自己的构造函数 注意 无论创建几个对象 该类的静态成员只构建一次
  • 0.1- 机械加工工艺-----切削加工基础

    1 钳工 xff1a 通过工人手持工具进行切削加工 机械加工 xff1a 采用不同的机床 xff08 如车床 铣 床 刨床 磨床 钻床等 xff09 对工 件进行切削加工 2 零件几何参数 xff1a 1 宏观几何参数 xff1a 包括 x
  • 判断当前机器的字节序是大端还是小端?

    字节序 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序 大端字节序 xff08 Big endian xff09 大端存储模式是指数据的高字节保存在内存的低地址中 xff0c 而数据的低字节保存在内存的高地址中 小端字
  • Qt简易计算器实现复数运算绘图等等

    太久没更新博客了前段时间弄了个计算器 实现了加减乘除复数 带记忆 绘图计算二维图形等功能 先简单讲解下我代码的分块 用图片描述虽然画的丑 实现效果图片 代码放心使用转载请通知 1 Ui 2 在Maindow 类实现计算 maindow h
  • 【tensorboard】可视化events.out.tfevents文件

    介绍 笔者训练Mask RCNN模型时 xff0c 在生成权重 xff08 h5 xff09 文件的同时会实时更新events out tfevents szfj文件 xff0c 通过tensorboard可视化events out tfe
  • 【tensorflow】缺少libcudart.so.11.0和libcudnn.so.8解决方法

    问题 xff1a 安装tensorflow gpu xff0c 在测试是否调用GPU时出现如下问题 xff1a Could not load dynamic library libcudart so 11 0 dlerror libcuda
  • 【Lane】 Ultra-Fast-Lane-Detection 复现

    引言 笔者Ultra Fast Lane Detection专栏链接 x1f517 导航 xff1a Lane Ultra Fast Lane Detection 复现 Lane Ultra Fast Lane Detection xff0
  • 【Lane】Ultra-Fast-Lane-Detection(1)自定义数据集训练

    引言 笔者Ultra Fast Lane Detection专栏链接 x1f517 导航 xff1a Lane Ultra Fast Lane Detection 复现 Lane Ultra Fast Lane Detection xff0
  • 【YOLO】yolov5目标识别+DeepSort目标追踪

    引言 利用yolov5训练的目标识别模型 xff0c 结合DeepSort实现目标追踪 源码下载 xff1a xff08 1 xff09 Yolov5 DeepSort Pytorch 该源码下载下来的yolov5文件夹是空的 xff0c
  • 【ZED】从零开始使用ZED相机(一):windows下的安装配置与测试

    引言 笔者通过在一台重装windows系统的笔记本上 xff0c 从安装开始一步步使用ZED xff0c 希望用一系列笔记的方式完成一个比较完善的ZED使用专栏 xff0c 笔者整理思路的同时 xff0c 也能给读者一定的参考 电脑配置说明
  • 【ZED】从零开始使用ZED相机(二):打开相机+捕获图像

    引言 关于ZED相机的安装和配置可以先参考 ZED 从零开始使用ZED相机 xff08 一 xff09 xff1a windows下的安装配置与测试 xff0c 接下来开始二次开发ZED相机 阅读ZED API文档 xff0c 选择自己使用
  • 【ZED】从零开始使用ZED相机(三):相机标定(张氏标定法)

    引言 关于ZED相机的安装和配置可以先参考 ZED 从零开始使用ZED相机 xff08 一 xff09 xff1a windows下的安装配置与测试 关于ZED相机的基本使用可以参考 ZED 从零开始使用ZED相机 xff08 二 xff0

随机推荐