文章目录
概述
-
硬件I2C:基于单片机的I2C外设,让I2C外设帮助程序员完成I2C通信的时序控制,实现I2C通信,这种方式称之为硬件I2C。
-
软件I2C:直接基于某两个普通引脚,用GPIO外设来模拟I2C通信的时许,实现I2C通信过程,这种方式称之为软件I2C
两种方式的特点
- 硬件I2C:
| 优势 | 不足 |
|---|---|
| 通信速率快,如果硬件I2C实现I2C通信,可以实现快速模式,400kHz的时钟线频率的通信速率,理论最大速率是44.44KB/s | I2C外设使用很繁琐,实现通信的过程也很麻烦(相较于USART来说);另外需要使用固定的引脚,引脚使用不灵活 |
硬件I2C因外有外设的支持,所以也可以使用中断,这是软件I2C不具备的
- 软件I2C:
| 优势 | 不足 |
|---|---|
| 不使用固定引脚,可以选择任意两个普通IO引脚可实现I2C通信,软件I2C更加灵活 | 没有I2C外设的支持,单凭GPIO模拟实现通信时序,通信速率较慢,基本上链标准模式的通信速率都达不到(100kHZ)。 |
软件I2C为了避免软件模拟过程中的通信失败,需要加一些必要的时延来确保电平的稳定,或重组的时间进行数据发送接收
总的来讲,如果需要更快的的速率或者需要中断处理可以选择硬件I2C;而希望对引脚有更灵活的操作,就选择软件I2C。
两种方式的实现
- 软件I2C,基于任意两个普通IO模拟I2C通信的时序,这个时候,I2C通信的每一个小的过程,小步骤,都需要程序员代码来完成,所以需要程序员手动编写提供一个一个的时许控制函数。
比如:
-
发送其实信号
-
发送停止信号
-
主机发送1Byte数据给从机
...
...
所以如果采用软件I2C,那么需要手动编写一个软件I2C模块,来实现一个个手动控制I2C时序的函数
编写玩这些时序控制函数以后,按照时序图,依照顺序调用这些时序控制函数,这样就实现I2C通信的时序结构,实现了I2C通信
-
如果是基于单片机的I2C外设,硬件实现I2C通信
那么这些时序控制函数,就有ST公司提供的SPL库函数来实现
程序只需调用对应的时序函数,即可实现硬件I2C通信