IIC总线设计①——IIC通信协议

article/2025/6/24 8:05:02

目录

一、IIC(Inter-Integrated Circuit)总线介绍

二、IIC协议

(一)IIC通信过程

(二)起始信号和停止信号

程序

(三)应答信号和非应答信号

 程序

(四)数据有效性

1.读一个字节程序

2.写一个字节程序


一、IIC(Inter-Integrated Circuit)总线介绍

1.用于连接微控制器及其外围设备,多用与主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机。在CPU与被控IC之间,IC与IC之间进行双向传送,高速IIC总线可达400kbps以上。

2.IIC总线上的每个设备都有自己的一个唯一的地址,来确保不同设备之间访问的准确性。

3.IIC总线上一共只有两个总线,一条是双向的串行数据线SDA,一条是串行时钟线SCL

4.传输数据的设备间是简单的主/从关系(即数据传输是从主机发起,从机接收,从机不可能主动引起数据传输)

5.串行的8位双向数据传输。

6.IIC的高阻态:用于输入/输出,可独立输入/输出低电平和高阻状态,若需要产生高电平,则需使用外部上拉电阻。高阻状态是是三态门电路的一种状态。逻辑门的输出除了有高,低电平两种状态外,还有第三种状态—高阻状态的门电路,电路分析时可看做开路理解。为了避免总线信号的混乱,IIC的空闲状态有外部上拉,而此时空闲设备被拉到了高祖态,相当于断路,整个IIC总线只有开启了的设备才会正常进行通信,而不会干扰到其他设备。

二、IIC协议

(一)IIC通信过程

        首先由主机产生一个起始信号(START),此时连接到IIC总线上的所有从机都会接收这个信号,所有从机开始等待主机接下来发送的第一个命令字节(共8位,高7位表示从机地址,最低位表示读、写),在总线上,每个设备的地址都是唯一的,当主机发送了命令字节后,所有从机会开始进行地址匹配,当某设备地址与主机发送的地址相同时,这个设备就被选中了,没有选中的设备会忽略之后的所有信息,继续保持高阻态连接。当从机匹配到地址后,从机会向主机发送一个应答信号(ACK),只有主机接收到应答信号之后,主机才能继续发送或接收信号。

        当读写位配置为0时,表示由主机向从机写数据。当主机接收到从机的应答信号之后,主机开始正式向从机发送数据,数据以字节为单位传输,主机每发送完一个字节数据,都要等待从机的应答信号(ACK),重复这个过程,主机可以向从机传输N个数据,传输字节数量没有限制。当数据传输结束时,主机向从机发送一个停止传输信息(STOP),表示不再传输数据。

        当读写位配置为1时,表示由主机向从机读数据。当主机接收到从机的应答信号之后,主机开始正式从从机读取数据,数据也是以字节为单位传输,从机每发送完一个字节数据,都会等待主机发送应答信号(ACK),重复这个过程,主机可以从从机读取N个数据,传输字节数量没有限制。当传输结束时,主机向从机发送一个非应答信号(NACK),则从机停止发送数据。

(二)起始信号和停止信号

当 SCL 线是高电平时 SDA 线从高电平向低电平切换,这个情况表示通讯的起始。当 SCL 是高电平时 SDA线由低电平向高电平切换,表示通讯的停止。起始和停止信号一般由主机产生。

程序

/*
*********************************************************************************************************
*	函 数 名: IIC_Start
*	功能说明: CPU发起IIC总线启动信号
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
static void IIC_Start(void)
{/* 当SCL高电平时,SDA出现一个下跳沿表示IIC总线启动信号 */IIC_SDA_1();IIC_SCL_1();IIC_Delay();IIC_SDA_0();IIC_Delay();IIC_SCL_0();IIC_Delay();
}
/*
*********************************************************************************************************
*	函 数 名: IIC_Start
*	功能说明: CPU发起IIC总线停止信号
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
static void IIC_Stop(void)
{/* 当SCL高电平时,SDA出现一个上跳沿表示OLED_IIC总线停止信号 */IIC_SDA_0();IIC_SCL_1();IIC_Delay();IIC_SDA_1();
}

(三)应答信号和非应答信号

        若希望对方继续发送数据,则需要向对方发送“应答(ACK)”信号,发送方会继续发送下
一个数据;若接收端希望结束数据传输,则向对方发送“非应答(NACK)”信号,发送方接
收到该信号后会产生一个停止信号,结束信号传输,等待应答期间,SDA为高电平表示非应答信号,为低电平表示应答信号。

 程序

