I²C(Inter-Integrated Circuit)要点

引子

集成电路总线(Inter-Integrated Circuit,IIC)是一种常用于单片机的同步串行通信接口规范,常见使用 I²C 的外设有EEPROM、传感器(如MPU9250中的磁力计)、时钟芯片(如DS3231)、低速ADC/ADC。相较于SPI,IIC通常速率更慢且电路更复杂,但所需接线更少。

I²C

I²C一般有两条信号线:SDA(serial data line)和SCL(serial clock line)分别用于传输数据和时钟信号。一般两条数据线都需要外接上拉电阻,同时引脚都工作在开漏模式下。时钟信号通常为100  kbit/s (标准模式)和 400 kbit/s (快速模式),但通常也可以以低于工作频率通信,也就是说可以方便地通过软件实现。

I²C是飞利浦发明的,同时拥有完整的规范,因此相对SPI而言需要配置的选项更少。

同时I²C也支持多从片,通过地址(一般为7位)实现片选。

I²C物理层

I²C的SDA和SCL通常会外接一个上拉电阻,引脚工作在开漏模式,电压不做限制,既可工作在5V也可工作在3.3V,一个总线上可以挂多个地址不同的从机。

I²C传输数据

基本单元

一次I²C传输数据从起始信号开始,首先将传输地址与读写标志位,随后开始传输数据,每个字节的数据传输后都会附加一个应答信号(ACK/NACK),并最终以停止信号结束,其中白色为主机发送,灰色为从机发送,绿色为主机或从机发送。

起始信号与停止信号

I²C传输任何数据都是以住片的START起始信号(SDA下降沿,SCL保持上拉)开始,并以STOP停止信号(SDA上升沿,SCL保持上拉)结束,在总线空闲状态下SDA和SCL都为高电平。

数据传输与应答信号(ACK/NACK)

在传输数据时在SCL下降沿更新数据,在SCL上升沿采集数据,先传高位。此外,在传输完成一字节数据后,接收方一般会发送ACK(1位1)或NACK(1位0)信号。

地址与读写标志

每次传输数据的第一个字节为地址(7位)和读写标志(1位,1为读,0为写),通常地址是器件自身决定并且固定的,为了解决地址冲突,有些器件也能自定义地址。

写数据

写数据时将读写标志置为0,每发送一个字节的数据从机都会返回一个ACK,其中白色为主机发送,灰色为从机发送。

读数据

读数据时将读写标志置为1,每接收一个字节的数据主机都会返回一个ACK并在结束时返回NACK,其中白色为主机发送,灰色为从机发送。

I²C实现

通常单片机会提供I²C硬件外设,但由于I²C硬件外设很容易卡在奇怪的地方,因此大多数时候使用软件I²C。

对于大部分单片机而言,在开漏模式下也能读取引脚状态,因此无需切换为推挽或输入状态。

由于I²C速率一般较低,因此在软件实现时还需要插入延时。以下为参考软件I2C设计。

(待补充)

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