stm32之IIC协议

news2024/11/19 17:42:48

主要通过两个层面来讲:物理层、协议层。

IIC是一个同步半双工串行总线协议。

一、物理层(通信模型)

1、最早是飞利浦公司开发的这个协议,最早应用到其产品上去。

2、两线制(两根信号线)

其中SCL为时钟线,SDA为数据线。

 

3、挂载在IIC总线上的设备有主从之分,可以同时挂载多个主机和多个从机。

主机:通信的发起方。所有的通信皆由主机先来发起。

从机:和主机进行通信。实现数据的交互。

 

4、IIC通信中,每一个设备(不论是主机还是从机)都有唯一的ID。

那么问题来了,在同一根信号线上有那么多的设备挂载,既有主机也有从机,假设主机1想和从机2进行通信,该怎么实现呢。主机1如何精准的找到我想通信的从机呢?这就和设备的唯一的ID有关,主机1可以去信号线上广播想要通信的从机ID,如果对应ID的从机收到了主机1发起的请求,则发送一个应答信号传送给主机1,表示本从机设备收到了主机的通信请求,然后选择是否应答该请求,如果应答则表示同意通信,如果返回给主机1的是一个非应答信号则表示不想与主机1通信。而其他从设备虽然也能接收到主机1的请求,但因为ID不一样,所以无法与主机1通信。

  1. 同一时刻只能有一个主机和一个从机进行通信

假如在同一个时刻,多个主机同时发起总线请求,也就是说同一时刻多个主机想要占据总线的使用权。此时将会有一个总线仲裁机制来决定到底是哪一个主机能使用信号线进行通信,也就是最终会是谁占据总线的使用权。

总线仲裁机制使用的是线与特性(总线空闲电平状态为高电平),也就是说谁能先拉低总线谁就能得到总线的控制权限,如果两者都能拉低总线,那就看谁的时间更长,总有一个时刻会有一个主机最终获得线权。那么其他主机就会主动的让出总线的控制权限。

2.空闲电平状态为高电平。

在时钟线和数据线上都接了一个上拉电阻。其作用就在于使得IIC总线的空闲电平信号为高电平。这两个上拉电阻的必须要的

所以我们在初始化配置GPIO的时候最好给其配置成开漏输出。因为开漏输出是无法自己输出一个高电平的(开漏输出只有低电平状态和高阻态),但是因为IIC设备是一定会接上拉电阻的,所以开漏输出模式下,空闲电平状态将会由上拉电阻来拉高。然而因为我们后面要使用GPIO口模拟的方式来实现IIC协议,所以在这里配置推挽也问题不大,因为在软件模拟的时候,总线的输出高输出低是由我们自己软件控制的。

3.IIC通信是高位先发,是以字节形式发送的(一次发8位)。

4.具有三种传输模式:标准模式传输速率为 100kbit/s ,快速模式为 400kbit/s ,高速模式下可达 3.4Mbit/s,但目前大多 I2C 设备尚不支持高速模式。

 

二、协议层

1、起始信号

起始信号是表示通信开始的信号,其表现为:在SCL时钟线为高电平期间,数据线产生一个由高到低的下降沿电平切换。

2、停止信号

 

起始信号是表示通信结束的信号,其表现为:在SCL时钟线为高电平期间,数据线产生一个由低到高的下降沿电平切换。

3、数据有效性

 

 

因为我们通过数据线发送的信号有高有低,所以在电平信号进行高低切换的过程当中,需要一定的时间,那么这时可以让此时的数据切换这段时间使得数据无效。在IIC里面,只有当时钟线为高电平的期间,数据才有效。时钟线为低电平的期间,数据是无效的。如果在数据切换期间读取数据有效,那么很可能会将切换电平信号识别成开始信号或结束信号。

4、应答信号

(1)应答

应答信号:表示一个肯定的回应。其表现为:在时钟线SCL高电平期间,数据线SDA维持一个稳定的低电平。

(2)非应答

非应答信号:表示一个否定的回应。其表现为:在时钟线SCL高电平期间,数据线SDA维持一个稳定的高电平,当然,有的时候,数据的接收方确实没有收到来自数据的发送方的信号,导致数据的接收方就没有理会数据的发送方,此时也属于非应答信号。所以非应答信号其实有好几种可能的情况。

注意:应答信号或非应答信号是谁发的,又是谁接收的呢?

这里需要特别注意一点,应答信号(非应答信号)是数据的接收方发出去的,并且由数据的发送方来接收的。这里要弄清楚一个概念,数据的接收方不等同于从设备,数据的发送方也不等同于主设备,因为数据的接收方可能是主设备也可能是从设备,同理,数据的发送方也一样,可能是主设备也可能是从设备,因为在数据的通信过程中,可能由主机向从机发

 

 

