成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 到 send you MicroZine.

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教程主和奴隶图

速度

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

典型的I2C信号

注意: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.教程:从主设备到从属的指令序列数据

i2c教程掌握奴隶

主设备发送序列S ADDR W,然后等待 从从设备中确认位(a),从设备只会生成它 内部地址与主服务器发送的值匹配。如果发生这种情况那么 主站发送数据并等待从站的确认(a)。大师 通过生成停止位(或重复)完成字节传输 start).

从奴隶到掌握的数据传输

I2C.教程:从掌握从掌握的指令序列数据

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)位.

I2C教程启动和停止

注意:在单个主系统中,唯一的区别 奴隶和主人是主人'■能够生成启动和停止位。 奴隶和主站都可以控制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位。

承认 0 volts
不承认 高的 volts

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主模式

基本上存在非常有限的主模式功能。

提供了两个元素:

  • 中断
  • PIN控制

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
最佳微控制器 - 项目主页



隐私政策 | 接触 | 关于我

网站地图 | 使用条款



ezoic.报告此广告

访问我们的Facebook页面:

   点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino.模拟输出...易模拟输出生成

    arduino.模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超极好的."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
镭_tr.<at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。"


- Anon.

回到顶部