IIC协议

IIC协议学习笔记

作者:NingHeChuan

IIC总线(Inter-Integrated Circuit)即集成电路总线,是PHILIPS公司设计出来的一种简单、双向、二线制、同步串行总线。IIC总线是一个多向控制总线,多个器件(从机)可以同时挂载到一个主机控制的一条总线上。每个连接在总线上的设备都是通过唯一的地址和其他器件通信,主机和从机的角色可互换。

  主机和从机的概念。主机就是负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务,主机和从机之间通过总线连接,进行数据通讯。我们平时使用的个人电脑也就是这个概念。

  IIC协议为半双工协议。

  全双工指在发送数据的同时也能够接收数据,两者同步进行。目前的网卡一般都支持全双工。

  半双工就是指一个时间段内只有一个动作发生,早期的对讲机、以及早期集线器等设备都是基于半双工的产品。

  还有一种单工通信是指通信线路上的数据按单一方向传送.。

  数据有效传输在scl信号的高电平期间,sda数据线保持稳定,在scl为低电平时允许sda数据线变化。

verilog 实现IIC

verilog 实现IIC协议算是一个简单的IP核,本来是挂在AXI总线上,可以通过microblaze对其进行配置。最近在弄ADV7511,用到IIC来配置它.直接上代码:
module iic_drive(
input clk,
input reset_n,

// 与控制器通信信号
input [31:0] slv_reg0,
input [31:0] slv_reg1,
input [31:0] slv_reg2,
input [31:0] slv_reg3,
input [31:0] slv_reg4,
output reg [ 7:0] iic_rddb,
output iic_busy,

// 外部信号
output iic_scl,
input iic_sda_in,
output sda_dir,
output sda_r
);

// SCL 分频系数
// 产生IIC时钟 100M/20K = 5000
parameter SCL_SUM = 13'd5000;

// 仿真时

FPGA基础设计(四):IIC协议

很多数字传感器、数字控制的芯片(DDS、串行ADC、串行DAC)都是通过IIC总线来和控制器通信的。不过IIC协议仍然是一种慢速的通信方式,标准IIC速率为100kbit/s,快速模式速率为400kbit/s。本文致力于讲述如何用计数器控制和分频时钟控制两种方式完成IIC的读写操作。

IIC协议

  IIC协议是一种多机通讯,由SDA数据线和SCL时钟线构成串行总线,所有的IIC设备都可以挂载到总线上,但每个设备都有唯一的设备读地址和设备写地址。在使用IIC作为数字接口的芯片datasheet中都可以看到该设备的设备读/写地址情况,并可以查找到相应的读写时序,以及对速率的要求。下图是一个通用的IIC协议时序:

我们可以总结出五种IIC协议的时序状态:
  1. 空闲状态,当SDA和SCL两条信号线都处于高电平时总线处于空闲状态。
  2. 开始信号,SCL为高电平期间SDA信号线上产生了下降沿标志着的一次数据传输的开始。开始信号应当由主机发起。

同步内容