串行通信——IIC总结

一.什么是IIC?

IIC(Inter-Integrated Circuit)也称I2C,中文叫集成电路总线。是一个多主从串行总线,由飞利浦公司发明的通讯总线,属于半双工同步传输类总线,仅由两条线就能完成多机通讯,一条SCL时钟线,另外一条双向数据线SDA,IIC总线要求每个设备SCL/SDA线都是漏极开路模式,因此必须带上拉电阻才能正常工作。I2C协议占用引脚少,硬件实现简单,可扩展性强,I2C数据传输速率有标准模式(100kbps)、快速模式(400kbps)和高速模式(3.4Mbps)。

IIC使用两根信号线进行通信:一根时钟线SCL,一根数据线SDA。IIC将SCL处于高时SDA拉低的动作作为开始信号,SCL处于高时SDA拉高的动作作为结束信号传输数据时,SDA在SCL低电平时改变数据,在SCL高电平时保持数据,每个SCL脉冲的高电平传递1位数据。

二.IIC硬件和时序分析

1.IIC总线物理接线

SDA 和SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压。当总线空闲时,这两条线路都是高电平。连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能。

总线器件数目:由于每一个IIC器件在IIC总线上都有一个确切的7位地址码,这也意味着一条IIC总线上最多可链接127(0X00位地址不使用)个地址互不相同的IIC器件。但在单条IIC总线上链接不多与127个器件的同时,必须要满足总线电容不能超过400pF(协议规定),总线之所以规定电容大小是因为,IIC的OD要求外部有电阻上拉,电阻和总线电容产生了一个RC延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险。传输速度越快,信号的窗口就越小,上升沿下降沿时间要求更短更陡峭,所以RC乘积必须更小。实际设计中经验值大概是8个器件左右。

2.IIC总线时序

其时序图如下所示:

(1)数据有效性

IIC总线进行数据传送时,在SCL的每个时钟脉冲期间传输一个数据位,时钟信号SCL为高电平期间,数据线SDA上的数据必须保持稳定,只有在时钟线SCL上的信号为低电平期间,数据线SDA上的高电平或低电平状态才允许变化,因为当SCL是高电平时,数据线SDA的变化被规定为控制命令(START或STOP,也就是起始信号和停止信号)。

(2)空闲状态(IDLE)

DLE表示总线空闲状态。此状态下时钟信号SCL和数据信号SDL均为高电 平,此时无I2C设备工作。时钟线(SCL)和数据线(SDA)接上拉电阻,默认高电平,就是为了表示总线是空闲状态。

  (3) 起始信号(START)

表示起始状态。在空闲状态下,时钟信号SCL继续保持高电平,数据信号SDL出现由高电平转换为低电平的下降沿,此时产生一个起始信号,与总线相连的I2C设备检测到起始信号之后,进入起始状态等待控制字节的输入。

(4) 停止信号(STOP)

I2C通信的停止信号由主设备发出,SCL保持高电平,SDA由低电平跳变到高电平。

(5) 应答(ACK)与非应答(NACK)

应答信号接收端收到有效数据后需要向对方响应的信号,发送端每发送一个字节(8位)数据,在第9个时钟周期释放数据线去接收对方的应答。在第9个时钟周期:当SDA是低电平为有效应答(ACK),表示对方接收成功;当SDA是高电平为无效应答(NACK),表示对方没有接收成功。注意:数据发射端需要在第9个时钟周期等待接收端的应答信号。

(6) 数据读写操作

IIC协议的读写操作都是一字节大小,从高到低收发数据。

三.IIC主设备与从设备的通信过程

1.主设备给从设备发送/写入数据:

(1)主设备发送起始(START)信号。

(2)主设备发送设备地址到从设备。

(3)等待从设备响应(ACK)。

(4)主设备发送数据到从设备,一般发送的每个字节数据后会跟着等待接收来自从设备的响应(ACK)。

(5)数据发送完毕,主设备发送停止(STOP)信号终止传输。

2.主设备从从设备接收/读取数据

(1)设备发送起始(START)信号

(2)主设备发送设备地址到从设备

(3)等待从设备响应(ACK)

(4)主设备接收来自从设备的数据,一般接收的每个字节数据后会跟着向从设备发送一个响应(ACK)

(5)一般接收到最后一个数据后会发送一个无效响应(NACK),然后主设备发送停止(STOP)信号终止传输。

四.I2C的应用领域

1.传感器接口

I2C通信协议常用于与各种传感器进行接口通信,例如温度传感器、湿度传感器、光传感器等。通过I2C总线,主机设备可以读取传感器的数据,并进行相应的控制和处理。例如温度传感器和湿度传感器:用于测量环境温度和湿度。

2.存储器接口

