IIC通信协议(硬件实现IIC通信详解I)

article/2025/6/24 8:40:27

IIC通信协议

  • 什么是IIC协议
  • 协议层
    • 起始信号和停止信号
    • 数据的有效性

什么是IIC协议

I2C(Inter-Integrated Circuit)通讯协议是由 Phiilps 公司开发的两线式串行总线,用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准。

IIC通信由两根线构成,一根为信号线(SDA),另外一根为时钟线(SCL)。故IIC通信的物理层构成如下:

注意!此处的信号线与地址线都是总线。只要有一对设备在使用,总线1便被占用,其他设备不能使用。
为了区分设备,每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。当有多个主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

这里解释一下这个“地址“。这个地址是IIC设备的地址,在IIC通信中,需要指定传送设备的地址。这个应该很容易理解,最常用的IP协议也有IP地址之说,TCP协议也有端口之说。不指定地址,就无法得知数据要发送到哪里去,通信就无法构成。这个不需要过多赘述。

但笔者在刚刚开始使用时,不知道这个地址究竟是以哪一种形式存在在通信中的。在MCU中,初始化IIC接口时,就需要你定义一个IIC地址,这就是你这个IIC接口的通信地址了(一般都是0)代码如下:
hi2c1.Init.OwnAddress1 = 0;

而我们一般用的IIC芯片的地址,如何得知呢?这个地址是以什么形态存在的?是连上MCU后MCU分配的吗?

IIC芯片的地址,都由IIC芯片自身决定。而且一般来说,都会提供几位(多数为3位)给用户自定义。拿LM75A温度传感器芯片来说,IIC通信地址为7bit,前4位是固定的(1001)后三位提供给用户自定义,做在引脚上通过用户输入的电平来决定地址位的高低。用户输入低电平,表示该位为0,用户输入高电平,表示该位为1。若把低三位拉低,地址就为0x90。如图:

协议层


S 表示传输起始信号,此时连接到 I2C 总线上所有的从机都会接收到这个信
号。

Slave Address 表示从机地址,此地址可以是 7 位或 10 位。当主机广播的地
址与某个设备地址相同时,这个设备就被选中了。

之后就是 R/W(传输方向选择位),该位为 0 时,表示后面的数据传输方向
是主机会写信息到被选中的从机;为 1 表示主机会向从机读信息。

当从机已经和从机“匹配”好了,那么此时主机或从机会返回一个应答(ACK)
或非应答(NACK)信号,只有收到信号后,主机才会继续发送或接收数据。这里的“继续”之所以提出来是因为发送和接收,对应从机发出的应答信号和主机发出的应答信号,是重复的。
当主机向从机发送一个停止信号(P),表示不再传输数据。当主机希望停止
接收时,向从机返回一个(NACK),则从机自动停止数据传输。

这是IIC通信的数据帧。可以看出。通信由1位的起始信号,7位地址位,1位表示读写的信号位,一位ACK应答信号,一字节的数据位,1位ACK应答信号,一字节数据位……直到数据全部发送完毕,产生一位终止位。

而IIC通信还支持一种比较复杂的通信模式。通信时和设备的某一寄存器进行通信。如图下方的数据帧。数据帧内发送了两段起始信号S。在第一段数据的DATA中,常常用于表示内部的寄存器地址,在第二次传输中,则是对内部的寄存器进行访问和读写

以上是IIC通信协议层读写的基本过程。

下面我们进一步了解每一个信号在IIC协议中是如何规定的

起始信号和停止信号

起始信号和终止信号是两种特殊的状态,如图 ,当 SLC 为高电平时 SDA 由
高电平向低电平切换,表示通讯的起始;当 SCL 是高电平时 SDA 由低电平向高电平切换,表示通讯的停止。这两种信号一般由主机产生
。如图:

数据的有效性

I2C 的 SDA 用来传输数据,SCL 进行数据的同步,如下图。SDA 数据线在SCL 的每个时钟周期传输一位数据。有效和无效看图即可,需要主要的是当 SCL为低电平时,SDA 数据无效,一般此时 SDA 进行电平转换,为下一次表示数据做好准备


传输方向依靠R/W位来判断

应答信号:响应包括应答(ACK)和非应答(NACK)两种。当设备(主机或从机)接收到 I2C 传输的一个字节数据后,若希望对方继续发送数据,则需要向对方发送应答(ACK)信号,发送方则会继续发送数据;若接收端希望结束数据传输,则向对方发送非应答(NACK)信号。发送方收到后会产生停止信号,结束数据发送。

以上为IIC协议层内容。STM32的IIC架构和STM32中的IIC接口如何使用,下一部分来提及。

后篇:STM32IIC通信详解(硬件实现 基于HAL库编程)


  1. 指多个设备公用的信号线,在一个 I2C 通讯总线中,可连接多个 I2C
    设备通讯,支持多个通讯主机及多个通讯从机 ↩︎


http://chatgpt.dhexx.cn/article/sxOnKsux.shtml

相关文章

详解通信协议之IIC通信协议

详解通信协议之IIC通信协议 本文结合AT24C02对IIC通信协议原理进行了描述。 IIC通信协议(以AT24C02为例) IIC通讯协议(Inter-Integrated Circuit)是由 Philips 公司开发双向同步半双工串行总线,只需要两根线(SDA、SCL)即可在连接于总线上的器件之间传…

IIC(I2C)通信协议详解

简介 I2C 是飞利浦公司设计的,一种很常见的总线协议, I2C 使用两条线在主控制器和从机之间进行数据通信。一条是 SCL(串行时钟线),另外一条是SDA(串行数据线),这两条数据线需要接上拉电阻,总线空闲的时候 SCL 和 SDA …

