目录
《 I2C-bus specification and user manual UM10204—4 April 2014》
I2C详解(一)
I2C协议靠这16张图彻底搞懂(超详细)
I2C通信详解介绍(初学,浅显易懂,基本知识)
IIC、SPI、UART、USART、USB、CAN等通讯协议原理及区别
常用通信协议——IIC详解(全网最全)
1. 功能介绍
集成电路总线(Inter-Integrated Circuit,I2C),仅由双向两条线构成,属半双工、串行、同步通信总线,可使用多主多从架构,是由飞利浦公司在1980年代初设计。
方便了主板、嵌入式系统或手机与周边设备组件之间的低速通讯。由于其简单性,它被广泛用于微控制器与传感器阵列,显示器,IoT设备,EEPROM等之间的通信。
1.1. 半双工 串行 同步
I2C总线只由SDA和SCL两根线构成,一个串行数据线、一个串行时钟线,其中SDA是双向的,因此可实现master和slave之间的数据半双工收发。
半双工,即要么发送、要么接受,一根输入输出线SDA即可
同时I2C是基于地址对slave和其内部的寄存器进行片选,注意这一点与SPI不同(SPI是csn片选信号),因此I2C可实现多主多从的架构,同时主从器件数量无限制。
不仅如此,I2C的数据传输具备应答功能,每次数据传输,接收方都可返回一个ACK信号。
当有多个master设备想要访问同一个slave,I2C也具备仲裁的功能
波特率
I2C也是基于同步时钟进行数据传输的,传输速度有不同的模式
双向传输:
● 标准模式(Standard-mode) :高达100 Kbps
● 快速模式(Fast-mode) :高达400 Kbps
● 快速模式+(Fast-mode Plus) :高达1 Mbps
● 高速模式(High-speed mode) :高达3.4 Mbps
单向传输:
● 超快速模式(Ultra Fast-mode):高达5M bps
2. 架构
无论几个master、几个slave,信号输入输出都是如下
注意master要输出SCL但是并不能单独拉一个新的模块baud_clock_gen,这是因为I2C不是基于沿进行驱动和采样数据的,而是基于电平,后文会讲到
Signal | Direction | Width(bits) | Description |
---|---|---|---|
prstn | input | 1 | 复位信号 |
pclk | input | 1 | 用户时钟 |
paddr | input | PADDR_WIDTH | APB地址 |
pwrite | input | 1 | 1表示写,0表示读 |
psel | input | 1 | 选通 |
penable | input | 1 | APB使能 |
pwdata | input | PDATA_WIDTH | 写数据 |
prdata | input | PDATA_WIDTH | 读数据 |
pready | output | 1 | usart准备标志 |
scl | output/input | 1 | I2C串行时钟总线,master为output、slave为input |
sda | inout | 1 | I2C串行数据总线 |
之后是参数描述
Parameter | Units | Description |
---|---|---|
BAUD_RATE | bit per second | 设定的波特率 |
PCLK_FREQ | HZ | clk的时钟频率 |
PADDR_WIDTH | bit | 访问SPI内部FIFO的地址位宽 |
PDATA_WIDTH | bit | 写入or读出的数据位宽 |
FIFO_WRITE_WIDTH | bit | FIFO写深度 |