送数据,也可能由从机向主机发送数据(半双工通信,但通信的发起者都是主机)。当由主机向从机发送数据的时候,主机就是数据的发送方,从机就是数据的接收方,而当从机向主机发送数据的时候,从机就是数据的发送方,主机则变成了数据的接收方。所以,这里要特别注意,应答信号(非应答信号)是由数据的接收方发出去,并且由数据的发送方来接收的。

由于某种原因从机不对主机寻址信号应答时(如从机正在进行实时性的处理工作而无法接收总线上的数据),它必须将数据线置于高电平,而由主机产生一个终止信号以结束总线的数据传送。

如果从机对主机进行了应答,但在数据传送一段时间后无法继续接收更多的数据时,从机可以通过对无法接收的第一个数据字节的“非应答”通知主机,主机则应发出终止信号以结束数据的继续传送。

当主机接收数据时,它收到最后一个数据字节后,必须向从机发出一个结束传送的信号。这个信号是由对从机的“非应答”来实现的。然后,从机释放SDA线,以允许主机产生终止信号。

5、IIC时序生成方式

IIC时序可以通过软件模拟(即通过GPIO口模拟)的方式产生。

还可以通过硬件生成(通过配置IIC控制器来产生)IIC时序。

三、EEPROM(AT24Cxx)

最好是自己查看手册24C02。

AT24C01/02/04/08/16...是一个1K/2K/4K/8K/16K位串行CMOS,内部含有128/256/512/1024/2048个8位字节,AT24C01有一个8字节页写缓冲器,AT24C02/04/08/16有一个16字节页写缓冲器。该器件通过I2C总线接口进行操作,它有一个专门的写保护功能。

 

 

 

AT24C02器件地址为7位,高4位固定为1010,低3位由 A0/A1/A2信号线的电平决定。因为传输地址或数据是以字节为单位传送的,当传送地址时,器件地址占7位,还有最后一位(最低位R/W)用来选择读写方向,它与地址无关。

 

 

但在我们这块开发板上的是AT24C04,高4位固定为1010,低3位由 A0/A1/A2信号线的其中A0被数据地址位占用了,而原本的A0接入的是NC状态。具体的器件地址还是要看芯片原理图的接法。当P0接0时则表示对数据地址空间的0~255Bytes进行操作,当P0接1时表示对数据地址空间的256~511Bytes进行操作。

 

 

在原理图中,A2、A1均接地,包括接入NC状态的A0也接了地所以此时的设备地址为0xA0,如果加上读写位的话,写地址:0xA0,读地址:0xA1。

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

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

相关文章

windows下安装mysql

1.下载mysql压缩包 官网下载 我这里选择了最新的版本下载 百度网盘下载,提取码:fu48 2.解压 将下载的压缩文件解压到D:\data\mysql,可自定义位置。 3.配置环境变量 【我的电脑】右键选择【属性】,然后按下图操作,配…

Swing程序设计(2)JFrame窗体

文章目录 前言一、JFrame窗体的介绍 1.创建JFrame窗体2.窗体容器中添加或移除组件二、JFrame窗体的使用 1.JFrame类的常用构造方法2.实例相关语法总结 前言 该文将较为详细地介绍了Swing组件中的JFrame窗体。JFrame窗体是大部分Swing组件的一个载体,这些组件都要在这…

C语言练习7(巩固提升)

C语言练习7 编程题 前言 “芳林新叶催陈叶,流水前波让后波。”改革开放40年来,我们以敢闯敢干的勇气和自我革新的担当,闯出了一条新路、好路,实现了从“赶上时代”到“引领时代”的伟大跨越。今天,我们要不忘初心、牢记…

工作中提高CSS的编写效率,可以多用这三个CSS伪类

:where 基本使用 :where() CSS 伪类函数接受选择器列表作为它的参数&#xff0c;将会选择所有能被该选择器列表中任何一条规则选中的元素。 以下代码&#xff0c;文本都会变成 yellow 颜色 :where(div p) span {color: yellow; }<div class"test-div"><…

如何为你的公司选择正确的AIGC解决方案?

如何为你的公司选择正确的AIGC解决方案&#xff1f; 摘要引言词汇解释&#xff08;详细版本&#xff09;详细介绍1. 确定需求2. 考虑技术能力3. 评估可行性4. 比较不同供应商 代码快及其注释注意事项知识总结 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&…

微信8.0.41更新来了,看看有哪些变化吧

微信给我们带来了极大的方便&#xff0c;无论是日常聊天还是工作沟通&#xff0c;几乎离不开它。 时不时会给我一种熟悉的陌生感。 这个功能&#xff0c;好像我之前是没见过的。 就比如公众号信息流&#xff0c;刷着刷着就会发现&#xff0c;怎么会有看一看的信息推流会突然出现…

C语言控制语句——循环语句

