串口通信、IIC时序整理

一、串行通信与并行通信

并行通信是指多个比特同时通过并行线进行传输,这种方式的传输速率较高,但会占用大量的芯片资源;

串行通信是指将数据拆分成一个个比特,按照先后次序在一根总线上进行发送,串行通信有着系统占用资源少,结构简单等优点,是主机间通信的常用方式。

串口通信(Serial Port)是串行通信的一种,属于串行通信中的异步通信。

串口通信是串行通信的一种具体实现,指的是使用串行通信接口(如RS-232、RS-485、USB串行接口等)进行的数据传输。串口通信通常涉及一个物理接口,如电脑上的COM端口或微控制器的UART(通用异步收发传输器)接口,用于将并行数据转换为串行数据,以便通过串行链路进行传输。串口通信可以是全双工(同时发送和接收数据)、半双工(发送和接收数据不能同时进行)或单工(仅在一个方向上传输数据)。

主机间通信无论采用并行还是串行方式,都无法避免一个物理现象:导线内阻不为零造成的电压衰减,传递的信号会减弱。主机之间的距离会造成高电平在接收端出现衰减现象和串扰(指不同信号之间相互干扰导致信号失真)影响。


  1. TTL电平: TTL(Transistor-Transistor Logic)电平是微处理器和许多数字电路中常用的信号电平标准。在TTL电平中,逻辑“1”通常表示为+5V,逻辑“0”表示为0V。随着技术的发展,也有3.3V TTL电平,逻辑“1”为3.3V。TTL电平信号可以直接连接到微控制器的GPIO引脚,但是它的驱动能力和抗干扰能力较弱,不适合长距离传输。
  2.  RS232: RS232是最早被广泛使用的串行通信标准之一,主要用于PC和其他设备之间的短距离通信。RS232采用负逻辑电平,即逻辑“1”表示为-3V至-15V,逻辑“0”表示为+3V至+15V。这种电平标准提高了信号的抗干扰能力,适合于长距离通信(尽管实际上距离有限,一般不超过15米)。RS232接口通常需要一个电平转换芯片(如MAX232)将TTL电平转换为RS232电平,反之亦然。
  3.  RS485和RS422: RS485和RS422是两种差分信号通信标准,相比RS232,它们提供了更好的抗噪声性能和更远的传输距离。两者的主要区别在于RS485支持半双工通信,而RS422支持全双工通信。在RS485和RS422中,信号是通过一对差分线传输的,逻辑“1”表示为两线之间的正电压差,逻辑“0”表示为负电压差,通常电压差为±2V至±6V。RS485和RS422同样需要电平转换芯片将TTL电平转换为差分电平。

strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。

而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间。

二、串口通信

        

        在实际应用中,串口通信通常采用异步模式,而对于通信方式,RS-232通常支持全双工通信,而RS-485可以配置为半双工或全双工(通过适当的硬件设计),RS-422则默认支持全双工通信。

        作为常用的串行通信方式,以TTL为例,串口通信在不同主机之间的数据格式为:

  1. 空闲时数据线为高电平;
  2. 发送发发送一个低电平表示起始位;
  3. 发送的第一个比特是最低为(最右边);
  4. 校验位分为奇校验,偶校验和无校验。奇偶校验时数据位1的格式为奇数或者偶数时对应的奇偶校验位为1;
  5. 为保证下一个字节发送前的起始位能够表现出来,校验位之后发送一个停止位1。

三、IIC

一种同步串行半双工通信总线方式。该总线允许同时连接多个设备(芯片)。每块芯片在总线上拥有特定的地址。

 IIC总线在某一时刻,总线只允许有一个设备处于发送状态,所发出的数据被总线上所有的设备所接收。IIC通信协议包含有设备地址,只有发送方携带的地址与某个接收方的地址相同时,接收方才真正执行相关的指令。

       IIC总线规定,设备在空闲时,两根总线都处于高电平状态。为保证这种状态,数据线SDA和时钟线SCL都要外接上拉电阻。上拉电阻的阻值一般位4.7~10K。 距离越远,上拉电阻阻值配置越小,越近阻值越大。

