Loading

[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地址
posted @ 2022-08-09 02:18  pu1se  阅读(497)  评论(0)    收藏  举报