什么是循环 重复执行代码 为什么需要循环 循环的实现方式 whiledo…whilefo while语句 语法格式&#xff1a; while (条件) {循环体…… }需求&#xff1a;跑步5圈 示例代码&#xff1a; #include <stdio.h>int main() {// 需求跑步5圈// 1. 条件变量的定义int i 1;…

golang入门笔记——nginx

文章目录 Nginx介绍Nginx的安装Nginx文件Nginx反向代理负载均衡nginx动静分离URLRewrite防盗链nginx高可用配置安全性Nginx限流Nginx缓存集成Lua脚本OpenRestry Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占用内存少&#xff0c;并发能力强&#x…

15-数据结构-二叉树的遍历,递归和非递归

简介&#xff1a; 本文主要是代码实现&#xff0c;二叉树遍历&#xff0c;递归和非递归&#xff08;用栈&#xff09;。主要为了好理解&#xff0c;直接在代码处&#xff0c;加了详细注释&#xff0c;方便复习和后期默写。主要了解其基本思想&#xff0c;为后期熟练应用…

plsql ebs 工作中的简单笔记

工作流中给系统界面发送消息&#xff1a; PROCEDURE wf_notify(p_sender IN VARCHAR2 DEFAULT SYSADMIN,p_receiver IN VARCHAR2,p_subject IN VARCHAR2,p_content_text IN VARCHAR2);PROCEDURE wf_notify(p_sender IN VARCHAR2 DEFAULT SYSADMIN,---发送…

模块和包(Python语言)

目录 一、什么是模块&#xff1f; 二、模块导入方式 2.1方法一&#xff1a; 2.2方法二&#xff1a; 2.3模块导入搜索路径&#xff1a; 2.4模块调用格式&#xff1a; 三、OS模块操作文件 四、模块的操作 4.1模块作用&#xff1a; 4.2模块分类&#xff1a; 4.3魔术变量…

EXSI技术--Exsi资源分割

我们在搭建好环境之后,就类似于有了一个服务器,现在我们就可以对着一个服务器进行一个虚拟化的操作。给不同的用户使用操作。现在,有一个名叫mit的科技企业需要租用服务器用于创建MySQL数据库集群;另外还有一个IECQ的企业需要服务器搭建电商平台。下面我们为这两个企业分割…

进程Start

Linux中的命令解释器和Windows的程序管理器explorer.exe一样地位,都是在用户态下运行的进程 共享变量发生不同进程间的指令交错&#xff0c;就可能会数据出错 进程只作为除CPU之外系统资源的分配单位 CPU的分配单位是线程 每个进程都有自己的独立用户空间 内核空间是OS内核的…

提高工作效率的一键查询和保存大量快递物流信息的技巧

在如今快速发展的电商行业中&#xff0c;物流服务的准确与便捷是保证顺利交付商品的重要环节。为了方便用户追踪物流&#xff0c;固乔快递查询助手应运而生。这款软件不仅能够快速查询快递单号的物流信息&#xff0c;还具备保存查询结果的功能&#xff0c;方便用户随时查看。 首…

光伏电站、变电站、等直流系统电参量测量仪器怎么选型

安科瑞虞佳豪 壹捌柒陆壹伍玖玖零玖叁 应用场景 工作拓扑图 功能 ①对电能参数进行采样计量和监测&#xff0c;逆变器或者能量管理系统&#xff08;EMS&#xff09;与之进行通讯&#xff0c;根据实时功率及累计电能实现防逆流、调节发电量、电池充放电等功能&#xff1b; ②…

初始化列表

文章目录 一. 初始化列表是什么&#xff1f;二. 为什么要有初始化列表&#xff1f;三. 初始化列表的特性四. explicit关键字五. statis成员六. 友元七. 内部类八. 匿名对象九. 编译器优化总结&#xff1a; 一. 初始化列表是什么&#xff1f; 初始化列表是构造函数真正初始化的地…

基于stm32的烟雾浓度检测报警proteus仿真设计(仿真+程序+讲解)

基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解&#xff09; 1.主要功能2.仿真3. 程序4. 资料清单&下载链接 基于STM32的烟雾浓度检测报警仿真设计(仿真程序讲解&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言&#xff1a;C语言 设计编号&a…

Python编程

Lesson I 解rar压缩包的密码 1 下载Python并安装 网址: 注意选对是32 bit还是64 bit Python Releases for Windows | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/windows/ 2 安装unrar pip install unrar 3 下载u…

JS中方法、函数、属性是一个东西吗

在 JavaScript 中&#xff0c;方法、函数和属性是相关但不完全相同的概念。 方法&#xff08;Method&#xff09;&#xff1a;在对象中&#xff0c;方法是对象的属性&#xff0c;但它的值是一个函数。方法可以通过对象来调用&#xff0c;并且可以访问对象的属性和其他方法。 …