Xilinx FPGA:vivado关于IIC的一些零碎知识点

一、简介

        IlC(inter-Integrated circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
        在 CPU 与被控 IC 之间、IC 与 IC  之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。

SDA:数据线 (inout)        SCL:时钟线                 

通信类别:半双工通信(主机给从机发的时候从机不能给主机发)

二、物理层链接

IIC一共有只有两个总线:一条是双向的串行数据线SDA,一条是串行时钟线SCL。
       SDA(Serial data)是数据线,D代表Data也就是数据,Send Data 也就是用来传输数据的。
       SCL(Serial clock line)是时钟线,C代表Clock 也就是时钟 也就是控制数据发送的时序的。
所有接到12C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上12C总线上的每个设备都自己一个唯一的地址,来确保不同设备之间访问的准确性。

(一)IIC的特点

1、IIC主设备功能:主要产生时钟,产生起始信号和停止信号

2、IIC从设备功能:可编程的IIC地址检测,停止位检测。

3、IIC的一个优点是它支持多主控(multimastering),其中任何一个能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。

4、支持不同速率的通讯速度,标准速度(最高速度100kHZ),快速(最高400kHZ)。

5、SCL和SDA都需要接上拉电阻(大小由速度和容性负载决定一般在3.3K-10K之间) 保证数据的稳定性,减少干扰。
6、IIC是半双工,而不是全双工,同一时间只可以单向通信

(二)IIC的高阻态

高阻态 = 1'bz = 物理层面断开 = SDA线上电压是VCC = 在数据线上被识别为1

打开sda_en,主设备给从设备传输数据;

关闭sda_en,拉高上拉电阻,让数据线处于高阻态,数据由之前的从设备发送给之前的主设备,之前的从设备作为主机。

高阻状态:高阻状态是三态门电路的一种状态。逻辑门的输出除有高、低电平两种状态外,还有第三种状态--高阻状态的门电路。电路分析时高阻态可做开路理解。

我们知道IIC的所有设备是接在一根总线上的,那么我们进行通信的时候往往只是几个设备进行通信,那么这时候其余的空闲设备可能会受到总线干扰,或者干扰到总线,怎么办呢?
       为了避免总线信号的混乱,IIC的空闲状态只能有外部上拉,而此时空闲设备被拉到了高阻态,也就是相当于断路,整个IIC总线只有开启了的设备才会正常进行通信,而不会干扰到其他设备。

(三)器件地址

IIC器件地址: 每一个IIC器件都有一个器件地址,有的器件地址在出厂时地址就设定好了,用户不可以更改,比如OV7670的地址为0x42。有的器件例如EEPROM,前四个地址已经确定为1010,后三个地址是由硬件链接确定的,所以一IIC总线最多能连8个EEPROM芯片

三、协议层

(一)总时序图

IIC总线在传输数据过程中共有三种类型信号,它们分别是开始信号、结束信号和应答信号。

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。

结束信号:SCL为高电平时,SDA 由低电平向高电平跳变,结束传送数据。

应答信号:接收数据的 I 在接收到 8bit 数据后,向发送数据的 I发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

(二)单个时序图分析

空闲状态

因为IIC的SCL和SDA都需要接上拉电阻,保证空闲状态的稳定性,所以IIC总线在空闲状态下SCL和SDA都保持高电平。

起始信号

SCL保持高电平,SDA由高电平变为低电平,延时(>4.7us),SCL变为低电平。

停止信号

SCL保持高电平,SDA由低电平变为高电平。

应答信号
        每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据。

应答信号:主机SCL拉高,读取从机SDA的电平,为低电平表示产生应答
应答信号为低电平时,规定为有效应答位(ACK,简称应答位),表示接收器已经成功地接收了该字节;
应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

注:每发送一个字节(8bit),在一个字节传输的8个时钟后的第九个时钟期间,接收器收到数据后必须回一个ACK应答信号给发送器,这样才能进行数据传输。应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期,低电平0表示应答,1表示非应答。

(三)数据传输

IIC信号在数据传输的过程中,当SCL=1高电平时,数据线SDA必须保持稳定状态,不允许电平跳变,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。

注:SCL=1时 数据线SDA的任何电平变换会看做是总线的起始信号或者停止信号。

数据传输格式

        SDA线上的数据在SCL时钟“高“期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,数据传送时,先传送最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位(即一共有9位)

        当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位ACK(此时SDA线为高阻),此时才认为一个字节真正的被传输完成,如果一段时间内没有收到从机的应答信号,则自动认为从机已正确接收到数据。

多数从设备的地址为7位或10位,一般用7位。
八位设备地址=7位从机地址+读/写标志位

0表示主设备向从设备写数据

1表示主设备向从设备读数据

注:在起始信号后必须传送一个从机的地址(7位),1-7位为7位接收器件地址,第8位为读写位,“0”表示主机发送数据,“1”表示主机接收数据,第9位为ACK应答位,紧接着的为第一个数据字节,然后是一位应答位,后面继续第二个数据字节。

写:

读:

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

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

相关文章

如何安全隐藏IP地址,防止网络攻击?

当您想在互联网上保持隐私或匿名时,您应该做的第一件事就是隐藏您的 IP 地址。您的 IP 地址很容易被追踪到您,并被用来了解您的位置。下面的文章将教您如何隐藏自己,不让任何试图跟踪您的活动的人发现。 什么是 IP 地址? 首先&am…

cv2.GaussianBlur()--sigmaX

目录 1 函数原型 2 原理 2.1 一维高斯分布 2 .2 二维高斯分布 3 总结 1 函数原型 def GaussianBlur(src, ksize, sigmaX, dstNone, sigmaYNone, borderTypeNone): # real signature unknown; restored from __doc__"""GaussianBlur(src, ksize, sigmaX[, …

C++·栈和队列

栈和队列是什么看这里: 数据结构栈和队列-CSDN博客文章浏览阅读948次,点赞25次,收藏26次。本节讲解了栈和队列的内容,其核心就是栈的特点是后进先出,队列的特点是先进先出。并用C语言实现了栈和队列的结构以及它们的各…

Mock.js 的使用方法代码示例

mock.js 的安装 npm install -D vite-plugin-mock mock.jsvite.config.ts配置: import { viteMockServe } from vite-plugin-mock import { userConfigExport, ConfigEnv } from viteexport default defineConfig(({ command }) > {return {plugins: [viteMock…

HTML5 学习笔记总结

1.1 什么是网页 1.2 什么是 HTML 1.3 网页总结 2.常用浏览器 3.Web 标准 3.1 为什么需要Web 标准 3.2 Web 标准(重点)

MyBatis的简介与使用

Mybatis JDBC操作数据库的缺点 存在大量的冗余代码。手工创建 Connection、Statement 等,效率低下。手工将结果集封装成实体对象。查询效率低,没有对数据访问进行优化。 Mybatis框架 简介 MyBatis 本是 apache 的一个开源项目 iBatis, 2010年这个项目由…

什么是静态住宅代理?一文看懂它

静态住宅代理(也称为 ISP 代理)是最流行的代理类型之一。它们也是隐藏身份和在线匿名的最佳方式之一。但是您需要了解它们什么?是什么让它们如此特别?为什么您要使用住宅代理而不是仅仅使用常规代理服务?如果你感兴趣&…

品牌推广必备:软文案例撰写与文案策划全解析!

做品牌推广, 不仅需要有推广渠道,文案的策划也是必不可少的一部分。文案是属于灵魂的部分。 作为一名手工酸奶品牌的创始人,目前全国也复制了100多家门店,这篇文章,详细和大家拆解,文案创作的要点&#xf…

OS-HACKNOS-2.1

确定靶机IP地址 扫描靶机开放端口信息 目录扫描 访问后发现个邮箱地址 尝试爆破二级目录 确定为wordpress站 利用wpscan进行漏洞扫描 #扫描所有插件 wpscan --url http://192.168.0.2/tsweb -e ap 发现存在漏洞插件 cat /usr/share/exploitdb/exploits/php/webapps/46537.txt…

STM32对数码管显示的控制

1、在项目开发过程中会遇到STM32控制的数码管显示应用,这里以四位共阴极数码管显示控制为例讲解;这里采用的控制芯片为STM32F103RCT6。 2、首先要确定数码管的段选的8个引脚连接的单片机的引脚是哪8个,然后确认位选的4个引脚连接的单片机的4…

【数据结构】栈的实现(含详细代码)

文章目录 1.栈1.1 栈的概念及结构1.2 栈的实现1.3 代码实现 1.栈 1.1 栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守先进后…

[行业原型]线上药房系统高保真原型分享

​我国网上药店起步很早。 2005年12月份京卫大药店便率先拿到《互联网药品交易服务资格证书》,成为国内首家网上药店。随着互联网药品零售行业发展,2013年至2017年,网上药店市场规模从12亿元增至61亿元。 各家互联网药品零售企业在药品质量把…

pandas数据分析(8)

描述性统计量和数据聚合 描述性统计量 描述性统计量通过量化数据来概括数据集。DataFrame和Series可以通过sum、mean、count等方法来获取各种描述性统计量。在默认情况下会按照axis0返回一个Series,也就是说会得到一个有关列的统计量: 如果要计算行的统…

ubuntu 分区情况

ubuntu系统安装与分区指南 - Philbert - 博客园 (cnblogs.com)https://www.cnblogs.com/liangxuran/p/14872811.html 详解安装Ubuntu Linux系统时硬盘分区最合理的方法-腾讯云开发者社区-腾讯云 (tencent.com)https://cloud.tencent.com/developer/article/1711884

C# modbus验证

窗体 还有添加的serialPort控件串口通信 设置程序配置 namespace CRC {public static class CRC16{/// <summary>/// CRC校验&#xff0c;参数data为byte数组/// </summary>/// <param name"data">校验数据&#xff0c;字节数组</param>///…

新增多种图表类型,新增插件管理模块,DataEase开源数据可视化分析工具v2.8.0发布

2024年7月8日&#xff0c;人人可用的开源数据可视化分析工具DataEase正式发布v2.8.0版本。 这一版本的功能变动包括&#xff1a;图表方面&#xff0c;新增组合图、热力地图、符号地图、K线图等图表类型&#xff0c;并对已有的仪表盘、明细表、指标卡、富文本等图表类型进行了功…

「API取数」FDL获取金蝶云星空的单据数据

很多企业的ERP系统都在用金蝶云星空&#xff0c;金蝶云星空API是IT人员获取数据的重要来源&#xff0c; 常常用来生成定制化报表&#xff0c;进行数据分析&#xff0c;或是将金蝶云的数据与OA系统、BI工具集成。 通常情况下&#xff0c;IT人员需要使用Python、Java等语言编写脚…

栈 栈是一种数据结构&#xff0c;只允许在固定一端进行插入和删除功能&#xff0c;进行插入和删除的一端叫做栈顶&#xff0c;另一端叫做栈底&#xff0c;遵循后入先出的规则&#xff0c;就像穿烤串和吃烤串一样 其中&#xff0c;插入数据叫做进栈/压栈/入栈&#xff0c;数据插…

windows obdc配置

进入控制面板&#xff1a; 进入管理工具&#xff1a;

Java面经知识点汇总版

Java面经知识点汇总版 算法 14. 最长公共前缀&#xff08;写出来即可&#xff09; Java 计算机基础 数据库 基础 SQL SELECT first_name, last_name, salary FROM employees WHERE department Sales AND salary > (SELECT AVG(salary)FROM employeesWHERE department Sal…