I2C 协议如何工作

How does I2C Protocol work

我访问了一些链接并寻找了一些用于 I2C 编程的示例程序。我想为 I2C 协议编写自己的代码。假设 DS1307 RTC 和 LCD 连接到 8051。我正在使用 Keil 软件编写 C 程序。对我来说编写整个 I2C 程序非常困难,所以我尝试将程序分成小部分:

我了解模块 1,但我正在寻求帮助以了解模块 2。因此,我再次希望将模块 2 分成几个小部分。

如何将模块 2 分成小部分以便于理解? module2 中应该有多少个函数?

模块 2 本质上是 I2C driver 使用 8051 端口的位转换。 I2C 协议遵循一个序列。它由启动序列启动,由停止序列停止。你可以有不同的功能。通信由主机启动,每个从机都有一个地址。所以在模块 2 中,您将编写以下所有函数。

例如,I2 读取序列如下

I2C_Start();  // set I2C start sequence
I2C_Send(slave_address|1); Send I2C slave address in read mode
I2C_read_ACK(); //master will know slave got data 
while(number_of bytes){
I2C_Read();
I2C_send_ACK();
number_of bytes--;
}
I2C_NAK();    //slave need to know so it will not prepare next data.
I2C_Stop();   //stop communication

再次写入从机将有以下步骤

I2C_Start();  // set I2C start sequence
I2C_Send(slave_address); Send I2C slave address in write mode
I2C_read_ACK(); //master will know slave got data 
while(number_of bytes){
I2C_Write();
I2C_read_ACK(); //master will know slave got data 
number_of bytes--;
}
I2C_Stop(); //stop communication

我也看到了 driver https://circuitdigest.com/microcontroller-projects/digital-clock-using-8051-microcontroller

官方 I2C 协议在这里

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwici4Ocn6jVAhUIwlQKHV_zAJ8QFggoMAA&url=https%3A%2F%2Fwww.nxp.com%2Fdocuments%2Fuser_manual%2FUM10204.pdf&usg=AFQjCNHgNi6wOD4MjIDsnT0DXTYLS_-gPQ