/*
*********************************************************************************************************
*	函 数 名: IIC_Ack
*	功能说明: CPU产生一个ACK信号
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
static void IIC_Ack(void)
{IIC_SDA_0();	/* CPU驱动SDA = 0 */IIC_Delay();IIC_SCL_1();	/* CPU产生1个时钟 */IIC_Delay();IIC_SCL_0();IIC_Delay();IIC_SDA_1();	/* CPU释放SDA总线 */
}/*
*********************************************************************************************************
*	函 数 名: IIC_NAck
*	功能说明: CPU产生1个NACK信号
*	形    参:无
*	返 回 值: 无
*********************************************************************************************************
*/
static void IIC_NAck(void)
{IIC_SDA_1();	/* CPU驱动SDA = 1 */IIC_Delay();IIC_SCL_1();	/* CPU产生1个时钟 */IIC_Delay();IIC_SCL_0();IIC_Delay();	
}

(四)数据有效性

在时钟的高电平周期内,SDA线上的数据必须保持稳定,数据线仅可以在时钟SCL为低电平时改变,如下图。

1.读一个字节程序

/*
*********************************************************************************************************
*	函 数 名: IIC_ReadByte
*	功能说明: CPU从IIC总线设备读取8bit数据
*	形    参:无
*	返 回 值: 读到的数据
*********************************************************************************************************
*/
static uint8_t IIC_ReadByte(void)
{uint8_t i;uint8_t value;/* 读到第1个bit为数据的bit7 */value = 0;for (i = 0; i < 8; i++){value <<= 1;IIC_SCL_1();IIC_Delay();if (IIC_SDA_READ()){value++;}IIC_SCL_0();IIC_Delay();}return value;
}

2.写一个字节程序

/*
*********************************************************************************************************
*	函 数 名: IIC_SendByte
*	功能说明: CPU向IIC总线设备发送8bit数据
*	形    参:_ucByte : 等待发送的字节
*	返 回 值: 无
*********************************************************************************************************
*/
static void IIC_SendByte(uint8_t _ucByte)
{uint8_t i;/* 先发送字节的高位bit7 */for (i = 0; i < 8; i++){		if (_ucByte & 0x80){IIC_SDA_1();}else{IIC_SDA_0();}IIC_Delay();IIC_SCL_1();IIC_Delay();	IIC_SCL_0();if (i == 7){IIC_SDA_1(); // 释放总线}_ucByte <<= 1;	/* 左移一个bit */IIC_Delay();}
}

至此,相信读者已经对IIC总线有了初步认识,具体的IIC如何应用可能还是一脸懵逼的,但是不要慌,下一期我们使用IIC通信协议对24C32(EEPROM存储器)进行读写操作,安排!


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

相关文章

STM32基于IIC通信协议的OLED模块使用(详解)

目录 前言 一、项目内容 实验简介 二、IIC模块 1、IIC协议简介 2、物理层 3、协议层 4、硬件IIC代码配置 5、软件模拟IIC配置 1、起始信号与停止信号 2、从机应答信号 3、数据的有效性 4、数据传输 三、OLED模块 1、软件配置 2、OLED原理 1、OLED初始化函数 …

IIC 通信协议 (一)

目录 引言 IIC协议 1、历史 2、特点 3、信号线 4、主从关系 5、通信过程 6、协议规范 地址 1、器件地址 2、存储器地址 读写时序 1、写时序 1.1、单字节写时序 1.2、连续写时序 2、读时序 2.1、单字节读时序 2.2、连续读时序 参考声明 引言 这个专栏闲置好…

基础通信协议之 IIC (I2C) 详细讲解

IIC是当今嵌入式应用中最常见的串行通信协议之一。对比OneWire严苛的时序要求&#xff0c;SPI等更多的线缆要求&#xff0c;IIC处于一个折中的位置&#xff1a;不那么多的2根线缆的硬件要求&#xff0c;不那么复杂严苛的时序要求&#xff0c;便可进行多主多从的双向通信&#x…

IIC 通信协议 (二)

目录 引言 子模块设计 思路 单字节 IIC 发送模块 思路 Verilog 源码 多字节发送控制模块 思路 Verilog 源码 仿真 思路 test bench 仿真结果 参考声明 引言 本篇博文承接前文&#xff0c;继续做 IIC 通信协议 FPGA实现相关的内容。用Verilog 编写一个 IIC 通信控…

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

IIC通信协议 什么是IIC协议协议层起始信号和停止信号数据的有效性 什么是IIC协议 I2C&#xff08;Inter-Integrated Circuit&#xff09;通讯协议是由 Phiilps 公司开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。是微电子通信控制领域广泛采用的一种总线标准…

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

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

IIC(I2C)通信协议详解

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

IIC 通信协议

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

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

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

IIC通信协议总结

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

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

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

IIC通讯协议

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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