FPGA学习笔记
IIC协议
1. IIC协议概念
2. IIC协议原理
2.1. 起始位,结束位
2.2. 器件地址
2.3. 存储器地址
2.4. 应答位
2.5. 读写时序
1. IIC协议概念
IIC: inter integrated circuit BUS, 集成电路总线,是一种串行通信总线,多为主从结构。 一般用在小数据亮场合,传输距离短。
特点:
- 连接简单:物理层上,IIC协议只有2根总线线路:SCL(串行时钟线), SDA(串行数据线)
- 双向通信:两根线可以完成数据的传入和传出。
- 多主多从:一个IIC总线上可以连接多个主机,多个从机。同一时刻,只能有一个主机向总线发起传输。
- 传输速度快:在标准模式下,100kbit/s,快速模式下400kbit/s,高速模式下3.4Mbit/s。主从设备之间以字节为单位双向数据传输。
- 唯一ID:总线上的每一个器件有唯一ID。只有总线上的传输与该器件的ID匹配时,器件才对总线上的传输做出相应的回应。不会产生冲突。
2. IIC协议原理
-
2.1 起始位,结束位
起始位:SCL信号为高电平时,SDA出现一个下降沿 开始传输数据
停止位: SCL高电平,SDA上升沿 停止传输数据
总线空闲状态:SCL高电平;SDA高电平;
SCL高电平:SDA数据稳定;SCL低电平:SDA数据变化 -
2.2. 器件地址
传输顺序:从高位到低位
Eg. Chip select bits: 3’b100
读:1010_100_1
写:1010_100_0 -
2.3. 存储器地址
长度:1或2个字节(与器件的存储单元数有关)
位置:主机收到ACK后,主机发出存储地址 -
2.4. 应答位
当发送方(图:主机)将8位数据发送完成后,等待接收方(图:从机)发送一个应答信号,表示是否已经接收数据。0:应答,1:非应答。(应答信号在8位数据发送完后紧接着的时钟周期(图:#9)) -
2.5. 读写时序
-
读操作:总线上主机从指定的从机的指定的存储地址读取一个(多个)字节数据的完整时序主机操作过程:
① 主机设置 SDA 为输出;
② 主机发起起始信号;
③ 主机传输器件地址字节,其中最低位为 0,表明为写操作;
④ 主机设置 SDA 为三态门输入,读取从机应答信号;
⑤ 读取应答信号成功,主机设置 SDA 输出,传输 1 字节地址数据;
⑥ 主机设置 SDA 为三态门输入,读取从机应答信号;
⑦ 读取应答信号成功,主机设置 SDA 输出,对于两字节地址段器件,传输低字节地址数
⑧ 据;对于 1 字节地址段器件,无此步骤;
⑨ 主机发起起始信号;
⑩ 主机传输器件地址字节,其中最低位为 1,表明为读操作;
⑪ 设置 SDA 为三态门输入,读取从机应答信号;
⑫ 读取应答信号成功,主机设置 SDA 为三态门输入,读取 SDA 总线上的一个字节的数
⑬ 据;
⑭ 产生无应答信号(高电平)(无需设置为输出高电平,因为总线会被自动拉高);
⑮ 主机产生 STOP 位,终止传输。 -
写操作:总线上主机写一个((多个))指定数据到指定从机的指定出去地址的完整时序
主机操作过程:
① 主机设置 SDA 为输出;
② 主机发起起始信号;
③ 主机传输器件地址字节,其中最低位为 0,表明为写操作;
④ 主机设置 SDA 为三态门输入,读取从机应答信号;
⑤ 读取应答信号成功,主机设置 SDA 为输出,传输 1 字节地址数据;
⑥ 主机设置 SDA 为三态门输入,读取从机应答信号;
⑦ 读取应答信号成功,对于两字节地址段器件,传输地址数据低字节,对于 1 字节地址段器件,主机设置 SDA 为输出,传输待写入的数据;
⑧ 设置 SDA 为三态门输入,读取从机应答信号,对于两字节地址段器件,接着步骤 9;对于 1 字节地址段器件,直接跳转到步骤 11;
⑨ 读取应答信号成功,主机设置 SDA 为输出,传输待写入的数据(对于两字节地址段器件);
⑩ 设置 SDA 为三态门输入,读取从机应答信号(两字节地址段器件);
⑪ 读取应答信号成功,主机产生 STOP 位,终止传输。
参考资料:《FPGA系统设计与验证实战指南》
【注】:个人学习笔记,如有错误,望不吝赐教,这厢有礼了~~~