I2C 模块是用于同其他外设或单片机器件进行通信的串 行接口。这些外设可以是串行EEPROM、显示驱动器、
A/D 转换器等。
I2C 模块支持以下特性:
• 独立的主 / 从逻辑
• 7 位和 10 位器件地址
• I2C 协议中所定义的广播呼叫地址
• 时钟延长功能,为处理器响应从器件数据请求提供 延时
• 100 kHz 和 400 kHz 总线规范
• 可配置的地址掩码
• 多主机模式以防仲裁时报文丢失
• 总线转发器模式,允许作为从器件接收所有消息,
与地址无关
• 自动 SCL
图15-1 给出了此模块的框图。
15.1 在单主机环境下作为主器件进行通信
在主模式下发送报文的详细信息取决于用于与器件通信 的通信协议。通常,发送报文的步骤如下:
1. 在SDAx 和 SCLx 上发出一个启动条件。
2. 向从器件发送I2C 器件地址字节和写操作指示。
3. 等待并验证来自从器件的应答。
4. 向 从 器 件 发 送 第 一 个 数 据 字 节 (有 时 称 为 命 令)。
5. 等待并验证来自从器件的应答。
6. 向从器件发送串行存储器地址低字节。
7. 重复步骤4 和 5,直到发送完所有数据字节。
8. 在SDAx 和 SCLx 上发出一个重复启动条件。
9. 向从器件发送器件地址字节和读操作指示。
10. 等待并验证来自从器件的应答。
11. 使能主器件接收,以接收串行存储器数据。
12. 在数据字节接收结束时产生ACK或NACK条件。
13. 在 SDAx 和 SCLx 上产生一个停止条件。
注: 本数据手册总结了PIC24F 器件的功能。但 是不应把本手册当作无所不包的参考手册 来使用。更多信息,请参见《PIC24F 系列 参 考 手 册》的 “第
24 章 I
2C”
(DS39702A_CN)。
PIC24FJ256GB110 系列
DS39897B_CN 第 180 页
初稿
2009 Microchip Technology Inc.图
15-1: I
2C™ 框图
I2CxRCV
内部 数据总线
SCLx
SDAx
移位
匹配检测
I2CxADD
启动和停止 位检测 时钟
地址匹配
时钟 延长
I2CxTRN LSB 移位时钟
BRG 递减计数器 重载 控制
TCY/2 启动和停止
位产生
应答 产生 冲突 检测
I2CxCON I2CxSTAT
控制逻辑
读
LSB
写
读
I2CxBRG I2CxRSR
写
读 写
读
写
读
写
读 写
读 I2CxMSK
2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 181 页PIC24FJ256GB110 系列
15.2 设置作为总线主器件工作时的波特率
要计算波特率发生器的重载值,可使用公式15-1。
公式
15-1:
计算波特率重载值(1,2)15.3 从地址掩码
I2CxMSK 寄存器 (寄存器 15-3)将 7 位和 10 位寻址 模式下地址中的某些位指定为“无关位”。将I2CxMSK 寄存器中某个特定位置1(= 1),不论相应的地址位的 值是
0
还是1,工作在从模式下的模块都会作出响应。
例如,当将I2CxMSK 设置为
00100000
时,工作在从 模式下的模块将检测两个地址0000000
和0100000。
要 使 能 地 址 掩 码,必 须 通 过 将 IPMIEN 位
(I2CxCON<11>)清 零 来 禁 止 智 能 外 设 管 理 接 口
(Intelligent Peripheral Management Interface,
IPMI)。
表
15-1: I
2C™ 时钟速率
(1,2)表
15-2: I
2C™ 保留的地址
(1) I2CxBRG FCYFSCL
--- FCY
10 000 000, ,
--- –
1–
=
FSCL FCY
I2CxBRG 1 FCY
10 000 000, , ---+ ---+
---=
或
注
1: 基于 F
CY = FOSC/2 ;打盹模式和 PLL 被 禁止。2: 这些时钟速率值仅供参考。实际的时钟速
率会受到各种系统级参数影响。应在目标 应用中测量实际时钟速率。注: 新修改的I2C™ 协议使得表 15-2 中的地址 保留,而且在从模式下不会应答。这包括包 含任何这些地址的任何地址掩码设置。
必需的系统
F
SCLF
CYI2CxBRG 值
实际F
SCL(十进制) (十六进制)
100 kHz 16 MHz 157 9D 100 kHz
100 kHz 8 MHz 78 4E 100 kHz
100 kHz 4 MHz 39 27 99 kHz
400 kHz 16 MHz 37 25 404 kHz
400 kHz 8 MHz 18 12 404 kHz
400 kHz 4 MHz 9 9 385 kHz
400 kHz 2 MHz 4 4 385 kHz
1 MHz 16 MHz 13 D 1.026 MHz
1 MHz 8 MHz 6 6 1.026 MHz
1 MHz 4 MHz 3 3 0.909 MHz
注
1: 基于 F
CY = FOSC/2,打盹模式和 PLL 被禁止。2: 这些时钟速率值仅供参考。实际的时钟速率会受到各种系统级参数影响。应在目标应用中测量实际时钟速率。
从器件地址
R/W 位
说明0000 000 0
广播呼叫地址(2)0000 000 1
启动字节0000 001 x
Cbus 地址0000 010 x
保留0000 011 x
保留0000 1xx x
HS 模式主机码1111 1xx x
保留1111 0xx x
10 位从地址高字节(3)注
1: 这里所列的地址位将永远不会导致地址匹配,与地址掩码设置无关。
2: 只有 GCEN = 1
时才会应答地址。3: 与这些地址的匹配只会发生在 10 位寻址模式下的高字节中。
PIC24FJ256GB110 系列
DS39897B_CN 第 182 页
初稿
2009 Microchip Technology Inc.寄存器
15-1: I2CxCON:I2Cx 控制寄存器
R/W-0 U-0 R/W-0 R/W-1 HC R/W-0 R/W-0 R/W-0 R/W-0 I2CEN — I2CSIDL SCLREL IPMIEN A10M DISSLW SMEN
bit 15 bit 8
R/W-0 R/W-0 R/W-0 R/W-0, HC R/W-0, HC R/W-0, HC R/W-0, HC R/W-0, HC
GCEN STREN ACKDT ACKEN RCEN PEN RSEN SEN
bit 7 bit 0
图注: HC = 硬件清零位
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15
I2CEN:I2Cx 使能位
1 = 使能 I2Cx 模块,并将 SDAx 和 SCLx 引脚配置为串口引脚 0 = 禁止 I2Cx 模块。所有 I
2C 引脚由端口功能控制。bit 14 未实现:读为
0
bit 13
I2CSIDL:空闲模式停止位
1 = 当器件进入空闲模式时,模块停止工作 0 = 在空闲模式下模块继续工作
bit 12
SCLREL:SCLx 释放控制位 (作为 I
2C 从器件工作时)1 = 释放 SCLx 时钟
0 = 保持 SCLx 时钟为低电平 (时钟延长)
如果STREN = 1:
该位可读可写 (即软件可以写入
0
来启动时钟延长或写入1
来释放时钟)。在从器件发送开始时由硬件清零。
在从器件接收结束时由硬件清零。
如果STREN = 0:
该位可读且可被置1 (即软件只能写入
1
来释放时钟)。在从器件发送开始时由硬件清零。
bit 11
IPMIEN:智能外设管理接口 (IPMI)使能位 1 = 使能 IPMI 支持模式;应答所有地址 0 = 禁止 IPMI 模式
bit 10
A10M:10 位从器件寻址位 1 = I2CxADD 为 10 位从器件地址 0 = I2CxADD 为 7 位从器件地址
bit 9DISSLW:禁止斜率控制位
1 = 禁止斜率控制 0 = 使能斜率控制
bit 8
SMEN:SMBus 输入电平位
1 = 使能符合 SMBus 规范的 I/O 引脚门限值 0 = 禁止 SMBus 输入门限值
bit 7
GCEN:广播呼叫使能位 (作为 I
2C 从器件工作时)1 = 允许在 I2CxRSR 接收到广播呼叫地址时产生中断 (已使能模块接收)
0 = 禁止广播呼叫地址
bit 6
STREN:SCLx 时钟延长使能位 (作为 I
2C 从器件工作时)与SCLREL 位配合使用。
1 = 使能软件或接收时钟延长
0 = 禁止软件或接收时钟延长
2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 183 页PIC24FJ256GB110 系列
bit 5
ACKDT:应答数据位 (作为 I
2C 主器件工作时。主器件接收期间适用。)当软件启动应答序列时将发送的值。
1 = 在应答时发送 NACK 0 = 在应答时发送 ACK
bit 4
ACKEN:应答序列使能位 (作为 I
2C 主器件工作时。主器件接收期间适用。)1 = 在SDAx和SCLx引脚上发出应答序列,并发送ACKDT数据位。在主器件应答序列结束时由硬件清零。
0 = 应答序列不在进行中
bit 3
RCEN:接收使能位 (作为 I
2C 主器件工作时)1 = 使能 I
2C 接收模式。在主器件接收完数据字节的第 8 位时由硬件清零。0 = 接收序列不在进行中
bit 2
PEN:停止条件使能位 (作为 I
2C 主器件工作时)1 = 在 SDAx 和 SCLx 引脚上发出停止条件。在主器件停止序列结束时由硬件清零。
0 = 停止条件不在进行中
bit 1
RSEN:重复启动条件使能位 (作为 I
2C 主器件工作时)1 = 在 SDAx 和 SCLx 引脚上发出重复启动条件。在主器件重复启动序列结束时由硬件清零。
0 = 重复启动条件不在进行中
bit 0
SEN:启动条件使能位 (作为 I
2C 主器件工作时)1 = 在 SDAx 和 SCLx 引脚上发出启动条件。在主器件启动序列结束时由硬件清零。
0 = 启动条件不在进行中
寄存器
15-1: I2CxCON:I2Cx 控制寄存器 (续)
PIC24FJ256GB110 系列
DS39897B_CN 第 184 页
初稿
2009 Microchip Technology Inc.寄存器
15-2: I2CxSTAT:I2Cx 状态寄存器
R-0, HSC R-0, HSC U-0 U-0 U-0 R/C-0, HS R-0, HSC R-0, HSC
ACKSTAT TRSTAT — — — BCL GCSTAT ADD10
bit 15 bit 8
R/C-0, HS R/C-0, HS R-0, HSC R/C-0, HSC R/C-0, HSC R-0, HSC R-0, HSC R-0, HSC
IWCOL I2COV D/A P S R/W RBF TBF
bit 7 bit 0
图注: C = 可清零位 HS = 硬件置 1 位 HCS = 硬件置 1/ 清零位 R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15
ACKSTAT:应答状态位 1 = 最后检测到 NACK 0 = 最后检测到 ACK
在应答结束时由硬件置1 或清零。
bit 14
TRSTAT:发送状态位 (作为 I
2C 主器件工作时。适用于主器件发送操作。)1 = 主器件正在进行发送 (8 位 + ACK)
0 = 主器件不在进行发送
在主器件发送开始时由硬件置1。在从器件应答结束时由硬件清零。
bit 13-11 未实现:读为
0
bit 10
BCL:主器件总线冲突检测位 1 = 主器件工作期间检测到了总线冲突 0 = 未发生冲突
检测到总线冲突时由硬件置1。
bit 9
GCSTAT:广播呼叫状态位 1 = 接收到广播呼叫地址 0 = 未接收到广播呼叫地址
当地址与广播呼叫地址匹配时由硬件置1。当检测到停止条件时由硬件清零。
bit 8
ADD10:10 位地址状态位 1 = 10 位地址匹配 0 = 10 位地址不匹配
当与匹配的10 位地址的第 2 个字节匹配时由硬件置 1。当检测到停止条件时由硬件清零。
bit 7
IWCOL:写冲突检测位
1 = 因为 I
2C 模块忙,尝试写 I2CxTRN 寄存器失败0 = 未发生冲突
当总线忙时写I2CxTRN 会使硬件将该位置 1 (由软件清零)。
bit 6
I2COV:接收溢出标志位
1 = 当 I2CxRCV 寄存器仍然保存原先的字节时接收到了新字节 0 = 未溢出
尝试将数据从I2CxRSR 传输到 I2CxRCV 时由硬件置 1 (由软件清零)。
bit 5
D/A:数据 / 地址位 (作为 I
2C 从器件工作时)1 = 表示上次接收的字节为数据 0 = 表示上次接收的字节为器件地址
器件地址匹配时由硬件清零。写入I2CxTRN 或接收到从器件字节时由硬件置 1。
2009 Microchip Technology Inc.
初稿
DS39897B_CN 第 185 页PIC24FJ256GB110 系列
bit 4
P:停止位
1 = 表示上一次检测到停止位 0 = 上一次未检测到停止位
当检测到启动、重复启动或停止条件时由硬件置1 或清零。
bit 3
S:启动位
1 = 表示上一次检测到启动 (或重复启动)位 0 = 上一次未检测到启动位
当检测到启动、重复启动或停止条件时由硬件置1 或清零。
bit 2
R/W:读 / 写信息位 (作为 I
2C 从器件工作时)1 = 读——表示数据自从器件输出 0 = 写——表示数据输入到从器件
接收到I2C 器件地址字节后由硬件置 1 或清零。
bit 1
RBF:接收缓冲器满状态位 1 = 接收完成, I2CxRCV 为满 0 = 接收未完成, I2CxRCV 为空
用接收到的字节写I2CxRCV 时由硬件置 1。用软件读 I2CxRCV 时由硬件清零。
bit 0
TBF:发送缓冲器满状态位
1 = 发送正在进行中, I2CxTRN 为满 0 = 发送完成, I2CxTRN 为空
用软件写I2CxTRN 时由硬件置 1。数据发送完成时由硬件清零。
寄存器
15-2: I2CxSTAT:I2Cx 状态寄存器 (续)
PIC24FJ256GB110 系列
DS39897B_CN 第 186 页
初稿
2009 Microchip Technology Inc.寄存器
15-3: I2CxMSK:I2Cx 从模式地址掩码寄存器
U-0 U-0 U-0 U-0 U-0 U-0 R/W-0 R/W-0
— — — — — — AMSK9 AMSK8
bit 15 bit 8
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 AMSK7 AMSK6 AMSK5 AMSK4 AMSK3 AMSK2 AMSK1 AMSK0
bit 7 bit 0
图注:
R = 可读位 W = 可写位 U = 未实现位,读为 0
-n = POR 时的值 1 = 置 1 0 = 清零 x = 未知
bit 15-10 未实现:读为
0
bit 9-0
AMSK9:AMSK0:地址中 bit x 的掩码选择位
1 = 使能输入报文的地址中 bit x 的掩码;在此位置上不需要位匹配
0 = 禁止地址中 bit x 的掩码;在此位置上需要位匹配
2009 Microchip Technology Inc.