许多存储器设备(如EEPROM、Flash存储器)也采用了I2C通信协议作为数据传输的接口。主机设备可以通过I2C总线与存储器设备进行数据的读写操作。例如EEPROM和存储器芯片:用于数据存储和读写操作。

3.显示设备接口

I2C通信协议也广泛用于与显示设备进行接口通信,如LCD显示屏、OLED显示屏等。通过I2C总线,主机设备可以向显示设备发送指令和图像数据,实现图形显示的功能。例如LCD显示屏和OLED显示屏:用于文本和图形显示。

4.扩展IO接口

除了传感器、存储器和显示设备接口外,I2C通信协议还被用作扩展IO接口的一种方案。通过连接扩展IO芯片,主机设备可以扩展更多的输入输出端口,实现与外部设备的连接和控制。例如扩展IO和控制芯片:用于扩展输入输出端口和外设控制。

通过使用I2C协议,各种外设可以通过简单的两根线进行连接,减少了硬件复杂性和引脚数量,提供了更灵活和简洁的系统设计方案。

五.实际代码示例

STM32 HAL库配置与使用:
// 包含必要头文件
#include "stm32f4xx_hal.h"// 初始化I2C实例
void I2C_Init(I2C_HandleTypeDef *hi2c) {hi2c->Instance = I2Cx; // 选择具体I2C接口,如I2C1hi2c->Init.ClockSpeed = 100000; // 设置总线速度为100kHzhi2c->Init.DutyCycle = I2C_DUTYCYCLE_2; // 时钟占空比hi2c->Init.OwnAddress1 = 0x00; // 主机地址(如果适用)hi2c->Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; // 地址长度hi2c->Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; // 双地址模式禁用hi2c->Init.OwnAddress2 = 0x00; // 第二个主机地址(如果适用)hi2c->Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; // 禁用一般调用hi2c->Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; // 启用时钟延展HAL_I2C_Init(hi2c); // 调用HAL库函数完成初始化
}// 发送数据到从设备
HAL_StatusTypeDef I2C_Master_Transmit(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) {return HAL_I2C_Master_Transmit(hi2c, DevAddress, pData, Size, Timeout);
}// 接收数据(主接收模式)
HAL_StatusTypeDef I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) {return HAL_I2C_Master_Receive(hi2c, DevAddress, pData, Size, Timeout);
}// 或者在中断模式下处理接收
void HAL_I2C_MasterRxCpltCallback(I2C_HandleTypeDef *hi2c) {// 在这里处理接收到的数据// ...// 重新启动传输或者清除中断标志// ...
}

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

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

相关文章

【解读】区块链和分布式记账技术标准体系建设指南

大家好,这里是苏泽。一个从业Java后端的区块链技术爱好者。 今天带大家来解读这份三部门印发的行业建设指南《区块链和分布式记账技术标准体系建设指南》 原文件可查看P020240112840724196854.pdf (www.gov.cn) 以下是个人解读,如有纰漏请指正&#xff…

【系统架构师】-第16章-嵌入式系统架构设计理论与实践

1、嵌入式系统发展 第一阶段:单片微型计算机 (SCM) 阶段,即单片机时代,五操作系统 第二阶段:微控制器 (MUC) 阶段,有简单操作系统 第三阶段:片上系统 (SoC),兼容各种微处理器 第四阶段&…

软件测试 —— 测试用例设计报告

写出测试网站的测试用例,测试网站具体内容可看团购网站系统需求说明书1.2.doc 一、流程1:注册→登录 图1:注册->登录流程图 1、 使用场景设计法设计测试用例 1) 找出基本流和备选流 基本流注册用户-成功登录系统备选流1注册…

Jenkins cron定时构建触发器

from: https://www.jenkins.io/doc/book/pipeline/syntax/#cron-syntax 以下内容为根据Jenkins官方文档cron表达式部分翻译过来,使用机翻加个人理解补充内容,包括举例。 目录 介绍举例:设置方法方法一:方法二&#xf…

3.2_1 虚拟内存的基本概念

3.2_1 虚拟内存的基本概念 虚拟存储技术也是存储空间扩充的一种技术,它比交换、覆盖技术要更先进一些。 (一)传统存储管理方式的特征、缺点 对于这种传统的存储管理方案,很多暂时用不到的数据也会长期占用内存,导致内存…

【数据结构和算法初阶(C语言)】栈的概念和实现(后进先出---后来者居上的神奇线性结构带来的惊喜体验)

目录 1.栈 1.1栈的概念及结构 2.栈的实现 3.栈结构对数据的处理方式 3.1对栈进行初始化 3.2 从栈顶添加元素 3.3 打印栈元素 3.4移除栈顶元素 3.5获取栈顶元素 3.6获取栈中的有效个数 3.7 判断链表是否为空 3.9 销毁栈空间 4.结语及整个源码 1.栈 1.1栈的概念及结构 栈&am…

高压辊磨机(辊压机)在矿物加工领域应用广泛 目前本土企业处于向高端转型阶段

