stm32之IIC协议

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

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.mzph.cn/news/64077.shtml

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

相关文章

双网卡/内外网同时使用2023.09.01

1.双网卡 电脑需要两个网卡:两个网口或者是一个有线网卡加一个无线网卡。 查看网关:如下网口接入网线后,电脑连接WIFI,电脑会显示存在两个网卡正在使用(电脑存在两个IP地址) 查看本地的路由设置 route p…

服务器数据恢复- RAID5出现故障后恢复数据和操作系统的案例

服务器数据恢复环境: 某品牌服务器中有4块SAS硬盘组建了一组RAID5阵列,另外1块磁盘作为热备盘使用。上层操作系统为redhat linux,部署了一个数据库是oracle的OA。 服务器故障&初检: RAID5中一块磁盘离线后热备盘未自动激活re…

设计模式-适配器

文章目录 一、简介二、适配器模式基础1. 适配器模式定义与分类2. 适配器模式的作用与优势3.UML图 三、适配器模式实现方式1. 类适配器模式2. 对象适配器模式3.类适配器模式和对象适配器模式对比 四、适配器模式应用场景1. 继承与接口的适配2. 跨平台适配 五、适配器模式与其他设…

大数据课程K16——Spark的梯度下降法

文章作者邮箱:yugongshiyesina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的梯度下降法; ⚪ 了解Spark的梯度下降法家族(BGD,SGD,MBGD); ⚪ 掌握Spark的MLlib实现…

Vue生命周期(详细)

生命周期 图: 可以理解vue生命周期就是指vue实例从创建到销毁的过程,在vue中分为8个阶段:创建前/后,载入前/后,更新前/后,销毁前/后。 一、创建(实例) 1、beforeCreate&#xff1a…

C语言每日一练-------Day(9)

本专栏为c语言练习专栏,适合刚刚学完c语言的初学者。本专栏每天会不定时更新,通过每天练习,进一步对c语言的重难点知识进行更深入的学习。 今日练习题关键字:字符个数统计 多数元素 投票法 💓博主csdn个人主页&#xf…

基于Stable Diffusion的AIGC服饰穿搭实践

本文主要介绍了基于Stable Diffusion技术的虚拟穿搭试衣的研究探索工作。文章展示了使用LoRA、ControlNet、Inpainting、SAM等工具的方法和处理流程,并陈述了部分目前的实践结果。通过阅读这篇文章,读者可以了解到如何运用Stable Diffusion进行实际操作&…

图:有向无环图(DAG)

1.有向无环图的定义 有向无环图:若一个有向图中不存在环,则称为有向无环图。 简称DAG图(Directed Acyclic Graph) 顶点中不可能出现重复的操作数。 2.有向无环图的应用 1.描述算数表达式 用有向无环图描述算术表达式。 解题步骤: 把各个操作数不重…

【前端入门案例1】HTML + CSS

案例一 <!DOCTYPE html> <html lang"en-US"><head><meta charset"utf-8"><meta name"viewport" content"widthdevice-width"><title>My test page</title> </head><body><…

word6 图文混排

目录 7-1 段落缩进排版7-2 搞定多级列表难题 7-1 段落缩进排版 段落对齐 缩进问题 悬挂缩进&#xff1a;缩进首行以外的段落 段落对齐&#xff1a; 7-2 搞定多级列表难题

【Python从入门到进阶】34、selenium基本概念及安装流程

接上篇《33、使用bs4获取星巴克产品信息》 上一篇我们介绍了如何使用bs4来解析星巴克网站&#xff0c;获取其产品信息。本篇我们来了解selenium技术的基础。 一、什么是selenium&#xff1f; Selenium是一种用于自动化Web浏览器操作的开源工具。它提供了一组API&#xff08;应…

Spring Cloud Foundry上使用通配符模式匹配进行的安全绕过漏洞 CVE-2023-20873

文章目录 0.前言1.参考文档2.基础介绍描述如果满足以下任一条件&#xff0c;应用程序就不会有太大风险&#xff1a;受影响的Spring产品和版本 3.解决方案3.1. 升级版本3.2. 替代方案 0.前言 背景&#xff1a;公司项目扫描到 Spring Cloud Foundry上使用通配符模式匹配进行的安全…

Qt应用开发(基础篇)——进度对话框 QProgressDialog

一、前言 QProgressDialog类继承于QDialog&#xff0c;是Qt设计用来反馈进度的对话框。 对话框QDialog QProgressDialog提供了一个进度条&#xff0c;表示当前程序的某操作的执行进度&#xff0c;让用户知道操作依旧在激活状态&#xff0c;配合按钮&#xff0c;用户就可以随时终…

15.CSS发光按钮的悬停特效

效果 源码 <!DOCTYPE html> <html> <head><title>CSS Modern Button</title><link rel="stylesheet" type="text/css" href="style.css"> </head> <body><a href="#" style=&quo…

Revit SDK:AutoParameter 添加参数

前言 这个例子介绍如果往族文件里添加参数。 内容 Revit 的参数&#xff0c;参考官方文档&#xff1a; 这个例子的关键接口&#xff1a; // 通过 FamilyManager 添加参数 FamilyParameter AddParameter(string parameterName, BuiltInParameterGroup parameterGroup, Categ…

C++ 学习之 构造函数 和 析构函数

前言 总的来说&#xff0c;构造函数负责对象的初始化&#xff0c;而析构函数负责对象的清理和资源释放。它们是C面向对象编程中非常重要的概念&#xff0c;用于管理对象的生命周期&#xff0c;确保对象在创建和销毁时都能够正确地进行初始化和清理。 正文 看代码 class perso…

【Java 基础篇】Java 方法使用详解:让你轻松掌握方法的奥秘

如果你正在学习Java编程&#xff0c;方法是一个不可或缺的重要概念。方法允许你将代码组织成可重用的块&#xff0c;提高了代码的可维护性和可读性。在本篇博客中&#xff0c;我们将深入探讨Java方法的使用&#xff0c;从基础概念开始&#xff0c;逐步介绍如何定义、调用、传递…

深度图相关评测网站

文章目录 1 单目/Stereo相关测评网站介绍12 单目/Stereo相关测评网站介绍23 单目/Stereo相关测评网站介绍3 1 单目/Stereo相关测评网站介绍1 https://vision.middlebury.edu/stereo/eval3/ 2 单目/Stereo相关测评网站介绍2 http://www.cvlibs.net/datasets/kitti/eval_stereo…

[dasctf]misc1

不确定何种加密方式 P7NhnTtPUm/L3rmkP/eAhx5Vnbc2YyatkXCePJ0Wh2NYfqXGZCpZdCesMmEAihhUYI1PjoLq6FedZ7MSclA9h0/Dy4CavBwVg5RHr8XJmfbtuWkxK2Gn3sNTEzQi0p 1t_15_s3cR3t_k3y 也许是密钥

自动化测试(四):pytest结合allure生成测试报告

Allure 报告框架的名称 allure&#xff1a; noun [ U ] 诱惑;魅力;吸引力 文章目录 1. allure下载2. pytest框架使用allure3. 生成allure报告 1. allure下载 下载前需要先安装JDK&#xff0c;这里可以参考自动化测试(二)。 Allure下载路径&#xff1a;https://github.com/allu…