基于APB与I2C的多主多从架构设计

《 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

AddressRegister NameField(bits)TypeField NameDefault ValueDescription
32'h0000_0000 32'h0000_0010 32'h0000_0020 32'h0000_0030 32'h0000_0040 32'h0000_0050Transmitter 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_0054Receiver 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_0058Work Mode Config Register[1:0]RW工作模式控制2‘d02'd0表示休眠状态不进行工作,2'd1表示作为slave,2'd2表示作为master,2‘d3保留
[3:2]RW波特率控制2‘d02'd0表示100kbps、2'd1表示400kbps、2'd2表示1Mbps、2'd3表示3.4Mbps
[31:4]RWReserved'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

SignalDirectionWidth(bits)Description
prstninput1复位信号
pclkinput1用户时钟
paddrinputPADDR_WIDTHAPB地址
pwriteinput11表示写,0表示读
pselinput1选通
penableinput1APB使能
pwdatainputPDATA_WIDTH写数据
prdatainputPDATA_WIDTH读数据
preadyoutput1usart准备标志
sclinout1I2C串行时钟总线
sdainout1I2C串行数据总线

之后是参数描述

ParameterUnitsDescription
BAUD_RATEbit per second设定的波特率
PCLK_FREQHZclk的时钟频率
PADDR_WIDTHbit访问SPI内部FIFO的地址位宽
PDATA_WIDTHbit写入or读出的数据位宽
FIFO_WRITE_WIDTHbitFIFO写深度

i2c_reg

GroupSignalDirectionWidth(bits)Description
APB_intfprstninput1复位信号
pclkinput1用户时钟
paddrinputPADDR_WIDTHAPB地址
pwriteinput11表示写,0表示读
pselinput1选通
penableinput1APB使能
pwdatainputPDATA_WIDTH写数据
prdatainputPDATA_WIDTH读数据
preadyoutput1usart准备标志
reg_intftx_fifo_rd_eninput1TX FIFO 读使能
tx_fifo_rdataoutput32TX FIFO 读数据
tx_fifo_emptyoutput1TX FIFO 空标志
rx_fifo_wr_eninput1RX FIFO 写使能
rx_fifo_wdatainput32RX FIFO 写数据
rx_fifo_fulloutput1RX FIFO 满标志
work_modeoutput32工作模式配置寄存器

之后是参数描述

ParameterUnitsDescription
BAUD_RATEbit per second设定的波特率
PCLK_FREQHZclk的时钟频率
PADDR_WIDTHbit访问SPI内部FIFO的地址位宽
PDATA_WIDTHbit写入or读出的数据位宽
FIFO_WRITE_WIDTHbitFIFO写深度

i2c_trans

SignalDirectionWidth(bits)Description
prstninput1复位信号
pclkinput1用户时钟
paddrinputPADDR_WIDTHAPB地址
pwriteinput11表示写,0表示读
pselinput1选通
penableinput1APB使能
pwdatainputPDATA_WIDTH写数据
prdatainputPDATA_WIDTH读数据
preadyoutput1usart准备标志
scloutput/input1I2C串行时钟总线,master为output、slave为input
sdainout1I2C串行数据总线

之后是参数描述

ParameterUnitsDescription
BAUD_RATEbit per second设定的波特率
PCLK_FREQHZclk的时钟频率
PADDR_WIDTHbit访问SPI内部FIFO的地址位宽
PDATA_WIDTHbit写入or读出的数据位宽
FIFO_WRITE_WIDTHbitFIFO写深度

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版权协议,转载请附上原文出处链接和本声明。