I2C总线介绍
1. 简介
I2C, Inter-Integrated Circuit, 是一种串行通信总线,用于连接微控制器及其外围设备
它是一种两线式串行总线(串行数据:SDA; 串行时钟频率:SCL), 利用电阻将电位上拉, 典型的电压准位为+3.3V或+5V
使用多主从架构, 主机是初始化总线的数据传输并产生允许传输的时钟信号的器件, 任何被寻址的器件都被认为是从机
每个器件都有一个唯一的地址识别(共7个bit, 包括主机和从机), 而且都可以作为一个发送器或接收器(由器件的功能决定)
常见的应用如下:
- 存储器类, NVRAM、EEPROM
- 数字逻辑转换器, DAC
- 逻辑数字转换器, ADC
- 控制音量大小
- 温度传感器
- 实时时钟芯片, Real-time clock
2. 术语
发送器: 发送数据到总线的器件
接收器: 从总线接收数据的器件
主机: 启动数据传送并产生时钟信号的设备
从机: 被主机寻址的器件
多主机: 同时有多于一个主机尝试控制总线但不破坏传输
仲裁: 是一个在有多个主机同时尝试控制总线但只允许其中一个控制总线并使传输不被破坏的过程
同步: 两个或多个器件同步时钟信号的过程
3. 信号
I2C总线在传送数据过程中共有三种类型信号: 开始信号、结束信号和应答信号
开始信号: SCL为高电平时, SDA由高电平向低电平跳变, 开始传送数据
结束信号: SCL为高电平时, SDA由低电平向高电平跳变, 结束传送数据
应答信号: 接收器在接收到8bit数据后, 向发送器发出特定的低电平脉冲, 表示已收到数据
4. 传输
在没有数据传输的时候, I2C总线处于空闲状态,此时SDA和SCL两条信号线同时处于高电平
当有数据进行传输时, 主机发出启动信号, 进行数据传输过程, 完成后主机发出结束信号, 表示数据传输完毕
4.1 数据位的有效性
I2C总线进行数据传送时, SCL为高电平期间, SDA上的数据必须保持稳定,
只有在SCL的信号为低电平期间, SDA上的高电平或低电平状态才允许变化
4.2 数据传输过程
I2C的数据以字节为单位(每个字节8位, 首先传输最高位MSB),
每个字节传后必须跟一个响应位(应答信号)
每次传输的字节数量不受限制
如果从机要完成一些其它功能后(例如一个内部中断服务程序)才能接收或发送下一个完整的数据字节
可以使时钟线SCL保持低电平, 迫使主机进入等待状态
当从机准备好接收下一个数据字节并释放时钟线SCL后, 数据传输继续
5. 寻址
由于I2C上接有多个器件, 就存在器件寻址问题
I2C总线上传送的数据信号是广义的, 既包括地址信号, 又包括真正的数据信号
主机发出开始信号后, 发送一个从机地址(7位), 第八位是数据方向位(R:1/W:0)
数据传输一般由主机产生结束信号,
但是当主机仍希望通信, 可以发出重复起始条件(Sr)和寻址另一个从机, 而不是产生一个停止条件
6. 组合
在I2C总线上的一次数据传送过程中有如下几种组合方式
- 主机向从机发送数据, 数据传送方向在整个传送过程中不变
- 主机在第一个字节后, 立即由从机读数据
- 在传送过程中, 当需要改变传送方向时, 起始信号和从机地址都被重复产生一次, 但两次读/写方向位正好反相
参考:
<i2c源代码情景分析>
I2C总线介绍的更多相关文章
- [国嵌攻略][152][I2C总线介绍]
IIC电气特性 I2C(inter intergrated circuit)总线是由philps公司开发的两线式串行总线,用于连接微控制器及其外围设备. I2C总线只有两根双向信号线: SDA:ser ...
- I2C总线协议的总结介绍
在看天翔哥的视频之后,他强调要把I2C协议好好研究一下,那么就对一些基本的通信手段是十分有帮助的..那么就来了解一下I2C总线协议的一些知识吧. I2C(Inter-Integrated Circui ...
- Linux+I2C总线分析(主要是probe的方式)
Linux I2C 总线浅析 ㈠ Overview Linux的I2C体系结构分为3个组成部分: ·I2C核心: I2C核心提供了I2C总线驱动和设备驱动的注册.注销方法,I2C通信方法(即“algo ...
- 自制单片机之六……串行I2C总线E2PROM AT24CXXX的应用
这一篇介绍I2C存储器的使用.主要是介绍AT24CXX系列器件,它分为两类,主要是通过被存储容量地址来分的,一类是AT24C02-AT24C16,它的存储容量从256字节到2048字节.另一类是AT2 ...
- 总线接口与计算机通信(一)I2C总线
1. I2C总线的基本概念 1)发送器(Transmitter):发送数据到总线的器件 2)接收器(Receiver):从总线接收数据的器件 3)主机(Master):初始化发送. ...
- ADXL345经验总结,采用SPI和I2C总线操作
一. ADXL345简介 ADXL345是ADI公司推出的三轴(x,y,z)iMEMS数字加速度计(digital accelerometer),具有在16G下高分辨率(13Bit)测量能 ...
- 基于I2C总线的MPU6050学习笔记
MPU6050学习笔记 1. 简述 一直想自己做个四轴飞行器,却无从下手,终于狠下决心,拿出尘封已久的MPU6050模块,开始摸索着数据手册分析,一步一步地实现了MPU6050模块的功能,从MPU60 ...
- EEPROM读写学习笔记与I2C总线(转)
reference:https://www.cnblogs.com/uiojhi/p/7565232.html 无论任何电子产品都会涉及到数据的产生与数据的保存,这个数据可能并不是用来长久保存,只是在 ...
- i2c总线驱动,总线设备(适配器),从设备,从设备驱动的注册以及匹配
常用链接 我的随笔 我的评论 我的参与 最新评论 我的标签 随笔分类 ARM裸机(13) C(8) C++(8) GNU-ARM汇编 Linux驱动(24) Linux应用编程(5) Makefile ...
随机推荐
- 调整图像的亮度和对比度—opencv
1.理论基础 两个参数 和 一般称作 增益 和 偏置 参数.我们往往用这两个参数来分别控制 对比度 和 亮度 . 你可以把 看成源图像像素,把 看成输出图像像素.这样一来,上面的式子就能写得更 ...
- TouTiao开源项目 分析笔记8 图解分析数据加载方式
1.整体构架 1.1.以一个段子页面为例,列出用到的主要的类,以图片的方式展示. 1.2.基础类 这里最基础的接口有: IBaseView<T>==>定义了5个方法. 然后最基础 ...
- 20145202马超 《Java程序设计》第三周学习总结
************************http://git.oschina.net/tuolemi/java这是git的那个网址********************* 函数的重载:在同一 ...
- 玩转Node.js(二)
玩转Node.js(二) 先来回顾上次的内容,上一次我们使用介绍了Node.js并写了第一个服务器端的Hello World程序,在这个Hello World程序中,请求自带的http模块并将其赋给h ...
- leetcode 【 Merge Two Sorted Lists 】 python 实现
题目: Merge two sorted linked lists and return it as a new list. The new list should be made by splici ...
- 自动化测试(三)如何用python写个双色球
写一个程序,输入N就产生N条双色球号码 红球 6 01-33 蓝球 1 01-16 产生的双色球号码不能重复,写到一个文件里面,每一行是一条 红球: 01 03 05 07 08 ...
- TW实习日记:第四天
第四天 早上第一件事就是和组长说前一天的需求的事,简而言之就是两个导航栏不属于一个标签内,自定义导航栏属于<body>下的<header>,微信顶部的则是<head> ...
- LightGBM的并行优化--机器学习-周振洋
LightGBM的并行优化 上一篇文章介绍了LightGBM算法的特点,总结起来LightGBM采用Histogram算法进行特征选择以及采用Leaf-wise的决策树生长策略,使其在一批以树模型为基 ...
- 计算机概念总结5-阿里云的了解2-slb
https://help.aliyun.com/document_detail/27539.html?spm=a2c4g.11186623.6.544.3c3c5779UdHKeO 概述 负载均衡(S ...
- 团队项目-第八次scrum 会议
时间:11.4 时长:30分钟 地点:F楼2层沙发休息处 工作情况 团队成员 已完成任务 待完成任务 解小锐 修复员工招聘时bug 完成员工commit函数的数值函数编写 陈鑫 实现雇佣与解雇功能的界 ...