IIC专题原理及应用篇(二)-FPGA常见问题社区-FPGA CPLD-ChipDebug

IIC专题原理及应用篇(二)

二、结构

I2C内核围绕四个主要模块构建;时钟发生器,字节命令控制器,位命令控制器和DataIO移位寄存器。所有其他模块用于接口或存储临时值。

 

图片[1]-IIC专题原理及应用篇(二)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

2.1 时钟生成

时钟发生器产生一个内部4 * Fscl时钟使能信号,该信号触发位命令控制器中的所有同步元件。它还可以处理某些从机所需的时钟延长。

 

2.2 Byte控制器

字节命令控制器在字节级别处理I2C流量。它从命令寄存器中获取数据,并根据单个字节的传输将其转换为序列。例如,通过将命令寄存器中的START,STOP和READ位置1,字节命令控制器会生成一个序列,该序列导致产生START信号,从从设备读取一个字节以及产生一个字节。生成停止信号,它通过将每个字节操作划分为单独的位操作来执行此操作,然后将这些位操作发送到位命令控制器。

 

图片[2]-IIC专题原理及应用篇(二)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

2.3 Bit 控制器

bit命令控制器通过控制SCL和SDA线来处理数据的实际传输以及START,Repeated START和STOP信号的特定电平的生成。字节命令控制器告诉位命令控制器必须执行哪个操作。对于单字节读取,位命令控制器接收8个单独的读取命令。每个位操作分为5个部分(空闲和A,B,C和D),除了STOP操作分为4个部分(空闲和A,B和C)。

 

图片[3]-IIC专题原理及应用篇(二)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

2.4 DataIO移位寄存器

DataIO移位寄存器包含与当前传输关联的数据。在读取操作期间,数据从SDA线移入。读取一个字节后,内容将复制到接收寄存器中。在写操作期间,发送寄存器的内容被复制到DataIO移位寄存器中,然后被发送到SDA线上。

 

三、例子

3.1 将1个字节的数据写入从机

 

从机地址= 0x51(b” 1010001”)

要写入的数据= 0xAC

 

I2C顺序:

1)生成启动命令

2)写入从机地址+写入位

3)从从机那里收到应答

4)写数据

5)从从机那里收到应答

6)生成停止命令

 

命令:

1)将0xA2(地址+写位)写入发送寄存器,将STA位置1,将WR位置1。-等待中断或TIP标志取反-

2)从状态寄存器中读取RxACK位,应为0。将0xAC写入发送寄存器,将STO位置1,将WR位置1。-等待中断或TIP标志取反-

3)从状态寄存器读取RxACK位,应为0。

 

图片[4]-IIC专题原理及应用篇(二)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

3.2 从I2C存储设备中读取一个byte

 

从机地址= 0x4E

要读取的存储器位置= 0x20

 

I2C顺序:

1)产生启动信号

2)写入从机地址+写入位

3)从从机那里收到应答

4)写内存地址

5)从从机那里收到应答

6)产生重复的启动信号

7)写入从机地址+读取位

8)从从机那里收到应答

9)从从机读取字节

10)向从机写入无应答(NACK),指示传输结束

11)产生停止信号

 

命令:

1)将0x9C(地址+写位)写入发送寄存器,将STA位置1,将WR位置1。-等待中断或TIP标志取反-

2)从状态寄存器中读取RxACK位,应为0。将0x20写入发送寄存器,将WR位置1。-等待中断或TIP标志取反-

3)从状态寄存器读取RxACK位,应为0。将0x9D(地址+读位)写入发送寄存器,将STA位置1,将WR位置1。-等待中断或TIP标志取反-

4)将RD位置1,将ACK设置为1(NACK),将STO位置1

 

图片[5]-IIC专题原理及应用篇(二)-FPGA常见问题社区-FPGA CPLD-ChipDebug

 

 

请登录后发表评论

    没有回复内容