IIC的时序

1.起始位

        

        由于空闲时SDA和SCL都是高电平状态,每次通信前,发送方首先发送一个“起始”信号,其实信号就是在SCL为高电平时,SDA发送一个低电平。当其它设备接收到这个其实信号后,将进行一次“总线仲裁”。意思就是设备(除发送其实信号的那个设备以外的)都将处于聆听状态。 

2.数据位

 IIC总线进行数据传送时,时钟线(SCL)上的信号为高电平期间,数据线(SDA)上的数据必须保持稳定。只有在时钟线(SCL)上的信号为低电平期间,数据线(SCL)上的高电平或低电平状态才允许变化。同时,SCL信号由数据启动发送的设备提供。输出到数据线(SDA)上的每个字节必须是8位。数据传送时,先传送最高位(MSB),后传送最低位(LSB),与串口通信刚好相反。

3.应答位

        发送器每发送一个字节(8个bit),就在时钟脉冲 9 期间释放数据线,由接收器反馈一个应答信号。 主机SCL拉高,读取从机SDA的电平。对于反馈有效应答位ACK的要求是:接收器在第9个时钟脉冲之前的低电平期间将数据线SDA拉低,并且确保在该时钟的高电平期间为稳定的低电平。

        应答分两种情况:数据线(SDA)为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;数据线(SDA)为高电平时,规定为非应答位(NACK),表示接收器没有成功接收该字节。

4.停止位

当发送方发送完最后一个bit后,需要发送一个结束标志来终止整个通信过程。当时钟线SCL 为高电平时,数据线SDA 由低电平向高电平跳变(与起始信号刚好相反)。 

完整时序图 


IIC的设备地址

        由于IIC总线的多设备设计,为了能够在通信时能够将数据发送给正确的设备,每个设备都具有一个独一无二的地址。并且IIC在每次启动通信后的第一个字节就是需要接收数据的设备的地址。这一个字节的地址中其实真正的地址只有7位,最低位事实上代表的是方向位用来表示接下来数据传输的方向。0表示主设备向从设备(write)写数据,1表示主设备向从设备(read)读数据。例如某个IIC芯片的设备地址为0xA0,当主机发送0xA0时表示要向该设备写入数据,当主机发送0xA1时,表示要从该设备读取数据。

使用IIC具体收发过程

写(发)数据操作:

  1. 开始信号;
  2. 发送 I2C 设备地址,每个 I2C 器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个 I2C 器件。这是一个 8 位的数据,其中高 7 位是设备地址,最后 1 位是读写位,为1 的话表示这是一个读操作,为 0 的话表示这是一个写操作;
  3. I2C 器件地址后面跟着一个读写位,为 0 表示写操作,为 1 表示读操作;
  4. 从机发送的 ACK 应答信号;
  5. 重新发送开始信号;
  6. 发送要写写入数据的寄存器地址;
  7. 从机发送的 ACK 应答信号;
  8. 发送要写入寄存器的数据;
  9. 从机发送的 ACK 应答信号;
  10. 停止信号

读(收)数据操作分为 4 大步:

第一步是发送设备地址

第二步是发送要读取的寄存器地址

第三步重新发送设备地址

最后一步就是 I2C 从器件输出要读取的寄存器值

 

 

  1. 主机发送起始信号;
  2. 主机发送要读取的 I2C 从设备地址;
  3. 读写控制位,因为是向 I2C 从设备发送数据,因此是写信号;
  4. 从机发送的 ACK 应答信号;
  5. 重新发送 START 信号;
  6. 主机发送要读取的寄存器地址;
  7. 从机发送的 ACK 应答信号;
  8. 重新发送 START 信号;
  9. 重新发送要读取的 I2C 从设备地址;
  10. 读写控制位,这里是读信号,表示接下来是从 I2C 从设备里面读取数据;
  11. 从机发送的 ACK 应答信号;
  12. 从 I2C 器件里面读取到的数据;
  13. 主机发出 NO ACK 信号,表示读取完成,不需要从机再发送 ACK 信号了;
  14. 主机发出 STOP 信号,停止 I2C 通信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/865548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录第42天|动态规划

