简单介绍IIC通信协议

文章目录

  • 一,简单介绍
  • 二,IIC物理层
  • 三,IIC通信时序
    • 1.起始位与停止位
    • 2.IIC读写地址位信号
    • 3.IIC应答信号
    • 4.IIC数据位收发信号
  • 四,总线速率
  • 五,主机发送数据流程
  • 六,主机接收数据流程
  • 七,IIC的时钟延展(clock strectching)

一,简单介绍

​ IIC Bus是飞利浦公司推出的,在电子控制领域的通信协议典型的电压准位是3.3v和5v。**IIC 是串行,同步的半双工协议。**IIC的电路简单,连接线少,控制简单,通信速率高。

二,IIC物理层

  • IIC总线是一种主从结构(master/slave)的总线协议,一条总线上的每一个设备都可以作为主设备或从设备使用,但是一般一条总线上只有一个主设备,主设备通常是CPU,从设备通常是各种传感器,一般来讲,从设备只能被动的接收主设备的通信请求,也就是说,通信的开始往往是主设备主机发起的
  • IIC具有SCL时钟线和SDA数据线两条线来传输数据。
  • IIC寻址:每一个从设备都有自己一个独一无二的7bit地址(其实还有一位读写位组成一字节八位)物理识别,这个地址固化在芯片内部,从datasheet上就可以找到对应的IIC地址。全0是IIC的广播地址。除此之外,IIC还有一种10bit地址的寻址方式。
  • 具有三种传输模式,标准模式传输速率100kbit/s,快速模式400kbit/s,高速模式3.4Mbit/s,但是大部分的IIC设备目前不支持高速模式。
  • 连接到相同总线的IIC设备的数量收到总线最大电容400pF的限制。

IIC寻址:

# 7bit寻址:每一个从设备都有自己一个独一无二的7bit地址(其实还有一位读写位组成一字节八位)物理识别,这个地址固化在芯片内部,从datasheet上就可以找到对应的IIC地址。全0是IIC的广播地址。除此之外,IIC还有一种10bit地址的寻址方式。
# 10bit寻址:10bit寻址是和7bit寻址相兼容的这样就可以在一条线上兼容使用了,10bit地址传输时,总共占两个字节,前5bit用来选择寻址模式,剩下三位中,两位是地址高位ADDRESS9,和ADDRESS8,最后一位依旧是读写位置,剩下的第二个字节就是剩下的地址,即ADDRESS7~ADDRESS0。

三,IIC通信时序

1.起始位与停止位

​ 首先,一般情况下,IIC的SDA和SCL线是被上拉电阻拉高的,也就是说,默认情况下的SDA线和SCL线是高电平的。

  • 起始位s位:SCL时钟线保持高电平,SDA出现一个下降沿。
  • 停止位p位:SCL时钟线保持高电平,SDA出现一个上升沿。

在这里插入图片描述

2.IIC读写地址位信号

​ 在发出start起始位信号后,第二个时序应该立刻给出从机的目标物理地址(7bit或10bit地址),而站在主设备的角度来讲有读/写从设备两个功能。

  • 8bit时,高7位表示从机的地址,最低的一位表示读写方向。
  • 0为写操作,1为读操作。

3.IIC应答信号

​ 应答信号分为两种,一种是希望继续进行通信的ACK信号,一种是NACK的结束信号。主机在发送start信号和地址,读写信号后,主机将释放对SDA的限制权,SDA电平被上拉电阻拉高,由接收方(从机)控制。

  • ACK应答信号:希望继续通信,SCL低电平时,从机将把SDA改为低电平
  • NACK应答信号:不希望继续通信,SCL低电平时,从机将把SDA保持高电平

4.IIC数据位收发信号

​ IIC的数据收发时,每个字节必须是8个字节。同时是采用MSB字节序收发的。**高电平是1,低电平是0。**SCL高电平期间,SDA必须保持稳定,高低电平的跳变,必须在SCL低电平期间进行跳变,(因为SCL高电平期间,SDA的变化代表的是信号的起始位和终止位)。数据收发时,每个字节收发结束后必须跟一个ACKX信号或者NACK信号。

在这里插入图片描述

所以读取数据位时,应该在SCL为高电平时进行读取,因为这时候SDA线上的电平是保持稳定的。

四,总线速率

I2C 总线是一种同步、半双工、采用电平信号收发的串行总线,其速率支持:

  • 标准模式(Standard-mode):速率高达 100kbit/s。
  • 快速模式(Fast-mode):速率高达 400kbit/s。
  • 快速模式+(Fast-mode Plus):速率高达 1Mbit/s。
  • 高速模式(High-speed mode):速率高达 3.4Mbit/s
  • 超快速模式(Ultra Fast-mode):速率高达 5Mbit/s (单向传输时支持)

五,主机发送数据流程

  1. 主机检测到总线是空闲的,发送s信号(即起始位)。开始通信。(r/w=0)
  2. 紧接着主机发送目标从机的地址以及读写位。
  3. 对应的从机返回ACK信号。(SDA低电平0)
  4. 主机发送8bit一字节的数据。
  5. 从机接收数据后返还ACK应答信号。
  6. 主机收到ACK数据后继续发送下一个数据字节。
  7. 主机发送完最后一个字节并收到ACK信号后,发送P停止位信号,结束本次通信并且释放总线。
  8. 从机收到P信号后退出通信。

