3_7_I2C 协议介绍|学习笔记

简介: 快速学习3_7_I2C 协议介绍。

开发者学堂课程【HaaS 物联网应用开发课程:3_7_I2C 协议介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/801/detail/13833


3_7_I2C 协议介绍

 

内容介绍

一、I2C 是什么

二、I2C 特点

三、I2C 协议

 

一、I2C 是什么

本节课程的主题是 I2C 总线接口介绍,首先会介绍一下 I2C 是什么?主要应用程序有哪些?接下来会介绍 I2C 的特点,最后对 I2C 的协议进行介绍。

I2C 正确的读法是i 方 c,它的英文全称是 inter-integrated circuit 是一种串行通信总线,它使用的是多种层结构,由飞利浦公司在80年代为了让 CPU 能够连接更多低速的外设而设计的。

目前 I2C 已经到了6.0的版本,大家可以通过这个地址来下载来看看, I2C 的应用场景也有很多,最常见的如下,第一,保存用户设置常用的 NVRAM 芯片;第二,DAC 和 ADC 实现数字模拟信号之间的相互转换;第三,小型的液晶屏或者是 OLED 屏,这种屏的分辨率不能太高;第四,各种监控设备,比如说手机上的电池监控模块、键盘监控、CPU温度以及风扇转速监控等等。第五,实时时钟芯片;第六,GPIO 的扩展芯片,当 CPU 的 GPO 口不够用的时候,可以通过 I2C 接口的 gpo 扩展芯片来扩展更多的 gpo 来使用;第七,也就是最常见的像各种传感器,比如说温湿度传感器、光感传感器、加速度、陀螺仪以及接近传感器等等。

 

二、I2C 特点

 图片41.png

接下来看一下 I2C 的特点,对照这张图来看 I2C是由 SDA 和 SDL 两条双向漏极电路组成,它需要在外界电阻的情况下才能正常工作, I2C 是基于地址的,每一个 I2C 的从设备都有唯一的一个地址来对进行标识。

它的地址模式有两种,最早期的 I2C 设备地址只有 7-bit 的地址模式,后来扩展到了 10-bit 的模式。I2C 是多主从结构的,一个 I2C 上可以挂在多个主设备,同一时刻,要么主设备向从设备发送数据,要么从设备向主设备发送数据,数据传输不能同时双向进行。I2C 支持多种速度模式,10kg 以下是低速模式,标准速度是100  kbps,快速模式是400kbps,快速Plus模式是一兆 pps ,高速模式是3.4Mpps,现在还有超高速模式可以达到5MPS。

影响 I2C 速度的主要因素是信号从0~1的一个稳定时间,都知道数字信号只有零和一,但是在信号发生零和一切换的时候,它并不是一个直角切上去的,它是有一个转换时间的,这个转换时间跟外接的电容有很大的关系,转换时间越短,I2C  的速度就可以越快,下面这张表就是I2C 在标准模式、快速模式以及快速 Plus 模式下边,对信号稳定时间及外接电容大小的要求。

图片40.png


三、I2C 协议

图片39.png

接下来看一下I2C 的协议,首先来看一下I2C 的几个重要的概念,transmitter 是发送方,任意时刻正在向I2C 总线发送数据的一方就是 transmitter,Receiver 和 transmitter 是对应的,任意时刻接收来自总线数据的一方就是 receiver, Masters 是主设备,发起或者停起 I2C  通信过程的一方就是 Masters,Slave 是从设备,被主设备寻址的设备就是从设备,因为前面我们提到了 I2C  是支持多个主设备的,每个主设备都可以发起数据传输的过程,因此也就一定会出现说两台主设备同时发起的数据传输,这种情况下就需要对 I2C 总线进行仲裁,以决定哪台设备可以占用总线,Arbitration 就是仲裁协议,Synchronization 同步脉冲基准是由主设备发给从设备的,在从设备端需要对信号基准进行同步,才能确保后续传输数据的正确性。任何一次的I2C 传输都是一个起始标志开始和一个停止标志结束的,在总线处于空闲状态的情况下,就是 SDA 跟 SCL 都是高电平的情况下,然后 SDA 发生一个从高电平向低电平的切换,就代表一次 I2C 的数据传输的开始,在 SCL 处于高电平的情况下, SDA 从低电平向高电平的一个跳变,这就代表 I2C 数据传输的结束。

图片38.png

