当前位置: 首页 > article >正文

有线通信方式(I2C、UART)

1、总线

总线是连接多个部件的信息传输线, 是个部件共享的传输介质。(就是一根线上面挂载了很多个设备,设备可以通过该线进行交流沟通)

特点:同一时刻,只有一个设备可以讲话(向总线发送信息),其他设备都只能听着(从总线上接收信息)。

2、设备选择

既然一根总线上面挂了那么多设备,所有设备都接收,这就起到了广播的作用。
但是发消息的设备可能只想和某个设备沟通,那么我们就需要“点名”指定设备,“点名”的方式包括下面几种:
a、直接添加设备选择线,例如:SPI(Serial Peripheral Interface:串行外设接口)的SS线
b、在数据传输的时候,把要选择的设备地址也传输过去,例如:I2C(INTER IC BUS:意为IC之间总线), 我们可以看一个I2C的读写的数据
在这里插入图片描述
c、在传输的数据里添加标识符,该标识符就像一个标签,当设备匹配到该标签时,就知道要通讯的是自己, 就会去处理接收的数据, 例如: CAN(Controller Area Network, 现场总线)

3、数据传输

如果只有一根数据线,且规定了一方只能接收,另外一方只能发送,那么此时的的数据传输就做单工通信。
如果只有一根数据线,在同一个时刻,两个设备之间是只能够有一个向另外一个发送的,这便是半双工通信, 例如I2C只有一根SDA数据线
如果有两根数据线,在同一个时刻,两个设备之间就可以同时向对方发送信息, 这便是全双工通信,例如SPI有串行数据输出(SDO)、串行数据输入(SDI), USB

在这里插入图片描述

4、时钟同步

首先时钟同步是指让大家都有一个统一的时间观念。
时钟同步的作用包括让发送方和接收方的数据传输效率保持一致,以及可以用来采样数据,保证数据的完整性和可靠性。
那么时钟同步的方式包括:
a、时钟信号线,例如SPI的串行时钟线(SCLK), I2C的串行时钟线SCL
b、特殊的数据包和波特率方式,例如UART, 它采用指定的数据包,并且接收方和发送方指定发送速率(也即波特率)

5、I2C

a、设备选择采用数据传输时传输设备地址方式来选择接收设备
b、采用一根数据线SDA,可首先半双工通信
c、采用串行时钟线SCL来保持传输速率

在这里插入图片描述

6、UART

a、UART是点对点的通讯,不需要进行设备选择
b、具有RX和TX两根数据线,可以实现全双工通信
c、采用特殊的数据包和波特率来保持传输速率
在这里插入图片描述

7、RS485

a、设备选择采用数据传输时传输设备地址方式来选择接收设备
b、至少具有两根数据线(A+和B-),但它两根数据线并不能同时双向传输,因为为了提高抗干扰性,使用差分信号,因此只能实现半双工通信。
差分信号的工作原理是通过驱动端发送两个等值、反相的信号,接收端则通过比较这两个电压的差值来判断逻辑状态“0”或“1”,举个例子,
假设传输的是1, 那么则发送信号1和-1, 那么受到干扰的时候,他们的信号波动为+2, 那么收到的信号就是3和1, 两个之间的差值2,那么2/2 = 1, 可以知道原本真正传输的信号是1。
c、数据包增加起始位和停止位,进而保证同步数据的发送和接收.

8、参考

https://mp.weixin.qq.com/s/vwh1DyXTz6ePvah4jD3QNA
https://mp.weixin.qq.com/s/Z4KRE9AMO3EBTgrn7L0paw
https://blog.csdn.net/weixin_44006573/article/details/105674761 (I2C的读写的数据图)


http://www.kler.cn/a/511600.html

相关文章:

  • Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽
  • 网络安全:信息时代的守护者
  • 奉加微PHY6230兼容性:部分手机不兼容
  • iOS 性能优化:实战案例分享
  • 5、docker-compose和docker-harbor
  • IO进程----进程
  • 设计模式:构建高效且可维护的软件系统的基石
  • 车载测试和相关面试
  • 类和对象——类的对象占用内存的大小计算
  • 【C++】内存管理与分配
  • Leetcode::3427.变长子数组求和
  • vue+高德API搭建前端Echarts图表页面
  • JavaScript笔记基础篇04——对象
  • win内核内部直接irp读取文件写入文件
  • RabbitMQ 进阶
  • Linux内存管理(Linux内存架构,malloc,slab的实现)
  • 排序算法(C语言版)
  • Vue3数据响应式原理
  • PHP变量
  • TiDB 和 MySQL 的关系:这两者到底有什么不同和联系?
  • Linux(NFS服务)
  • SoC芯片架构揭秘:从Arm核心到高速通信
  • angular项目知识点
  • 《重生到现代之从零开始的C++生活》—— 入门基础语法2
  • Qt:自定义tooltip
  • SpringBoot节假日(OneAPI和天聚数行)