IIC 通信协议

一、IIC 通信协议介绍 IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。 如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统…

三大通信协议(二):IIC通信协议

目录 1. 概念2. 硬件连接3. 数据传输协议3.1 开始信号3.2 地址位3.3 读写位(R/W)3.4 应答位(ACK / NACK)3.5 数据位(8Bit)3.6 停止信号 4. 软件编写4.1 初始化4.2 开始信号4.3 IIC发送一个字节数据4.4 IIC读…

IIC通信协议总结

(1)概述 I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时…

IIC通信协议,搞懂这篇就够了

注:公众号后台发送 “IIC” 即可获取基于STM32上实现软件模拟IIC的完整代码。 I2C(IIC)属于两线式串行总线,由飞利浦公司开发用于微控制器(MCU)和外围设备(从设备)进行通信的一种总线,属于一主多从(一个主设备(Master),多个从设备…

IIC通讯协议

一、简介 IIC(Inter-integerted Circuit)集成电路总线,该通信协议由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场景下使用,传输距离短,任意…

搜狗搜索正式接入微信公众号

搜狗搜索正式接入微信公众号 6月9日中午消息,搜狗搜索今日宣布正式接入微信公众号数据。用户将在搜狗搜索页面查询和浏览微信公众号文章。 据悉,在搜狗搜索框中输入微信公众号关键词,便可在搜索结果页中查看相关微信公众号的文章列表&#xf…

Python爬虫 selenium自动化 利用搜狗搜索爬取微信公众号文章信息

少年最好的地方就是:虽然嘴上说要放弃,心底却总会憋着一口气。——刘同 文章目录 一、需求和网页分析二、selenium爬虫一、需求和网页分析 URL:https://weixin.sogou.com/ 你是否有特别喜欢的一些公众号文章,比如说关于网易云热评的。 我那么多遗憾,那么多期盼,你知道…

RSS订阅微信公众号初探-feed43

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

python爬虫爬取微信公众号历史文章链接

一、最近公司有了要爬取微信公众号文章链接的需求,之前最初接触爬公众号文章的时候,用的是搜狗微信,在这个上面可以搜到相关的微信公众号文章,但是这些链接是有时效性的,第二天链接就打不开了(不知道现在是…

python抓取搜狗微信公众号文章

初学python,抓取搜狗微信公众号文章存入mysql mysql表: 代码: import requests import json import re import pymysql# 创建连接 conn pymysql.connect(host你的数据库地址, port端口, user用户名, passwd密码, db数据库名称, charsetut…

搜狗微信文章采集php,[造轮子]爬取搜狗微信公众号文章

背景:想做一个公众号文章资源APP,发现搜狗有搜索公众号文章功能,果断开撸。http://wxiread.com (用CMS搭了个简易的站)。 Step1.分析栏目及接口 搜狗分了20个栏目,分别是 热门,推荐,段子手,养生堂,私房话… 对应地址从 /pcindex/p…

微信公众号的“温柔一刀”,搜狗微信搜索部分功能将被下线

作为搜狗的单一最大股东,腾讯与搜狗之间的联系向来就很紧密,其中包括搜搜被并入搜狗、微信公众号的搜索功能划分给搜狗、腾讯新闻、QQ浏览器等腾讯系产品的搜索功能全部换成搜狗。腾讯对搜狗的支持是显而易见的,但若有利益冲突的情况下&#…

【scrapy爬虫】最新sogou搜狗搜索 机智操作绕过反爬验证码(搜狗微信公众号文章同理)

前情提要 此代码使用scrapy框架爬取特定“关键词”下的搜狗常规搜索结果,保存到同级目录下csv文件。并非爬取微信公众号文章,但是绕过验证码的原理相同。如有错误,希望大家指正。 URL结构 https://www.sogou.com/web?query{关键词}&p…

利用搜狗抓取微信公众号文章

微信一直是一个自己玩的小圈子,前段时间搜狗推出的微信搜索带来了一丝曙光。搜狗搜索推出了内容搜索和公众号搜索两种,利用后者可以抓取微信公众号的最新内容,看了下还是比较及时的。 每个公众号都有一个openid,最早可以直接利用…

html语言判断水仙花数,水仙花数判断讲解

今天要讲解的这道题是 水仙花数判断 题目要求 本题要求实现一个函数,判断任一整数是否为水仙花数(必须是三位数,且数的每一位上数字的立方和与数本身相等)。例如1531^35^33^3112527153,而1或155则不是水仙花数。如果是水仙花数,则…

水仙花数的求解思路

目录 水仙花数输入一个数,求解从0到这个数的所有水仙花数 解题思路源代码:注意事项 水仙花数 在以前的博客之中写过求解水仙花数的博客 详情见下面链接: 求解水仙花数 在这里就主要写求解水仙花数的思路 输入一个数,求解从0到这…

计算水仙花数有哪些

计算水仙花数有哪些 一、介绍水仙花数二、使用while循环计算水仙花数1.源代码2.运行结果 三、使用for循环计算水仙花数1.执行代码部分2.运行结果3.源代码 一、介绍水仙花数 水仙花数指的是三位整数中每个数的立方之和等于本身的数 二、使用while循环计算水仙花数 1.源代码 …

水仙花数

一、描述: 所谓的“水仙花数”是指一个三位数其各位数字的立方和等于该数本身。 例如153是“水仙花数”,因为:153 13 53 33。 在数论中,水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮…