• 沒有找到結果。

I 2 C™

在文檔中 的 64/80/100 引脚 (頁 181-189)

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

2

C”

(DS39702A_CN)。

PIC24FJ256GB110 系列

DS39897B_CN 第 180 页

初稿

 2009 Microchip Technology Inc.

15-1: I

2

C™ 框图

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

2

C™ 时钟速率

(1,2)

15-2: I

2

C™ 保留的地址

(1) I2CxBRG FCY

FSCL

--- FCY

10 000 000, ,

--- – 

  1–

=

FSCL FCY

I2CxBRG 1 FCY

10 000 000, , ---+ ---+

---=

1: 基于 F

CY = FOSC/2 ;打盹模式和 PLL 被 禁止。

2: 这些时钟速率值仅供参考。实际的时钟速

率会受到各种系统级参数影响。应在目标 应用中测量实际时钟速率。

注: 新修改的I2C™ 协议使得表 15-2 中的地址 保留,而且在从模式下不会应答。这包括包 含任何这些地址的任何地址掩码设置。

必需的系统

F

SCL

F

CY

I2CxBRG 值

实际

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 9

DISSLW:禁止斜率控制位

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.

初稿

DS39897B_CN 第 187 页

PIC24FJ256GB110 系列

在文檔中 的 64/80/100 引脚 (頁 181-189)