高压辊磨机(辊压机)在矿物加工领域应用广泛 目前本土企业处于向高端转型阶段 高压辊磨机又称为辊压机、挤压磨,是基于料层粉碎原理设计的一种干式辊磨设备。高压辊磨机结构形式多样,但原理基本相似,主要由机架、高压工…

浅谈C++绑定器bind1st、bind2nd和函数对象function

今天我们先来谈谈C 标准库里面的绑定器bind1st,bind2nd 和函数对象function C 绑定器和函数对象 一、绑定器二、函数对象 一、绑定器 虽然在C11标准中这两个绑定函数已经被弃用,但仍然值得我们深入思考其底层原理。从字面上理解,“绑定” 这…

Explain

Explain EXPLAIN是MySQL提供的一种用于分析SQL查询执行计划的工具,通过它我们可以深入了解数据库如何执行一条SQL语句,以及优化器在选择索引、访问表和排序数据等方面的决策。 我整理了一份思维导图方便更好查看各个参数的意义,红色表示比较…

RabbitMq踩坑记录

1、连接报错:Broker not available; cannot force queue declarations during start: java.io.IOException 2.1、原因:端口不对 2.2、解决方案: 检查你的连接配置,很可能是你的yml里面的端口配置的是15672,更改为5672即…

css超出部分显示省略号

目录 前言 一、CSS单行实现 二、CSS多行实现(CSS3出的,兼容性需要注意) 三、微信小程序超过2行出现省略号实现 四、JavaScript脚本实现 前言 CSS文本溢出就显示省略号,就是在样式中指定了盒子的宽度与高度,有可能出现某些内…

LLM - 大语言模型(LLM) 概述

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136617643 大语言模型(LLM, Large Language Model)的发展和应用是一个非常广泛的领域,涉及从早期的统计模型到现代基于深度学…

【AI+CAD】(二)LLM和VLM生成结构化数据结构(PPT/CAD/DXF)

当前LLM和VLM在PPT生成任务上已经小有成效,如ChatPPT。 @TOC 1. PPT-LLM LLM根据用户的instruction生成规范的绘制ppt的API语句:即使是最强的GPT-4 + CoT也只能达到20-30%的内容准确度。 LLM输入:User_instruction(当前+过去)、PPT_content、PPT_reader_API。其中 PPT_rea…

面试经典150题——随机链表的复制

​前两天断更了两天有点事情🤗 1. 题目描述 2. 题目分析与解析 2.1 思路一 开始还是没什么思路,没思路那就先把题目解决不管方法的好坏。如果不考虑复杂度,该怎么解决? 可以有这样的一种思路: 首先复制链表的所有节…

【python绘图】turle 绘图基本案例

文章目录 0. 基础知识1. 蟒蛇绘制2. 正方形绘制3. 六边形绘制4. 叠边形绘制5. 风轮绘制 0. 基础知识 资料来自中国mooc北京理工大学python课程 1. 蟒蛇绘制 import turtle turtle.setup(650, 350, 200, 200) turtle.penup() turtle.fd(-250) turtle.pendown() turtle.pen…

jeesite列表jqGrid表格底部汇总,基于onSelectRow和onSelectAll实现选中行汇总合计

一、最终效果图 二、表格启用复选框并初始化赋值 onSelectAll: function() { calc_sum(); }, onSelectRow: function() { calc_sum(); },// 加载成功后执行事件 ajaxSuccess: function(data){var dy = 0;var glbzqmrsdtyg = 0;var glbzqmrsschyg = 0;var glbzqmrsqtcy …

【贪心算法】Leetcode 55. 跳跃游戏

【贪心算法】Leetcode 55. 跳跃游戏 解法1解法2 ---------------🎈🎈55. 跳跃游戏 题目链接🎈🎈------------------- 解法1 关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内…

Python 语法及入门 (超全超详细) 专为Python零基础 一篇博客让你完全掌握Python语法

前言: 本篇博客超级详细,请尽量使用电脑端结合目录阅读 阅读时请打开右侧 “只看目录” 方便阅读 一、什么是Python 1.1 Python的诞生 1989年,为了打发圣诞节假期,Gudio van Rossum吉多 范罗苏姆(龟叔)决…

Gitee配置SSH登录

一、背景 新入手的电脑,需要对Gitee上存放的项目进行更改上传,发现上传不了需要登录,便采用SSH密钥进行登录,防止远程管理工程中的信息泄露 二、前提 电脑已下载Git Bash工具,在项目下点击鼠标右键,进入…

Linux 中搭建 主从dns域名解析服务器

CSDN 成就一亿技术人! 作者主页:点击! Linux专栏:点击! CSDN 成就一亿技术人! ————前言———— 主从(Master-Slave)DNS架构是一种用于提高DNS系统可靠性和性能的配置方式。…