198.打家劫舍 参考 dp[j] 表示偷盗的总金额, j 表示前 j 间房(包括j)的总偷盗金额初始化: dp[0] 一定要偷, dp[1] 则取房间0,1的最大值遍历顺序: 从小到大 class Solution { public:int rob(vector<int>& nums) {if (nums.size() < 2) {return nums[0];}vector&…

【Rust入门教程】安装Rust

文章目录 前言Rust简介Rust的安装更新与卸载rust更新卸载 总结 前言 在当今的编程世界中&#xff0c;Rust语言以其独特的安全性和高效性吸引了大量开发者的关注。Rust是一种系统编程语言&#xff0c;专注于速度、内存安全和并行性。它具有现代化的特性&#xff0c;同时提供了低…

地理信息科学:生态保护的智慧经纬

在地球这颗蓝色星球上&#xff0c;每一片森林的呼吸、每一条河流的流淌&#xff0c;都是生命交响曲中不可或缺的音符。而地理信息科学&#xff08;GIS&#xff09;&#xff0c;正是我们手中解读自然密码、护航生态平衡的精密仪器。今天&#xff0c;让我们深入探讨GIS如何在生物…

STM32之五:TIM定时器(2-通用定时器)

目录 通用定时器&#xff08;TIM2~5&#xff09;框图 1、 输入时钟源选择 2、 时基单元 3 、输入捕获&#xff1a;&#xff08;IC—Input Capture&#xff09; 3.1 输入捕获通道框图&#xff08;TI1为例&#xff09; 3.1.1 滤波器&#xff1a; 3.1.2 边沿检测器&#xf…

小米MIX Fold 4折叠屏手机背面渲染图曝光

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 7 月 3 日消息&#xff0c;消息源 Evan Blass 今天在 X 平台发布推文&#xff0c;分享了小米 MIX Fold 4 折叠屏手机的高清渲染图&#xff08;图片有加工成分在&#xff0c;最终零售版本可能会存在差异…

列表数据合并

WPS: 使用“&”符号合并单元格内容&#xff1a; 在需要合并的单元格中输入A1&B1&C1以此类推&#xff0c;这样可以将多个单元格的内容合并到一个单元格中。 EXCEL: 使用合并连接符号& 在E2单元格中输入B2&C2&D2&#xff0c;然后按enter回车&#x…

基于Vue.js和SpringBoot的地方美食分享网站系统设计与实现

你好&#xff0c;我是计算机专业的学姐&#xff0c;专注于前端开发和系统设计。如果你对地方美食分享网站感兴趣或有相关需求&#xff0c;欢迎随时联系我。 开发语言 Java 数据库 MySQL 技术 Vue.js SpringBoot Java 工具 Eclipse, MySQL Workbench, Maven 系统展示…

英灵神殿mac能玩吗 英灵神殿对电脑配置要求《英灵神殿》新手攻略查询 PD虚拟机能玩英灵神殿吗

近年来&#xff0c;随着《英灵神殿》&#xff08;Valheim&#xff09;游戏的火热&#xff0c;越来越多的玩家被其独特的北欧神话题材和丰富的生存挑战所吸引。然而&#xff0c;对于Mac用户来说&#xff0c;如何在Mac平台上运行这款游戏可能是一个问题。此外&#xff0c;作为一名…

数据库day1

MySQL的安装&#xff1a; 采用MySQL的zip格式安装

原创作品—— 文旅类、教育类网站设计

文旅类网站设计应追求简约风格&#xff0c;利用空白和少量文字突出关键信息&#xff0c;吸引用户眼球。同时&#xff0c;采用高质量图片和视频展示文化特色&#xff0c;提升视觉体验。 确保核心功能如搜索、预订、景点介绍等显眼易用&#xff0c;提供清晰的导航栏和响应式设计&…

基于OpenMV识别数字及程序说明

OpenMV简介 OpenMV是一个开源、低成本且功能强大的机器视觉模块。它基于STM32F427CPU&#xff0c;集成了OV7725摄像头芯片&#xff0c;能在小巧的硬件模块上&#xff0c;用C语言高效地实现核心机器视觉算法&#xff0c;并提供了Python编程接口&#xff0c;使得图像处理的复杂度…

探索迁移学习:通过实例深入理解机器学习的强大方法

探索迁移学习&#xff1a;通过实例深入理解机器学习的强大方法 &#x1f341;1. 迁移学习的概念&#x1f341;2. 迁移学习的应用领域&#x1f341;2.1 计算机视觉&#x1f341;2.2 自然语言处理&#xff08;NLP&#xff09;&#x1f341;2.3 医学图像分析&#x1f341;2.4 语音…

数字信号处理教程(2)——时域离散信号与时域离散系统

上回书说到数字信号处理中基本的一个通用模型框架图。今天咱们继续&#xff0c;可以说今天要讲的东西必须是学习数字信号处理必备的观念——模拟与数字&#xff0c;连续和离散。 时域离散序列 由于数字信号基本都来自模拟信号&#xff0c;所以先来谈谈模拟信号。模拟信号就是…

Mybatis一级缓存

缓存 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。 Mybatis和Hibernate一样&#xff0c;也有一级和二级缓存&#xff0c;同样默认开启的只有一级缓存&#xff0c;二级缓…

奇瑞被曝强制加班,“896”成常态且没有加班费

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 7 月 2 日消息&#xff0c;一位认证为“奇瑞员工”的网友近期发帖引发热议&#xff0c;奇瑞汽车内部存在强制加班行为&#xff0c;每周加班时长需大于 20 小时并且没有加班费&#xff0c;仅补贴 10 元…

Linux-gdb

目录 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 4.快速跳出函数体 5.其他 1.-g 生成含有debug信息的可执行文件 2.gdb开始以及gdb中的常用执行指令 3.断点的本质用法 断点的本质是帮助我们缩小出问题的范围 比如&#xff0c;…

Linux动态库的制作

Linux操作系统支持的函数库分为&#xff1a; 静态库&#xff0c;libxxx.a&#xff0c;在编译时就将库编译进可执行程序中。 优点&#xff1a;程序的运行环境中不需要外部的函数库。 缺点&#xff1a;可执行程序大 动态库&#xff0c;又称共享库&#xff0c;libxxx.so&#…

cv2.cvtColor的示例用法

-------------OpenCV教程集合------------- Python教程99&#xff1a;一起来初识OpenCV&#xff08;一个跨平台的计算机视觉库&#xff09; OpenCV教程01&#xff1a;图像的操作&#xff08;读取显示保存属性获取和修改像素值&#xff09; OpenCV教程02&#xff1a;图像处理…

NSSCTF-Web题目22(弱比较、数组绕过)

目录 [鹤城杯 2021]Middle magic 1、题目 2、知识点 3、思路 [WUSTCTF 2020]朴实无华 4、题目 5、知识点 6、思路 [鹤城杯 2021]Middle magic 1、题目 2、知识点 代码审计&#xff0c;弱比较、数组绕过 3、思路 打开题目&#xff0c;出现源代码&#xff0c;我们进行审…

强行仅用time.localtime制作“日历牌”——全程记录“顶牛”“调戏”我的AI学习搭子

强行只用time.localtime制作“日历牌”&#xff0c;码好代码试炼通过&#xff0c;想榨取ai智能优化算法&#xff0c;结果失败。本文详细记录“顶牛”全过程。 (笔记模板由python脚本于2024年07月01日 19:16:26创建&#xff0c;本篇笔记适合喜欢python&#xff0c;喜欢搞“事儿”…