I2C 的数据传输格式先来看一下右上角这个图, I2C 传输采用的是巴比特的传输模式,采用最高位在前,最低位在后。

数据传输周期内除了巴比特的数据之外,还有一个是ACK 或者是 NACK ,这个是由接收方发送的。当接受方正常收取并处理数据的时候,回复一个 ACK,接受方不能处理数据的时候就什么也不回复,代表 NACK 。

 图片37.png

再来看一下这张图,再来看一下下面这张图,I2C 的数据切换应该发生在 SQL 处于低电平的时候,处于高电平的时候数据应该保持不变,那接收方就是在scl处于高电平的期间对 SDA 进行采样的,一次I2C 传输的过程当中可以传输多个字节,比如这张图上边这是一个起始标志,然后中间12345678,再加上后面的 ACK 是一个数据的完整的传输过程。

接下来它可以不停止,然后直接传送下一个数据12345678,接下来再是一个接收方发送的 ACK ,然后后面可以停止,也可以继续发送数据,在一次 I2C 数据传输结束之后,主设备端可以发送 stop 的信号,也可以发送一个 repeat start 的一个信号,如果一次 I2C 传输入结束之后,主设备端发起的是 repeated start,那么 repeated start 之后数据传输可以立马,开始从而省掉一个 stop 的传输周期。前面有提到 ACK 或者是 NACK 如果接受方回复 ACK 给发送方,则代表数据传输正常结束,如果接收方再回复 NACK 给发送方,那么代表数据传输没有正常完成,可能会有这么几种情况,

第一主设备要寻址的  I2C  的从设备没有找到,但是从设备没有挂载在总线上,那么就没有人回复 ACK 给主设备,这个时候就是一个 NACK 的信号;

第二种情况是接收方正在处理其他的实时操作,还没有准备好和发送方进行数据通信;

这三种情况是接收方收到了自己不认识的数据,他也不会回复 ACK 给对方;

这四种情况是接收方没办法接收更多数据的时候,他也不会回复。在发生 NACK 之后,主设备可以结束发送,也可以不结束,直接重新开始发送。

 图片36.png

接下来以一张图来给大家讲一下I2C 操作的一个完整过程,当主设备需要给从设备发送数据的时候,便会发起写操作。

首先是主设备发起一个 star 标志,代表整个传输过程的开始,接下来的七比特是从设备的地址信息,第八比特写入零代表是 I2C 写操作,当从设备收到地址信息之后,会和自己的地址进行匹配,如果和自己的地址一样,那么它就会发出 ACK 信号,回复主设备告诉说这个从设备现在是在总线上的,那么接下来主设备就会继续发送数据一和数据二,那整个格式是这样的,最高位在前第七、第六、第五,然后最低位在后,第零。然后从设备收到这个数据之后,回复一个 ACK ,然后接下来传输第二个字节第七、第六、第五、第零,同样是以这样的顺序,然后从设备收到之后会回复一个 ACK ,然后接下来因为主设备只需要发送两个袋子,所以它会以 stop 标志结束这次 I2C 的数据传输过程。

这张图是一个I2C读操作的完整过程,同样是有主设备发起起始信号到总线,start 标志是有主设备发起,然后发送设备的地址到总线上,然后有一个读写标志填入一,代表是读操作。从设备收到以后和自己地址进行匹配,匹配成功发送 ACK 信息给主设备,接下来从设备会依次发送自己要发送的数据给主设备,同样是以高位在前,低位在后的方式。从设备发送完一个字节的数据之后,主设备收到回复一个 ACK ,然后从设备继续发送后面的第二个字节,主设备收到之后回复 ACK 之后结束整个传输数据过程,这个过程是以 stop 为结束标志。

最后来看一下I2C 的两种地址模式之间的差别,前面提到 I2C 有7比特模式和10比特模式两种,其中七比特模式可以代表128个地址,但是因为有八个地址是预留的,所以实际有效地址只有120个,右边这张图就是预留的这些地址以及它的一个说明。

然后十比特模式的有效地址是1024个,十比特模式和七比特模式在寻址过程当中的差异是什么样的?

 图片35.png

