三大串行总线:UART、SPI、IIC(其中SPI是由时钟沿采集数据,为同步接口;UART和IIC是由电平采集数据,为异步接口)
IIC速率:工作在半双工方式,2根线(SCL和SDA)
标准:100kbps,快速400kbps,告诉3.4Mbps
总线信号:SDA——串行数据线,SCL——串行时钟线
总线空闲状态:SDA——高电平,SCL——高电平
起始位:SCL为高电平期间,SDA出现下降沿。
终止位:SCL为高电平期间,SDA出现下降沿
数据传输:SDA的数据在SCL高电平期间被写入从机。所以SDA上数据需要在SCL为低电平期间才能发生变化。
应答:接收方发动给发送方ACK信号。即当IIC主机将8比特的数据或命令发出后,将SDA设置为输入模式(高阻),等待从机应答(SDA的电平由高变为低),以此确定从机成功的接收到了数据。
IIC器件地址:一些器件在出厂的时候就已经定好了地址,不可以被用户更改;有些器件值在出厂时只确定了高几位地址,用户可以对低位的地址进行更改,例如EEPROM高4位地址确定为1010,低3位的地址由用户硬件连线来确定,所以一个IIC总线最多可以连接8个EEPROM。
单字节地址的写时序:
多字节地址的写时序:
单字节地址的读时序:
多字节地址的读时序:(略,与多字节地址的写时序类似)
Device Address地址读写操作:(器件地址为7位,0为写,1为读)
在xilinx的vivado软件中,SDA接口数据编写:
IOBUF IOBUF_inst(
.O (sda_in), //1bit output
.I (sda_out), //1bit input
.IO(SDA), //1bit inout
.T (~sda_oe) //1bit input:3-state enable(1=input,0=output)
); //sda_in输入
等价于:
assign SDA = sda_oe?sda_out:1'bz;