1
摘要
本篇应用笔记主要介绍 HC32F460 系列芯片的集成电路总线(Inter-Integrated Curcuit, I2C)模块,并通过展示对 E2PROM 读写样例代码简要说明如何使用 I2C 模块。
2
I2C 简介
I2C 协议为 Philips 公司提出的一种双线制串行通信协议,支持半双工数据通信,已经广泛应用于电子电路产品中。常见的采用 I2C 通信协议的设备有 LCD 显示屏驱动器、存储器E2PROM、音频 CODEC 等等。
SMBus 总线基于 I2C 协议进行优化,为系统和电源控制相关的管理任务提供控制总线,因应用于控制系统,所以 SMBus 与 I2C 协议相比更注重于通信过程中的实时响应。
3
HC32F460 系列的 I2C
HC32F460 系列的集成电路总线(I2C)模块支持 I2C 标准协议,还可配置为支持 SMBus Ver2.0 总线协议。本系列芯片拥有 3 个独立的 I2C 外设模块,I2C1~I2C3。
I2C 模块基本功能如下:
Ÿ
支持多主多从
Ÿ
支持标准模式100Kbps,快速模式400Kbps。
Ÿ
可以设定 2 个从机地址,可以设定 7 位地址格式和 10 位地址格式,能检测到广播呼叫地址。
Ÿ
I2C 协议握手功能、仲裁功能、SCL 时钟同步功能。
Ÿ
输入信号数字滤波及模拟滤波功能
Ÿ
2种复位方式
Ÿ
4种中断和事件输出
Ÿ
可实现 DMA 方式通信
针对 SMBus 总线模式可支持功能如下:
Ÿ
数据传输速度支持 10Kbps~100Kbps
Ÿ
SCL 电平超时测量
Ÿ
快速 ACK/NACK
3.1 系统框图
I2C 模块挂载于芯片外设总线 APB4,采用外设时钟 PCLK3 进行分频产生波特率时钟,单个通道 I2C 模块系统框图。
模块内部为数据端口 SDA 和时钟端口 SCL 提供输出控制和输入滤波功能;数据输出时,输出寄存器 I2CDTR 通过移位寄存器 I2CDSR 传送数据;数据输入时,输入寄存器 I2CDRR 从移位寄存器 I2CDSR 中得到输入数据;模块内还包含 ACK 控制单元、仲裁单元、波特率控制单元、超时控制单元、中断控制单元与发送接收控制单元一起实现 I2C 通信功能。
3.2
硬件连接
本系列 I2C 模块支持多主多从的总线协议,总线的上拉电阻阻值由系统设计决定。
芯片 I2C 功能引脚资源包含 3 个通道的 SDA 和 SCL 端口,本系列芯片的 I2C 端口可以分配在功能组内任意端口。端口配置原理及方法请参考本系列芯片数据手册的引脚配置及功能章节,也可以参考厂商提供样例和驱动库进行配置。
3.3
I2C 协议
I2C 总线协议请参考本系列芯片用户手册章节 27.3 的详细介绍,包括 I2C 协议的开始条件,地址传送,数据传送,停止条件,重新开始条件,SCL 时钟同步,仲裁、握手等。
3.4
I2C 模块可配置功能
以下 3.4.1~3.4.4 为 I2C 模块的基本配置功能:
3.4.1 滤波功能配置
接收数据滤波功能分为数字滤波功能和模拟滤波功能。
I2C 模块的滤波功能默认为禁止状态,需要使用时请在 I2C 功能使能前通过寄存器 I2C_FLTR进行配置。
3.4.2 波特率配置
根据数字滤波功能和 I2C 波特率分频时钟设置的不同.
3.4.3 从机地址配置
本系列芯片有个两个从机地址寄存器 I2C_SLR0 和 I2C_SLR1 可以同时支持两个从机地址,可以分别支持 7 位或 10 位从机地址。
3.4.4 广播地址匹配功能
通过寄存器标志位 I2C_CR1.GCEN 可以使能广播地址匹配功能,使能后从机的 I2C 设备可以接收识别到地址为 0 的广播命令并将 I2C_SR.GCF 标志位置位。
3.4.5 SMBus 主机地址匹配使能
SMBus 模式使能在从机接收模式时可以配置主机地址配置使能、报警响应地址匹配使能、默认地址匹配使能。详细说明请参考本系列芯片用户手册 “27.3.2 地址匹配”章节。
3.4.6 SMBus 超时测量
SMBus 的超时测量包括 SCL 电平超时测量、从机的超时测量、主机的超时测量。本 I2C 模块硬件支持 SCL 电平超时测量功能,通过 TMOUTEN、HTMOUT 和 LTMOUT 寄存器可以配置超时功能,详细说明请参考本系列芯片用户手册 “27.3.2.3 SMBus 主机地址匹配”章节。从机超时测量和主机超时测量功能可以通过软件实现。
3.4.7 快速 ACK 配置
在 SMBus 接收模式时,需要在第 8 个时钟下降沿将 SCL 保持低电平,待 CPU 处理完数据错误码(PEC)的寄存后,根据计算结果软件写入 ACK 位来解除 SCL 低电平状态。可以通过I2C_CR3.FACKEN 标志位使能此功能。
4
样例代码
4.1
代码介绍
用户可根据上述的工作流程编写自己的代码来学习验证该模块,也可以直接通过华大半导体的网站导到设备驱动库(Device Driver Library, DDL)的样例代码并使用其中的 I2C 的样例进行验证。
4.2 代码运行
用户可以通过华大半导体的网站导到 HC32F460 的 DDL 的样例代码(i2c_at24c02),并配合评估用板(EV-HC32F460-LQFP100-050-V1.1)运行相关代码学习使用 i2C 模块。
5
总结
以上章节简要介绍了 HC32F460 系列的 I2C,说明了 I2C 模块的寄存器及初始化操作流程,并且演示了如何使用样例代码,在实际开发中用户可以根据自己的需要配置和使用 I2C 模块。