基本信息
文件名称:Texas Instruments 系列:Tiva C 系列 (基于 ARM Cortex-M4)_(11).TivaC系列I2C通信.docx
文件大小:24.98 KB
总页数:24 页
更新时间:2025-06-24
总字数:约1.52万字
文档摘要

PAGE1

PAGE1

TivaC系列I2C通信

1.I2C通信简介

I2C(Inter-IntegratedCircuit)是一种串行通信协议,用于连接多个低速外设设备。I2C协议使用两根线进行通信:SCL(SerialClockLine,串行时钟线)和SDA(SerialDataLine,串行数据线)。I2C协议支持多主控和多从设备,使得多个设备可以在同一总线上进行通信。I2C通信的特点包括:

低速:通常速度在100kbps到400kbps之间,高速模式下可以达到3.4Mbps。

简单:仅使用两根线进行通信,简化了硬件设计。

多设备:支持多主控和多从设备,最多可以连接128个设备。

双向:数据可以在主控和从设备之间双向传输。

1.1I2C通信协议

I2C协议的基本通信过程包括:

启动信号:主控发送启动信号,表示开始一次通信。启动信号是SCL线为高电平时,SDA线从高电平变为低电平。

地址帧:主控发送从设备的7位或10位地址,地址帧的最后一位是读写位(0表示写,1表示读)。

应答位:从设备接收到地址帧后,发送一个应答位(ACK),表示已经接收到地址。

数据帧:主控发送或接收数据,数据帧长度为8位。

应答位:每个数据帧之后,接收设备发送一个应答位(ACK),表示已经接收到数据。

停止信号:主控发送停止信号,表示结束一次通信。停止信号是SCL线为高电平时,SDA线从低电平变为高电平。

1.2I2C通信时序

I2C通信时序包括以下几个关键步骤:

启动信号:SCL为高电平时,SDA从高变为低。

地址帧:主控发送从设备地址和读写位。

应答位:从设备发送ACK。

数据帧:主控发送或接收数据。

应答位:每个数据帧后,接收设备发送ACK。

停止信号:SCL为高电平时,SDA从低变为高。

1.3I2C通信模式

I2C通信支持以下几种模式:

标准模式:100kbps

快速模式:400kbps

快速模式Plus:1Mbps

高速模式:3.4Mbps

2.TivaC系列中的I2C模块

TivaC系列单片机集成了I2C模块,支持I2C通信协议。TivaC系列的I2C模块具有以下几个特点:

多通道:支持多个I2C通道,方便连接多个外设。

主从模式:支持主控和从设备模式。

中断支持:可以通过中断来处理通信事件。

DMA支持:支持DMA(DirectMemoryAccess)传输,提高数据传输效率。

可配置:可以通过寄存器配置I2C模块的各种参数,如通信速度、地址等。

2.1I2C模块寄存器

TivaC系列的I2C模块包含多个寄存器,用于配置和控制I2C通信。主要寄存器包括:

I2CMasterControl(MCTL):控制I2C主控操作。

I2CMasterStatus(MSTAT):显示I2C主控状态。

I2CMasterData(MDR):读写I2C数据。

I2CMasterAddress(MSA):设置I2C从设备地址。

I2CMasterConfiguration(MCFG):配置I2C主控模式。

I2CMasterInterruptMask(MIM):设置I2C主控中断掩码。

I2CMasterInterruptStatus(MIS):显示I2C主控中断状态。

I2CMasterInterruptClear(MIC):清除I2C主控中断。

2.2I2C模块初始化

在使用I2C模块之前,需要进行初始化配置。以下是一个典型的I2C模块初始化过程:

使能I2C模块时钟:通过系统控制模块(SYSCTL)使能I2C模块的时钟。

配置GPIO:将I2C引脚配置为I2C功能。

配置I2C模块:设置通信速度、模式等参数。

使能I2C模块:使能I2C模块,开始通信。

2.3I2C模块配置示例

以下是一个示例代码,展示了如何在TivaC系列单片机上配置I2C模块:

#includeti/devices/tiva/driverlib/i2c.h

#includeti/devices/tiva/driverlib/sysctl.h

#includeti/devices/tiva/driverlib/gpio.h

#defineI2C_MASTER_BASEI2C0_BASE

#defineI2C_MASTER_PERIPHSYSCTL_PERIPH_I2C0

#defineI2C_MASTER_PORT_BASEGPIO_PORTB_BASE

#defineI2C_MASTER_PORT_PERIPHSYSCTL_PERIPH_GPIOB

#defineI2C_MASTER_SCL_PINGPIO_