5.5 本章总结¶
I2C是一种同步通讯接口,通讯数据信号SDA和同步时钟信号SCL始终保持同步,两者之间的时空关系是I2C接口时序。
I2C是嵌入式系统中的一种真正的共享总线,仅使用2种信号即可实现上百种传感器、执行器、显示器等外设扩展。I2C总线的这种性能得益于I2C接口所采用的“线与”电路结构, 以及I2C接口时序和数据传输协议。I2C通讯接口采用主从模式,支持一主多从和多主多从的灵活结构。一主多从的系统结构中,要求每一个从机都有惟一的7位从机地址, 主机通过寻址某个指定的从机以实现一对一半双工通讯。多主多从的系统结构中,为实现多个主机同时抢占I2C总线需要每一个I2C主机单元都支持总线仲裁, 发起抢占总线的主机根据总线仲裁结果确定是否抢占成功或失败,抢占失败的主机将进入等待,所以多主多从的系统结构的通讯接口操作存在不确定性和非实时性。 本章内容中仅涉及最常用的一主多从结构。当单个I2C通讯总线上挂接多种从机时,逻辑电平的电压匹配非常重要,适合于I2C通讯接口电平匹配必须是双向的, 我们在本章提供一种简易型电平转换电路(Level Shifter)单元,也可以采用专用的电平转换单元,专用的电平转换单元具有通讯速度高、漏电流小等特点。
嵌入式系统MCU的片上I2C通讯接口具有两种工作模式:主机模式和从机模式。主机模式的I2C接口可用于扩展系统内的各种I2C接口显示器、传感器、执行器等, 从机模式下的I2C接口允许MCU作为另一个主控制器的子系统,两个MCU之间可以使用I2C总线实现半双工通讯。
本章中,我们分别以主机和从机两种模式讨论I2C通讯接口的软件封装,仍采用分层抽象的方法,将I2C通讯的软件接口分割为硬件层、硬件抽象层、中间层和用户层。 其中,硬件层的接口软件由半导体厂商实现,主要是访问MCU片上I2C功能单元相关的寄存器;硬件抽象层是基于硬件层的软件接口为中间层分别提供I2C主机和从机两种模式的I2C协议实现的软件接口; 中间层是针对特定的嵌入式系统内I2C总线上各个I2C功能组件的软件接口,基于硬件抽象层的I2C通讯协议接口访问I2C功能组件上的寄存器等; 特定嵌入式系统的用户层直接调用BSP中的相关I2C功能组件接口,无需了解I2C协议和I2C功能组件内寄存器等细节即可使用I2C功能组件。
基于I2C总线的原型系统是较为流行的一种模块化的、快速的原型搭建系统,“如何将各种功能单元设计成具有标准的I2C接口的模块”是此类系统的设计关键, 本章给出I2C接口应用设计的电路模型,以及主机和从机模式的软件实现。
通过本章学习,我们了解I2C通讯接口的原理、协议、软硬件应用的设计方法等。I2C通讯接口是现代MCU标配的片上功能单元,也是最常用的嵌入式系统内各组件之间的互联总线。 本章内容属于嵌入式系统应用和开发的基础之一。
本章总结如下:
- 数字通讯相关的基础概念
- I2C通讯接口的“线与”电路、时序、协议、寻址方法、通讯流程、电平转换方法等
- MCU片上I2C功能单元工作在主机模式时,I2C接口软件的封装和实现
- MCU片上I2C功能单元工作在从机模式时,I2C接口的通讯流程和软件实现
- I2C总线的原型系统的模型和设计示例