在这里插入图片描述

六,主机接收数据流程

  1. 主机发送s信号(即起始位)。开始通信。(r/w=1)
  2. 紧接着发送要从哪一个从机接收地址,和读写位。
  3. 从机返回应答信号后向主机发送数据。
  4. 主机收到数据后向从机发送ACK信号。
  5. 从机接收到应答信号后继续发送数据。反复循环。
  6. 当主机发现接收数据后,向从机发送NACK信号,从机收到非应答信号后停止发送。
  7. 主机发送非应答信号后,发送P停止信号,主机和从机停止通信。

在这里插入图片描述

七,IIC的时钟延展(clock strectching)

​ 首先,什么是时钟延展呢?一般情况下来说,IIC的时钟是由主机cpu提供的,但是有的时候从设备的速率跟不上主设备的速率。例如,一个从机温湿度传感器的速率比较慢,没采集到温度的时候怎么办呢?总不能发空数据回去给主机吧,这个时候支持时钟延展的设备会“等待”,即从机主动拉低时钟信号,等采样结束后,从机再给主机一个ACK信号告诉主机可以继续通信。

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

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

相关文章

力扣每日一题-去掉最低工资和最高工资后的工资平均值-2024.5.3

力扣题目:去掉最低工资和最高工资后的工资平均值 开篇 题目链接: 1491.去掉最低工资和最高工资后的工资平均值 题目描述 代码思路 太简单了。先利用sort排序对数组进行从小到大排序,然后计算时数组最小值和最大值不要加进去即可。 代码纯享版 clas…

《HCIP-openEuler实验指导手册》2.1安装和测试Nginx

知识点 Nginx (发音为 “engine x”) 是一个开源的高性能 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。由 Igor Sysoev 创建并维护,其设计用于处理高并发连接,具有高度的可扩展性和灵活性。 安装步骤 yum方式安装 dn…

交通 | TRC综述:充电站选址-求解与探讨

论文作者:Mouna Kchaou-Boujelben 论文原文:Kchaou-Boujelben, M. (2021). Charging station location problem: A comprehensive review on models and solution approaches. Transportation Research Part C: Emerging Technologies, 132, 103376. 推…

分享几个副业,一天搞100~200不成问题,一不小心收益比你主业还多

每次家庭聚会,总是那些老掉牙的话题在耳边萦绕:“孩子,你工资多少啊?买车买房了吗?”仿佛只有按部就班地上班、结婚生子,才是人生的唯一出路。 然而,在这个充满机遇的时代,谁说“不上…

在Ubuntu 24.04 LTS (Noble Numbat)上安装nfs server以及nfs client

在Ubuntu 24.04 LTS (Noble Numbat)上,我使用的是最小化安装, 当然server版本的Ubuntu在安装的时候可能会有网络不通的问题,解决办法见如下文章: ubuntu 24.04 server 仅NAT模式上网设置静态IP设置-CSDN博客文章浏览阅读489次,点赞9次,收藏3次。在Ubuntu 24.04 上设置网…

字节上岸成功,整理一波测试开发岗的基础知识,含答案

本科非科班,去年秋招找非技术岗工作失败(无法通过群面)。谁又能想到今年春招形势严峻比去年秋招还严峻…. 太难了!!!! 2月末开始投简历,3月份开始面了tplink、字节、美团、广立微电…

本地搭建hydra服务用以验证oidc流程

目录 1、docker搭建hydra,环境配置: 2、搭建完成后服务调用: 2.1保证服务正常启动: 2.2 通过postman调用,获取client_id: 2.3 通过client_id,实现oauth2/auth调用 3. 通过go语言实现oidc验…

【算法系列】哈希表

目录 哈希表总结 leetcode题目 一、两数之和 二、判定是否互为字符重排 三、存在重复元素 四、存在重复元素 II 五、字母异位词分组 六、在长度2N的数组中找出重复N次的元素 七、两个数组的交集 八、两个数组的交集 II 九、两句话中的不常见单词 哈希表总结 1.存储数…

自动化运维工具---Ansible

一 Puppet Puppet是历史悠久的运维工具之一。它是一种基础架构即代码(laC)工具,使用户可以定义其基础 架构所需的状态,并使系统自动化以实现相同状态。 Puppet可监视用户的所有系统,并防止任何偏离已定义状态的情况。从简单的工作流程自动…

Jmeter性能测试(三)

token鉴权处理 1、添加json提取器 2、写jsonpath表达式在响应Body中提取鉴权token token:变量名,可以直接引用 $…token:token数据在响应中的字段名称,根据自己情况写就行 3、将提取出来的token添加到请求头中 重点&#xff…

0506_IO1

思维导图: 练习: 有如下结构体 struct Student{ char name[16]; int age; double math_score; double chinese_score; double english_score; double physics_score; double chemistry_score; double bio_score; }; 申请该结构体数组,容量为…

5-在Linux上部署各类软件

1. MySQL 数据库安装部署 1.1 MySQL 5.7 版本在 CentOS 系统安装 注意:安装操作需要 root 权限 MySQL 的安装我们可以通过前面学习的 yum 命令进行。 1.1.1 安装 配置 yum 仓库 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装Mysql…