[UVM验证] IIC项目复盘 IIC协议概要
IIC项目复盘
寄存器模块
- 配置寄存器
- 指令寄存器
- 状态寄存器
- 中断寄存器
iic设计模块概要
设计接口interface
APB slave interface
iic_master/slave interface
iic_debug_interface
interrupt interface
dma_interface
中断interface
每个中断对应一个中断线,高电平表示产生中断;
- 每个中断线都有对应的中断寄存器、屏蔽寄存器、清除寄存器
- 读取中断清除寄存器可以清除中断
配置为slave模式
配置方法
- enable deassert
- 设置从机地址
- 设置寻址方式,禁用master模式
- 使能中断
- 设置RXTX FIFO的中断阈值
- enable
- 软件查询中断状态寄存器,根据中断类型执行相应处理
配置为master模式
-
禁用enable
-
设置速度模式,禁用slave模式,使能master模式
-
IC_TAR寄存器写入要寻址的slave设备
-
使能中断与中断阈值
-
重新enable
master模式收发数据
- 不能独自发起操作,需要配置指令寄存器,写入传输方向和要发送的数据
速度模式与配置
三种速度模式
- SS、FA、HS
ic_clk
与SCL,SCL频率可以自动计算,不用手动配置cnt分频,但需要ic_clk周期为10ns
iic总线协议理解
开漏与线与
- SDA和SCL都是双向总线,通过电流源或上拉电阻连接到正电源
- 连接到总线的设备的输出级必须有一个漏极开路或集电极开路来 执行“线与“功能
数据有效性
- 只有当SCL时钟信号为低时,SDA的数据才可以发生变化
- SDA线上的数据在SCL高电平必须是稳定的
开始条件和结束条件
- START:当SCL处于高电平时,SDA从高到低定义为启动条件
- STOP:当SCL处于高电平时,SDA从低到高定义为停止条件
传输格式
- 每个字节必须8bit,传输字节数不限,每个字节后面跟一个确认位ACK,数据传输从最高有效位MSB开始
- 如果从端无法接收或发送另一个完整的字节的数据时 ,它可以先拉低低时钟线SCL使主设备进入等待状态,直到执行完其他功能再释放时钟线SCL。
ACK响应
- 接收方在第九个时钟脉冲期间,SCL为高电平的时候,SDA持续拉低,定义为应答信号ACK
- 如果SDA为高,则认为不应答信号NACK
时钟同步和仲裁
- 多主设备需要时钟同步和仲裁
时钟同步
- 时钟同步是连接到SCL总线的I2C接口的“线与”实现的;当SCL总线从高电平拉低时,主设备将计数他们的低电平时钟,一旦一个主设备时钟拉低,其将把SCL总线也拉低,直到主设备时钟再次拉高;然而如果另一个主设备的时钟仍旧是拉低的,SCL总线将保持拉低状态;因此,SCL总线被有最长低周期的主设备保持在低电平。在此期间,低周期较短的主设备将进入高电平等待状态。
- 时钟同步最终的结果:产生了一个同步的SCL时钟,它的低周期由低电平最长的 主设备时钟确定,而它的高周期由高电平最长的主设备时钟确定
仲裁
-
仲裁是通过比较主机上发送的数据与SDA上的结果是否匹配来完成的,是一个bit一个bit来比较的。
-
当主设备第一次尝试发送一个HIGH,但检测到SDA为低时,其知道它已经输掉了仲裁并会关闭了它的SDA输出驱动程序,另一个主设备继续完成传送。
-
因此多主仲裁是没有优先级的,其仲裁结果是由master发送的地址和数据决定的:
-
由于I2C总线的控制完全取决于竞争主设备发送的地址和数据, 因此没有中央主设备,总线上也没有任何优先级顺序
10bit地址寻址方式
- 第一个字节组成:1111_0XX, XX是10bit地址的高两位,第8bit是传输防线
- 第二个字节组成:8位是10bit的低8bit地址