I2C通信协议主要同一块板上芯片间的通信,因此速度不是很高。SCL为时钟线,SDA为数据线。时钟由主设备发送给从设备,数据可以在两设备间互传。
在测试DW_I2C模块时,如果外面都包了一层,在tb中只有两个inout类型的信号,那么验证方法如下:
例化两个完全相同的IIC模块,一个设置为主设备另一个为从设备,那么将两个设备的SCL线相接,SDA线相接即可。但接线的类型必须为tri1,即上拉电阻三态型,否则无法正常工作。具体为
tri1scl_iopad ;
tri1 sda_iopad ;
令iic0做主设备,iic1做从设备,从而验证iic的基本收发功能是否正确。
.iic0_scl_iopad (scl_iopad ),
.iic0_sda_iopad (sda_iopad ),
.iic1_scl_iopad (scl_iopad ),
.iic1_sda_iopad (sda_iopad ),
验证过程中需注意以下几点:
- DW_I2C模块有三个重要的寄存器,偏移0x00的配置寄存器,偏移0x10的DATA_CMD寄存器,偏移0x6C的使能寄存器。
- 此外还有中断相关的状态寄存器和CLEAR寄存器。
- DW_I2C清中断的方式是读CLEAR寄存器。
- 在写配置寄存器之前必须先把DW_I2C使能关掉,否则无法写入。
- DW_I2C可以设置为8位或10位模式寻址