来看一下下面这张图,第一行这个是七比特模式,主设备发起 stop 信号之后,直接发起七个比特的设备地址到总线上,然后发送读信号,然后从设备回复一个 ACK ,接下来从设备就要对应的数据送到总线上,主设备回复 ACK ,然后主设备结束此次 I2C 传输的过程,那十比特模式下边,主设备发起 stop 信号之后,它还会发起一个十比特的一个地址标识,它先是11110,这是一个十比特的地址标识,然后后面发送十比特地址的高两个 bit ,A9和 A8,然后发写一个一进去代表是读操作,然后这个时候从设备会回复一个 ACK ,然后在第二个字节里面,它会把地址剩下的八个比特A7~A0传输到总线上,那这个时候如果有一个从设备匹配到的这个十比特的地址,它就继续继续回复 ACK ,然后接下来就是从设备把数据送到 I2C 总线上,主设备回复 ACK 之后结束本次数据传输的过程,那这个11110这个地址对照一下上面的七比特模式下面的预留的八个地址,其实它就是这个十比特 slave addressing 意思就是说它是为十比特预留的这个地址,这样在本节中就介绍了I2C 数据传输的起始、结束以及传输数据的过程、读写操作的过程以及七比特和十比特模式的差别,这样整个I2C 的协议部分就介绍完了。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
计算机视觉
直方图均衡化
直方图均衡化是一种图像处理技术,通过改变图像灰度级分布,增强图像对比度。手动实现包括计算灰度直方图、像素总数、灰度分布频率、累积分布频率,然后归一化映射到新灰度级,最终得到增强对比度的图像。该方法适用于改善灰度集中或明暗对比不明显的图像,但全局处理可能导致背景干扰增强,丢失细节,且某些图像可能过度增强。局部直方图均衡化可作为改进方案。
970 1
|
5月前
|
机器学习/深度学习 数据可视化 安全
图片篡改识别-图片篡改检测-图像篡改识别-图片PS检测API接口介绍
本图像伪造检测API基于深度神经网络与跨模态分析技术,可精准识别图像篡改、输出伪造区域坐标及热力图可视化结果,广泛应用于政务司法核验、新闻鉴伪、电商合规与社交平台UGC审核等场景。
802 3
|
5月前
|
人工智能 自然语言处理 机器人
OpenClaw“养龙虾”其实很简单,一键部署,两步拥有龙虾AI助理!
2026年爆火的开源AI智能体OpenClaw(昵称“龙虾”),主打本地化、强执行、零代码——能听懂自然语言,自动整理文件、收发邮件、浏览网页、处理表格。阿里云推出一键部署方案,两步开通即用,新手5分钟拥有专属AI助理!
1789 4
|
5月前
|
人工智能 文字识别 内存技术
一文看懂什么是Token?阿里云怎么领免费Tokens、怎么用、能省多少钱?
阿里云百炼新用户开通即赠超7000万免费Tokens(每模型各100万,含输入/输出),开通百炼:https://t.aliyun.com/U/fPVHqY 有效期90天;支持Qwen-Max/Plus/Turbo等全系模型。另有万亿Tokens企业扶持、4.5折节省计划及Coding Plan订阅优惠。
1412 0
|
算法 数据处理 定位技术
基于TDOA算法的三维定位
基于TDOA算法的三维定位
1287 0
|
网络协议 数据安全/隐私保护 网络架构
OSI七层模型和TCPIP五层模型
OSI七层模型和TCPIP五层模型
|
SQL Oracle 关系型数据库
解决大小写、保留字与特殊字符问题!Oracle双引号在SQL中的特殊应用
在Oracle数据库开发中,双引号的使用是一个重要但易被忽视的细节。本文全面解析了双引号在SQL中的特殊应用场景,包括解决标识符与保留字冲突、强制保留大小写、支持特殊字符和数字开头标识符等。同时提供了最佳实践建议,帮助开发者规避常见错误,提高代码可维护性和效率。
795 6
|
存储 人工智能 编译器
【AI系统】算子手工优化
本文深入探讨了手写算子调度的关键因素及高性能算子库的介绍,通过计算分析指标和 RoofLine 模型评估计算与访存瓶颈,提出了循环、指令、存储三大优化策略,并介绍了 TVM 和 Triton 两种 DSL 开发算子的方法及其在实际应用中的表现。
1618 2
【AI系统】算子手工优化
|
机器学习/深度学习 并行计算 算法
Transformer 一起动手编码学原理
学习Transformer,快来跟着作者动手写一个。
94717 9
|
存储 监控 安全
Linux日志管理工具:Logrotate(一)
Linux日志管理工具:Logrotate(一)
1869 0

热门文章

最新文章