目录
《 I2C-bus specification and user manual UM10204—4 April 2014》
《DesignWare DW_apb_i2c Databook - Synopsys》
I2C详解(一)
【数字IC】深入浅出理解I2C协议
I2C协议靠这16张图彻底搞懂(超详细)
I2C通信详解介绍(初学,浅显易懂,基本知识)
IIC、SPI、UART、USART、USB、CAN等通讯协议原理及区别
常用通信协议——IIC详解(全网最全)
集成电路总线(Inter-Integrated Circuit, I2C)
多路数据整形器(Multi Channel Data Formatter, MCDF)功能描述
1. Design Spec
1.1. Function Description
基于APB与I2C的多主多从架构设计 - Function Description
1.2. Feature List
● 实现3主3从的I2C总线架构
● 可通过寄存器对I2C master的波特率进行配置,可配置成100kbps、400kbps、1Mbps、3.4Mbps四种模式
● 使用7bit寻址协议
● 具备通用广播、SCL同步、SDA仲裁机制
1.3. Block Diagram
本文要实现的I2C总线架构如下图

1.4. FSM Operation
1.4. Register Description
| Address | Register Name | Field(bits) | Type | Field Name | Default Value | Description |
|---|---|---|---|---|---|---|
| 32'h0000_0000 32'h0000_0010 32'h0000_0020 32'h0000_0030 32'h0000_0040 32'h0000_0050 | Transmitter FIFO | [31:0] | W | 发送FIFO的写数据 | 32'd0 | 将在SDA上串行发送的并数据 |
| 32'h0000_0004 32'h0000_0014 32'h0000_0024 32'h0000_0034 32'h0000_0044 32'h0000_0054 | Receiver FIFO | [31:0] | R | 接收FIFO 读数据 | 32'd0 | 从SDA处串行接受的并数据 |
| 32'h0000_0008 32'h0000_0018 32'h0000_0028 32'h0000_0038 32'h0000_0048 32'h0000_0058 | Work Mode Config Register | [1:0] | RW | 工作模式控制 | 2‘d0 | 2'd0表示休眠状态不进行工作,2'd1表示作为slave,2'd2表示作为master,2‘d3保留 |
| [3:2] | RW | 波特率控制 | 2‘d0 | 2'd0表示100kbps、2'd1表示400kbps、2'd2表示1Mbps、2'd3表示3.4Mbps | ||
| [31:4] | RW | Reserved | 'd0 | 保留 |
注意I2C中SDA发送的数据均是在发送FIFO上取得的,每取一个数据发送一次,所以APB的paddr要是FIFO的地址而不是某个i2c slave某个寄存器的地址!!!!
i2c_top
每个i2c模块的框图如下

注意master要输出SCL但是并不能单独拉一个新的模块baud_clock_gen,这是因为I2C不是基于沿进行驱动和采样数据的,而是基于电平,后文会讲到
1.5. Interface Description
注意i2c_master与i2c_slave的设计相同,是根据寄存器配置成master模式或slave模式
i2c_top
| Signal | Direction | Width(bits) | Description |
|---|---|---|---|
| prstn | input | 1 | 复位信号 |
| pclk | input | 1 | 用户时钟 |
| paddr | input | PADDR_WIDTH | APB地址 |
| pwrite | input | 1 | 1表示写,0表示读 |
| psel | input | 1 | 选通 |
| penable | input | 1 | APB使能 |
| pwdata | input | PDATA_WIDTH | 写数据 |
| prdata | input | PDATA_WIDTH | 读数据 |
| pready | output | 1 | usart准备标志 |
| scl | inout | 1 | I2C串行时钟总线 |
| sda | inout | 1 | I2C串行数据总线 |
之后是参数描述
| Parameter | Units | Description |
|---|---|---|
| BAUD_RATE | bit per second | 设定的波特率 |
| PCLK_FREQ | HZ | clk的时钟频率 |
| PADDR_WIDTH | bit | 访问SPI内部FIFO的地址位宽 |
| PDATA_WIDTH | bit | 写入or读出的数据位宽 |
| FIFO_WRITE_WIDTH | bit | FIFO写深度 |
i2c_reg
| Group | Signal | Direction | Width(bits) | Description |
|---|---|---|---|---|
| APB_intf | prstn | input | 1 | 复位信号 |
| pclk | input | 1 | 用户时钟 | |
| paddr | input | PADDR_WIDTH | APB地址 | |
| pwrite | input | 1 | 1表示写,0表示读 | |
| psel | input | 1 | 选通 | |
| penable | input | 1 | APB使能 | |
| pwdata | input | PDATA_WIDTH | 写数据 | |
| prdata | input | PDATA_WIDTH | 读数据 | |
| pready | output | 1 | usart准备标志 | |
| reg_intf | tx_fifo_rd_en | input | 1 | TX FIFO 读使能 |
| tx_fifo_rdata | output | 32 | TX FIFO 读数据 | |
| tx_fifo_empty | output | 1 | TX FIFO 空标志 | |
| rx_fifo_wr_en | input | 1 | RX FIFO 写使能 | |
| rx_fifo_wdata | input | 32 | RX FIFO 写数据 | |
| rx_fifo_full | output | 1 | RX FIFO 满标志 | |
| work_mode | output | 32 | 工作模式配置寄存器 |
之后是参数描述
| Parameter | Units | Description |
|---|---|---|
| BAUD_RATE | bit per second | 设定的波特率 |
| PCLK_FREQ | HZ | clk的时钟频率 |
| PADDR_WIDTH | bit | 访问SPI内部FIFO的地址位宽 |
| PDATA_WIDTH | bit | 写入or读出的数据位宽 |
| FIFO_WRITE_WIDTH | bit | FIFO写深度 |
i2c_trans
| Signal | Direction | Width(bits) | Description |
|---|---|---|---|
| prstn | input | 1 | 复位信号 |
| pclk | input | 1 | 用户时钟 |
| paddr | input | PADDR_WIDTH | APB地址 |
| pwrite | input | 1 | 1表示写,0表示读 |
| psel | input | 1 | 选通 |
| penable | input | 1 | APB使能 |
| pwdata | input | PDATA_WIDTH | 写数据 |
| prdata | input | PDATA_WIDTH | 读数据 |
| pready | output | 1 | usart准备标志 |
| scl | output/input | 1 | I2C串行时钟总线,master为output、slave为input |
| sda | inout | 1 | I2C串行数据总线 |
之后是参数描述
| Parameter | Units | Description |
|---|---|---|
| BAUD_RATE | bit per second | 设定的波特率 |
| PCLK_FREQ | HZ | clk的时钟频率 |
| PADDR_WIDTH | bit | 访问SPI内部FIFO的地址位宽 |
| PDATA_WIDTH | bit | 写入or读出的数据位宽 |
| FIFO_WRITE_WIDTH | bit | FIFO写深度 |
2. Design Flow
2.1. i2c_master
2.2. i2c_slave
2.3. i2c_cfg_reg
2.4. Test Bench
3. Verification
版权声明:本文为Starry__原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。