I2C. tutorial.
此I2C教程向您展示了I2C协议如何或更正确编写
I2c(有时写为IIC)代表ICL IC通信和
用于在单个PCB上的IC之间非常短的距离通信。
它为您提供了一个完全定义的用于多个数据传输的协议
两根电线的设备。
在这方面 I2C. tutorial 您将学习所有关于2线的所有内容
I2C串行协议;使用它是多么容易,它是如何运作的,何时使用它。
I2C.协议用于大量芯片 - 仅仅是其中一些示例
site include the DS1307 (RTC), SSD1306. (OLED显示), MCP23017 (Serial
扩张器)。该协议允许您将许多设备连接到一组两根线,
然后用每个设备单独通信。
警告: 该协议专为单板设计
通信它不是长途通信系统。你可以找到实例
(恐怖故事)设计多滴办公通信系统的人
使用I2C扩展器 - 只是唐'要做它 - 它以泪水结束!
此I2C教程向您展示I2C协议如何在物理位上运行
级别讨论单个主模式(单个控制设备),即
在一个小系统中为I2C最常用的用途。
注意:您可以找到主人
模式软I2C例程 DS1307 RTC.项目。
注意:一些人
制造商避免支付版税,或避免专利问题
将其称为2个线路协议,但它'S相同的I2C协议(当您时
检查时序图)。
速度
I2C.是一种串行协议,可以以100kHz的不同速度运行,
400kHz和3.4MHz。并非所有芯片都支持所有速度,但100khz是
通常支持。随着数据串行传输,速度很重要,
因此,更快的时钟允许更快更新。
两根电线
协议的巨大力量是它只需要两根线
可以有许多连接的设备,所有这些都可以传输和接收数据
高速。这节省了大量的PCB接线。
强大的ACK信令
不像 SPI协议,I2C协议具有确认
意味着发送设备知道接收器已接受的功能
数据。因此,I2C在嘈杂的环境中更加强大。
多师
使用I2C,也可以具有使系统更灵活的多个主设备。对于那里的spi
也不是多个主设备的概念,但SPI更快。
I2C. Tutorial - How I2C works
开漏连接。
I2C.通过使用开漏连接工作。这简单地指的是
具有连接的N沟道MOSFET:漏极,门和源。顶端
连接是漏极,中间连接是门(控制器)
较低的连接是源。
激活时(栅极电压>源电压)然后电流流动
从排水到来源。无效(栅极电压< Source voltage)
然后没有电流。
开漏系统简单地意味着多个MOSFET可以是
然后在排水端子连接在一起,然后连接到a
上拉电阻。现在任何MOSFET都可以拉动电压
排水到地面。每个设备都有一个用作开漏的MOSFET
联系。对于I2C,您需要两个开放式漏极连接(时钟和
data).
每个开放式漏极连接(在I2C中有两个SCL和SDA)需要单个上拉电阻。当所有设备都是
inactive then the "pull-ups"将信号线拉到电源电压。
警告: 每个信号线必须有一个上拉电阻
(SCL和SDA)而不是更多!更多意味着更强的上拉动作(保持高于1K)。
I2C. Start and Address Signalling
在任何时候,主设备都可以通过拉低SDA低电平来启动交易
虽然SCL很高(其他I2C设备识别的唯一具体条件
作为主传输的开始)。
从设备侦听到地址的下一个串行位,以查看是否
它与其自己的地址(每个I2C必须具有唯一地址)。如果
它确实将接下来的7位作为来自主设备的地址,然后它将消耗所遵循的R / W位。
这是读/写位,告诉从站接受数据或在后续事务中生成数据。
当要生成ACK信号时,主设备释放SDA
线路和开漏输出拉高。这允许从设备到
通过将其降低(仅针对该特定位而生成ACK信号
时期)。主设备监视来自从机的此信号的I2C总线。
从站生成回复主设备的确认位。这个
表示它理解地址。进一步下来的图表显示了这一点
graphical form.
笔记: 另一种使用开漏概念的协议是
达拉斯1线协议 - 但这远慢。 1线的优势
协议是它允许通过信号线供电!这
1-Wire协议还允许在非常大的距离上传输
I2C协议。在这个项目上这个项目(
DS18B20. )使用1线协议。
掌握和奴隶
Phillips I2C协议定义了掌握的概念和
从设备。主设备只是负责的设备
此时的公共汽车,此设备控制时钟并生成开始
和停止信号。奴隶只是听取总线并采取行动控制和数据
that they are sent.
主站可以将数据发送到从站或从a接收数据
奴隶 - 奴隶不会在自己之间传输数据。
多师
多主操作是一种更复杂的I2C,即让
您在同一总线上有不同的控制设备。你只需要使用
如果您在总线上有多个单片机(并且您想要
他们中的任何一个都是公共汽车大师)。
多主操作涉及公共汽车的仲裁(其中a
主人必须争取控制总线)和时钟同步(每个
可以使用不同的时钟。因为每个的单独的水晶时钟
micro).
注意:此I2C教程中未涵盖多主站
I2C的越常用是使用单个总线主控来控制外围设备
设备e.g.串行存储器,ADC,RTC等
数据和时钟
I2C.接口使用两个双向线,这意味着
任何设备都可以驱动任一线。在单个主系统中主设备
大部分时间都驱动时钟 - 主机负责时钟
奴隶可以影响它慢下来(见下面的慢外设)。
必须将两根电线作为开路收集器/漏极输出驱动,并且必须是
使用一个电阻拉高,每个电阻(即每个I2C线I.E.For
数据和时钟) - 这实现了一个'wired NOR function' - 任何拔拉
电线低导致所有设备看到低逻辑值 - 用于高逻辑值
所有设备必须停止驱动电线。
注意:如果使用I2C,则无法放置任何其他(非I2C)设备
随着两条线的总线在某些时间用作时钟(开始和停止生成
位切换数据行)。所以你不能做一些聪明的事情,如保守
时钟线不活动并使用数据线作为按钮按下检测器(至
save pins).
您经常会发现您实现的设备是I2C兼容但是
它们被标记为使用a'2 wire interface'。制造商正在避免
不使用单词支付版税'I2C'!
有两条电线(如果你包括地面,那么,还有四条电线
包括力量!) - 但是,允许的力量和地面是如此。它们是
根据需要在PCB上使用't really count.
I2C. Tutorial: Signals
SDA:串行数据
SCL:串行时钟
I2C. Tutorial: Typical signalling transaction
I2C. Tutorial : Typical SDA and SCL signals
注意:R / W(0 =写入,1 =读取)。 ACK = 0(通过从机拉低)。
速度
标准时钟速度为100kHz和10kHz,但标准让您使用
从零到100kHz的时钟速度和快速模式(400kHz -
快速模式)。更高的速度(3.4MHz - 高速模式),更苛刻
应用 - 中档PIC获胜'才搞定这个模式!
注意:省略了低速模式(10kHz)作为标准现在
指定操作从0到100kHz的基本系统。
笔记: 即使您以高速运行I2C外设
整体数据速率取决于您可以将数据推入内部I2C的速度
模块,这取决于处理器速度。
慢速设备可能需要在收集数据或数据时停止总线
服务中断等。它可以在拿着时钟线(SCL)同时执行此操作
低强制大师进入等待状态。大师必须等到SCL
在继续之前发布。
数据传输序列
对I2C的从属读取或写入序列的基本主站如下
the following order:
- 1.发送起始位。
- 2.发送从地址(ADDR)。通常为7位。
- 3.发送读(r)-1 / write(w)-0位。
- 4.等待/发送确认位(A)。
- 5.发送/接收数据字节(8位)(数据)。
- 6.期望/发送确认位(a)。
- 7.发送停止位(P)。
注意:您可以使用7位或10位地址。
可以重复序列5和6,使得多字节块
可以读写。
数据传输来自掌握到奴隶的
I2C.教程:从主设备到从属的指令序列数据
主设备发送序列S ADDR W,然后等待
从从设备中确认位(a),从设备只会生成它
内部地址与主服务器发送的值匹配。如果发生这种情况那么
主站发送数据并等待从站的确认(a)。大师
通过生成停止位(或重复)完成字节传输
start).
从奴隶到掌握的数据传输
I2C.教程:从掌握从掌握的指令序列数据
当主机从奴隶读取但在此时,发生类似的过程
案例,而不是W,R是发送的。数据从奴隶发送到
the master the 掌握 发送确认(a)。如果代替主人
不想要任何更多数据,它必须发送指示的不安全
它应该释放总线的奴隶。这让主人发送停止或
重复开始信号。
设备地址
您在I2C总线上使用的每个设备必须具有唯一的地址。
对于一些设备,例如串行内存您可以使用较低的地址位使用
设备上的输入引脚其他具有固定内部地址设置,例如,一个
实时时钟DS1307。您可以在同一IC总线上放置几个内存设备
通过使用不同的地址。
每个设备制造商都被分配了一组地址,因此设备应
彼此不冲突。
注意:最大设备数量限制为数字
可用地址(并且您需要非冲突地址)和由此
总线电容总线(最大400pf)。
一般呼叫
常规呼叫地址是一个保留的地址
总线主站的输出应解决应响应的所有设备
一个确认。值是0000000(7位)并由主机写入
0000000W。如果设备不需要来自常规调用的数据,则它不需要
to respond to it.
保留地址
0000 000 1开始字节 - 慢
没有i2c h / w的micros
0000 001 x CBUS地址 - 不同的总线协议
0000 010 x为不同的总线格式保留
0000 011 x保留未来目的
0000 1xx x HS模式主代码
1111 1xx x保留未来目的
1111 0xx x 10位从站寻址
其中大部分都不适用于PIC微控制器
除了可能启动字节和10位寻址。
开始(s)和stop(p)位
开始(s)和stop(p)位是可以是唯一的信号
在公共汽车上生成但是 只要 by a bus master.
通过I2C从设备接收开始位重置其
内部总线逻辑。这可以随时完成,因此如果您可以强制重新启动
即使在沟通中间也出了任何问题。
启动和停止位被定义为上升或下降边缘
时钟线保持高的数据线。
I2C.教程:启动和停止信号定义
开始条件 |
scl = 1,
SDA falling edge |
停止条件(P) |
scl = 1,
SDA rising edge |
下图以图形方式显示了上述信息 -
这些是您在I2C总线上看到的信号。
I2C. Tutorial : 开始(s)和stop(p)位.
注意:在单个主系统中,唯一的区别
奴隶和主人是主人'■能够生成启动和停止位。
奴隶和主站都可以控制SDA和SCL。
重复开始(SR)
一开始就像你问自己一样令人困惑
为什么在功能上与序列相同时,为什么
S addr(r / w)数据a p
唯一的区别是,对于重复开始,您可以重复
从止动位开始的序列(用另一个替换停止位
start bit).
S ADDR(R / W)数据a SR ADDR(R / W)数据A P
你可以无限期地做到这一点。
注意:接收S或SR强制任何I2C设备复位
它的内部总线逻辑,所以发送S或SR真的重置所有总线
设备。这可以完成 随时 - 它是一个强制重置。
SR位存在的主要原因是多主站
当前总线主控不想释放其的配置
掌握。使用重复的开始保持总线忙碌,以便没有其他主人
can grab the bus.
因为在单个主配置中使用时
is just a curiosity.
数据
所有数据块都由8位组成。初始块有7个
地址位,后跟方向位(读或写)。以下块有
8数据位。在每个块之间挤压确认位。
每个数据字节首先传输MSB,包括地址
byte.
要允许主数据的开始和停止位生成数据
当时钟(SCL)高时,不得更改线(SDA) - 它只能是
当时钟很低时改变。
承认
确认位(由接收设备生成)
表示数据传输的发射机正常。请注意
确认位的时钟脉冲始终由总线主控器创建。
确认数据位由主设备或
从属取决于数据方向。对于奴隶的主人写作(W)
确认由从站生成。对于主接收(R)数据
从从站生成Acknowledge位。
ACK数据大师 - > slave
在这种情况下,从机生成确认信号。
当总线主掌握收到不承认的问题时
传输失败,主人必须生成停止或重复开始
abort the sequence.
ACK数据奴隶 - > master
在这种情况下,主设备生成确认信号。
通常,主人将在它有后生成确认
收到数据,但要向从设备指示不需要更多数据
最后一个字节传输主机必须生成一个'not-acknowledge'. This indicates
对于它应该停止发送数据的奴隶。然后,主人可以生成
停止位(或重复开始)。
一般呼叫
常规呼叫函数是必须接受的专门命令
所有设备上的所有设备。它允许主设备与所有设备通信
同时 - 给他们一些数据。也许你会用它来命令
在处理器中的看门狗超时的情况下软件重置。
I2C. Tutorial : Specifics for the 16F88
引脚配置
要在16F88中使用I2C模式,必须是SDA和SCL引脚
初始化为输入(TRIS位= 1),以便创建开放漏极效果。
通过将它们设置为输入,它们不会驱动电线和外部拉力
UP电阻会使信号高。
16F88从模式
16F88完全实现除常规之外的所有从功能
call.
一般呼叫功能并不重要,因为它非常重要
专门命令总线上的所有设备使用一些数据。
通过驱动信号线和低输出来产生低输出
将引脚方向更改为输出。通过改变产生高输出
引脚向输入方向使外部电阻拉动信号
high.
在从模式中,此操作由SSP模块为您完成
(SDA和SCL的寄存器的输出被自动驱动 -
无论寄存器值的状态如何)。
16F88主模式
基本上存在非常有限的主模式功能。
提供了两个元素:
16F88中断
有两个中断激活在接收到a
开始或停止条件。这两个中断仅在多主站中有用
模式系统,非主设备需要检测开始
和停止条件。因此,对于单个主系统,它们暂无用
all!
16F88 PIN控制
注意当SSP模块是活动的SDA和SCL输出时
无论寄存器值的状态如何,始终设置为零。所以你们所有人
必须做的是控制端口方向。
在主模式(16F88)SDA和SCL中必须使用
software.
I2C. Tutorial : Specifics for 16F877A
它为你做了一切!
注意:如果您希望具有完整主机和从模式的芯片
操作在PIC芯片中查找MSSP模块。 16F877A - 然后你赢了't
需要更多软件 - 只需驾驶模块。
pic项目示例
DS1307 实时时钟(咬击
I2C).
arduino.的例子
BMP280 Pressure sensor
MCP23017 IO expander.
ADS1115. 16 bit ADC.
AXD345 Accelerometer.
MCP4725 DAC with memory.
跳跃 I2C. Tutorial到
最佳微控制器 - 项目主页
隐私政策
| 接触
| 关于我
网站地图
| 使用条款