其他
一文看懂I2C协议
有哪些内容
I2C是什么 5种速率 4种信号 读写时序 7位和10位地址 I2C保留字节 FPGA实测I2C波形 SPI和I2C的对比
I2C是什么
5种速率
标准模式(Standard):100kbps 快速模式(Fast):400kbps 快速模式+(Fast-Plus):1Mbps 高速模式(High-speed):3.4Mbps 超快模式(Ultra-Fast):5Mbps(单向传输)
4种信号
起始信号
停止信号
数据有效性
应答信号
非应答信号
I2C总线上没有主机所指定地址的从机设备 从机正在执行一些操作,处于忙状态,还没有准备好与主机通讯 主机发送的一些控制命令,从机不支持 主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了
读写时序
7位和10位地址
I2C保留字节
FPGA实测I2C波形
S0_IDLE = 0,
S1_START1 = 1,
S2_CTRL_BYTE1 = 2,
S3_ACK1 = 3,
S4_ADDR = 4,
S5_ACK2 = 5,
//write: 0-1-2-3-4-5->6-7-13-14
S6W_DATA = 6,
S7W_ACK3 = 7,
//read: 0-1-2-3-4-5->8-9-10-11-12-13-14
S8R_START2 = 8,
S9R_CTRL_BYTE2 = 9,
S10R_ACK3 = 10,
S11R_DATA = 11,
S12R_NACK = 12,
//general
S13_STOP = 13,
S14_DONE = 14,
S15_ERR = 15;
inout eeprom_sda,
localparam DIR_IN = 1'b0;
localparam DIR_OUT = !DIR_IN;
reg dir;
reg i2c_sda;
reg i2c_scl;
assign eeprom_scl = i2c_scl;
assign eeprom_sda = (dir == DIR_OUT) ? i2c_sda : 1'bz;
wire sda_in = eeprom_sda;
SPI和I2C的对比
I2C是半双工,SPI是全双工。 I2C支持多主多从模式,而SPI只能有一个主机。 从GPIO占用上来看,I2C占用更少的GPIO,更节省资源。 I2C有应答响应机制,数据可靠性更高,SPI没有应答机制。 I2C速率不会太高,最高速率3.4Mbps,SPI可以达到很高的速率。 I2C通过器件地址来选择从机,从机数量的增加不会导致GPIO的增加,而SPI通过CS选择从机,每增加一个从机就要多占用一个GPIO。 SPI协议在SCLK边沿进行数据采样,I2C在SCL高电平期间进行数据采样。 两者大多都应用于板内器件短距离通讯。