二、结构
I2C内核围绕四个主要模块构建;时钟发生器,字节命令控制器,位命令控制器和DataIO移位寄存器。所有其他模块用于接口或存储临时值。
2.1 时钟生成
时钟发生器产生一个内部4 * Fscl时钟使能信号,该信号触发位命令控制器中的所有同步元件。它还可以处理某些从机所需的时钟延长。
2.2 Byte控制器
字节命令控制器在字节级别处理I2C流量。它从命令寄存器中获取数据,并根据单个字节的传输将其转换为序列。例如,通过将命令寄存器中的START,STOP和READ位置1,字节命令控制器会生成一个序列,该序列导致产生START信号,从从设备读取一个字节以及产生一个字节。生成停止信号,它通过将每个字节操作划分为单独的位操作来执行此操作,然后将这些位操作发送到位命令控制器。
2.3 Bit 控制器
bit命令控制器通过控制SCL和SDA线来处理数据的实际传输以及START,Repeated START和STOP信号的特定电平的生成。字节命令控制器告诉位命令控制器必须执行哪个操作。对于单字节读取,位命令控制器接收8个单独的读取命令。每个位操作分为5个部分(空闲和A,B,C和D),除了STOP操作分为4个部分(空闲和A,B和C)。
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。
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
没有回复内容