Component - EZI2C Slave V1.61 Datasheet (Chinese).pdf

®
PSoC Creator™ 组件数据手册
EZI2C 从器件
1.61
特性
 行业标准 NXP ® I2C 总线接口
 仿真通用 I2C EEPROM 接口
 只需要两个引脚(SDA 和 SCL)与 I2C 总线连接
 50/100/400/1000 kbps 标准数据速率
 高级 API 只需少量用户编程
 支持使用独立存储器缓冲区对一个或两个地址进行解码
 存储器缓冲区提供可配置的读/写和只读区域
概述
EZI2C Slave 组件实现基于 I2C 寄存器的从器件。I2C 总线是 Philips® 开发的行业标准的两线硬件
接口。主控在 I2C 总线上发起所有通信,并为所有从器件提供时钟。EZI2C Slave 支持高达 1000
kbps 的标准数据速率,且与同一总线上的多个器件兼容。
EZI2C Slave 是 I2C 从器件的唯一实现,主控和从器件之间的所有通信都在 ISR(中断服务子程序)
中处理,不需要与主程序流交互。该接口表现为主控与从器件之间的共享存储器。一旦执行了
EZI2C_Start() 函数,则几乎不再需要与 API 交互。
何时使用 EZI2C Slave
在 I2C 从器件与 I2C 主控之间需要共享存储器模型时使用此组件。可以在代码中将 EZI2C Slave
缓冲区定义为任何变量、数组或结构,而无需考虑 I2C 协议。I2C 主控可以查看/修改此缓冲区中的
任何变量,这些变量是由 EZI2C_SetBuffer1() 或 EZI2C_SetBuffer2() 函数定义的。
Cypress Semiconductor Corporation
Document Number: 001-78995 Rev. **
•
198 Champion Court
•
San Jose, CA 95134-1709
• 408-943-2600
Revised:April 17, 2012
EZI2C Slave
®
PSoC Creator™ 组件数据手册
输入/输出连接
本节介绍 EZI2C Slave 的各种输入和输出连接。
sda – 输入/输出
串行数据 (SDA) 是 I2C 数据信号。这种双向数据信号用于传输或接收所有总线数据。
SCL– 输入/输出
串行时钟 (SCL) 是主控生成的 I2C 时钟。虽然从器件从不生成时钟信号,但是它可以将其保持在
低电平,使总线停顿,直到它准备发送数据或 NAK/ACK 最新数据或地址为止
原理图宏信息
组件目录中的默认 EZI2C Slave 是使用具有默认设置的 EZI2C Slave 组件的示意宏。EZI2C
Slave 组件连接到引脚组件,该组件配置为 SIO 对。
Page 2 of 19
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
元件参数
将 EZI2C 组件拖动到您的设计中,双击它可打开 Configure(配置)对话框。
EZI2C 组件提供下列参数。
Data rate(数据速率)
此参数用于设置 I2C 数据速率,速率支持高达 1000 kbps ;实际速率可能因可用时钟速度和分频器
范围而异。标准数据速率为 50、100(默认值)、400 和 1000 kbps。
Number of addresses(地址数)
此选项确定是识别 1 个(默认值)还是 2 个独立 I2C 从器件地址。如果识别两个地址,则将用软
件(而不是硬件)执行地址检测,因此 Enable wakeup from Sleep Mode(启用从睡眠模式
唤醒)选项不可用。
Primary slave address(主从器件地址)
这是主 I2C 从器件地址(默认值为 8)。可以按十进制或十六进制格式输入此值。对于十六进制,
在数字之前键入“0x”。此地址为右对齐的 7 位从器件地址,它不包括读/写位。
Document Number: 001-78995 Rev. **
Page 3 of 19
EZI2C Slave
®
PSoC Creator™ 组件数据手册
Secondary slave address(辅助从器件地址)
这是辅助 I2C 从器件地址(默认值为 9)。可以按十进制或十六进制格式输入此值。对于十六
进制,在数字之前键入“0x”。只有当地址数参数设置为 2 时,此辅助地址才有效。主地址和辅从器
件地址必须不同。此地址为右对齐的 7 位从器件地址,它不包括读/写位。
Sub-address size(辅助地址大小)
此选项确定可以访问的数据范围。可以选择 8 位(默认值)或 16 位辅助地址。如果使用 8 位地址
大小,则主控只能访问 0 到 255 之间的数据偏移。您还可以选择 16 位辅助地址大小。这将允许
I2C 主控在每个从器件地址访问最大达 65,535 字节的数据数组。
Pin connections(引脚连接)
此参数确定要用于 SDA 和 SCL 信号连接的引脚类型。此选项用于补充 Enable wakeup from
Sleep mode(启用从睡眠模式唤醒)选项,仅当在 Number of addresses(地址数)选项中选
择了单个 I2C 地址时才可用。此参数包含三个可选值:Any、I2C0 和 I2C1。默认值为 Any(任
意)。
Any(任意)表示一般用途 I/O (GPIO)。如果不需要 Enable wakeup from Sleep Mode(启用从
睡眠模式唤醒),则 SDA 和 SCL 使用 Any(任意)。如果需要 Enable wakeup from Sleep
Mode(启用从睡眠模式唤醒),则必须使用引脚对 I2C0(P12[4]、P12[5])或 I2C1(P12[0]、
P12[1]),这使您可以配置器件以便在 I2C 地址匹配时唤醒。
使能从睡眠模式唤醒
此参数允许当从器件地址匹配时从睡眠模式唤醒。默认情况下,禁用此选项。只有当选择单一 I2C
地址且 SDA 和 SCL 信号连接到 SIO 端口(引脚对 I2C0 或 I2C1)时,地址匹配时唤醒选项才有
效。仅 PSoC 3 Production 才支持 Enable wakeup from Sleep mode(启用从睡眠模式唤醒)。
时钟选择
时钟连接到系统总线时钟,用户不能更改。
Page 4 of 19
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
资源
该组件使用了 Fixed funciont I2C block(固定功能 I2C 模块)
数字模块
API 存储器(字节)
模式
datapaths
宏单元
状态寄存
器
控制寄存器
计数器 7
闪存
RAM
引脚
单地址解码(默认
值)
不占用
不占用
不占用
不占用
不占用
895
18
2
双地址解码
不占用
不占用
不占用
不占用
不占用
37
2
1620
(16 位辅助地址
大小)
应用程序编程接口
应用程序编程接口 (API) 子程序允许您使用软件配置组件。下表列出了每个函数的接口,并进行了
说明。以下各节将更详细地介绍每个函数。
默认情况下,PSoC Creator 将实例名称“EZI2C_1”分配给设计中的第一个组件实例。您可以将其
重命名为遵循标识符语法规则的任何唯一值。实例名称会成为每个全局函数名称、变量和常量符
号的前缀。为增加可读性,下表中使用了实例名称“EZI2C”。
函数
说明
2
2
2
2
EZI2C_Start()
启动对 I C 通信的响应。启用 I C 中断。
EZI2C_Stop()
停止对 I C 通信的响应。禁用 I C 中断。
EZI2C_EnableInt()
启用 I C 中断,这是大部分 I C 操作都需要的。
EZI2C_DisableInt()
禁用 I C 中断。EZI2C_Stop() API 自动执行此操作。
EZI2C_SetAddress1()
设置主 I C 地址。
EZI2C_GetAddress1()
返回主 I C 地址。
EZI2C_SetBuffer1();
设置主 I C 的缓冲区指针。
EZI2C_GetActivity(void)
获取组件活动状态。
EZI2C_Sleep()
停止 I C 操作,保存 I C 配置。禁用 I C 中断。
EZI2C_Wakeup()
恢复 I C 配置并启动 I C 操作。启用 I C 中断。
EZI2C_Init()
使用自定义程序提供的初始值来初始化 I C 寄存器。
EZI2C_Enable()
激活硬件,开始组件操作。
Document Number: 001-78995 Rev. **
2
2
2
2
2
2
2
2
2
2
2
2
2
Page 5 of 19
®
PSoC Creator™ 组件数据手册
EZI2C Slave
函数
说明
EZI2C_SaveConfig()
保存 EZI2C 组件的当前用户配置。
EZI2C_RestoreConfig()
恢复非保留 I C 寄存器。
2
可选次地址 API
只有当启用两个 I2C 地址时,这个命令才有效。
函数
说明
2
EZI2C_SetAddress2()
设置次 I C 地址。
EZI2C_GetAddress2()
返回次 I C 地址。
EZI2C_SetBuffer2();
设置次 I C 的缓冲区指针。
2
2
可选睡眠/唤醒模式
只有当使用单一地址、SCL 和 SDA 信号路由到 SIO 引脚且选择 Enable wakeup from Sleep
Mode(启用从睡眠模式唤醒)时,下列这些函数才可用。
函数
说明
2
EZI2C_SlaveSetSleepMode()
启用 EZI2C 睡眠地址解码并保存 I C 配置。禁用中断。
EZI2C_SlaveSetWakeMode()
禁用 EZI2C 睡眠地址解码,恢复 I C 配置,并启动 I C 操作。启用中断。
2
2
全局变量
在执行一般操作时,无需了解这些变量。
函数
EZI2C_initVar
说明
指示是否已初始化 EZI2C。该变量初始化为 0 并在第一次调用 EZI2C_Start() 时设置为 1。
这允许第一次调用 EZI2C_Start() 子程序后组件无需重新初始化便可重新启动。
如果需要重新初始化组件,该变量应当在调用 EZI2C_Start() 子程序之前设置为 0。另外,
可以通过调用 EZI2C_Init() 和 EZI2C_Enable() 函数来重新初始化 EZI2C。
2
EZI2C_dataPtrS1
存储公开给第一个从器件地址的 I C 主控的数据指针。
EZI2C_rwOffsetS1
存储用于读取和写入操作的偏移。它在第一个从器件地址的每个写入序列上设置。
EZI2C_rwIndexS1
存储要为第一个从器件地址读取或写入的下一个值的指针。
EZI2C_wrProtectS1
存储第一个从器件地址的只读数据的偏移。
EZI2C_bufSizeS1
存储公开给第一个从器件地址的 I C 主控的数据数组的大小。
Page 6 of 19
2
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
函数
说明
2
EZI2C_dataPtrS2
存储公开给第二个从器件地址的 I C 主控的数据指针。
EZI2C_rwOffsetS2
存储用于读取和写入操作的偏移。它在第二个从器件地址的每个写入序列上设置。
EZI2C_rwIndexS2
存储要为第二个从器件地址读取或写入的下一个值的指针。
EZI2C_wrProtectS2
存储第二个从器件地址的只读数据的偏移。
EZI2C_bufSizeS2
存储公开给第二个从器件地址的 I C 主控的数据数组的大小。
EZI2C_curState
存储 I C 状态机的当前状态。
EZI2C_curStatus
存储组件的当前状态。
2
2
void EZI2C_Start(void)
说明:
这是开始执行组件操作的首选方法。EZI2C_Start() 设置 initVar 变量,调用 EZI2C_Init()
2
函数,然后调用 EZI2C_Enable() 函数。它必须在 I C 总线操作之前执行。
在 EZI2C_Start() 调用 EZI2C_Enable() 之后,EZI2C_Enable() 会调用
2
EZI2C_EnableInt(),这会启用 I C 中断。
参数:
无
返回值:
无
副作用:
无
void EZI2C_Stop(void)
说明:
2
2
此函数禁用 I C 硬件并禁用 I C 中断。根据需要,禁用活动模式电源模板位或时钟关断。
2
PSoC 3:在器件锁定了 I C 总线时释放该总线,并将其设置为空闲状态。
参数:
无
返回值:
无
副作用:
无
void EZI2C_EnableInt(void)
2
说明:
此函数启用 I C 中断。大部分操作都需要中断。在调用 EZI2C_Start() API 时调用。
参数:
无
返回值:
无
副作用:
无
Document Number: 001-78995 Rev. **
Page 7 of 19
®
PSoC Creator™ 组件数据手册
EZI2C Slave
void EZI2C_DisableInt(void)
2
说明:
此函数禁用 I C 中断。通常不需要此函数,因为 EZI2C_Stop() 函数会禁用中断。
参数:
无
返回值:
无
副作用:
如果在运行 I C 的时候禁用 I C 中断,则 I C 总线可能会锁定。
2
2
2
void EZI2C_SetAddress1(uint8 address)
2
说明:
此函数设置主存储器缓冲区的 I C 地址。此值可以为 0 到 127 之间的任何值。
参数:
address:0 到 127 之间的 7 位从器件地址。此地址右对齐,不包括读/写位。
返回值:
无
副作用:
无
uint8 EZI2C_GetAddress1(void)
2
说明:
此函数返回主存储器缓冲区的 I C 从器件地址。
参数:
无
返回值:
通过 SetAddress1 或默认 I C 地址设置的同一 I C 从器件地址。
副作用:
无
2
2
void EZI2C_SetBuffer1(uint16 bufSize, uint16 rwBoundry, void * dataPtr)
2
说明:
此函数设置从器件数据的缓冲区指针、大小和读写区域。这是公开给 I C 主控的数据。
参数:
bufSize:缓冲区的大小(以字节为单位)。
rwBoundry:设置在缓冲区开头可写入的字节数。此值必须小于或等于缓冲区大小。位于偏移
rwBoundry 和更远位置处的数据是只读的。
dataPtr:数据缓冲区的指针
返回值:
无
副作用:
无
Page 8 of 19
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
uint8 EZI2C_GetActivity(void)
说明:
2
如果自从上次调用此函数后发生 I C 读取或写入循环,则此函数返回非零值。在此函数调用结
束时,活动标志将复位为零。
2
当读取时读写忙标志会清除,但是“BUSY”标志只由 I C Stop 清除。
参数:
如果检测到活动,则返回非零值。
返回值:
I C 活动的状态。
2
常量
副作用:
说明
EZI2C_STATUS_READ1
设置是否针对第一个地址检测读取序列。当读取状态时
清除。
EZI2C_STATUS_WRITE1
设置是否针对第一个地址检测写入序列。当读取状态时清
除。
EZI2C_STATUS_READ2
设置是否针对第二个地址检测读取序列(如果启用)。当读
取状态时清除。
EZI2C_STATUS_WRITE2
设置是否针对第二个地址检测写入序列(如果启用)。当读
取状态时清除。
EZI2C_STATUS_BUSY
当检测到启动时置位。当检测到停止时清除。
EZI2C_STATUS_ERR
当检测到 I C 硬件错误时置位。当读取状态时清除。
2
无
void EZI2C_SetAddress2(uint8 address)
2
说明:
此函数设置从存储器缓冲区的 I C 从器件地址。此值可以为 0 到 127 之间的任何值。只有当
2
在用户参数中选择了两个 I C 地址时,才提供此函数。
参数:
address:0 到 127 之间的 7 位从器件地址。此地址右对齐,不包括读/写位。
返回值:
无
副作用:
无
uint8 EZI2C_GetAddress2(void)
2
2
说明:
此函数设置辅助存储器缓冲区的 I C 从器件地址。只有当在用户参数中选择了两个 I C 地址
时,才提供此函数。
参数:
无
返回值:
通过 SetAddress2 或默认 I C 地址设置的同一 I C 从器件地址。
副作用:
无
2
Document Number: 001-78995 Rev. **
2
Page 9 of 19
®
PSoC Creator™ 组件数据手册
EZI2C Slave
void EZI2C_SetBuffer2(uint16 bufSize, uint16 rwBoundry, void * dataPtr)
2
2
说明:
此函数设置辅助从器件数据的缓冲区指针、大小和读写区域。这是公开给辅助 I C 地址的 I C
2
主控的数据。只有当在用户参数中选择了两个 I C 地址时,才提供此函数。
参数:
bufSize:公开给 I C 主控的缓冲区的大小。
2
2
rwBoundry:设置 I C 主控可读写的字节数。此值必须小于或等于缓冲区大小。位于偏移
rwBoundry 和更远位置处的数据是只读的。
2
dataPtr:用于 I C 数据缓冲区的数据数组或结构的指针。
返回值:
无
副作用:
无
void EZI2C_SlaveSetSleepMode(void)
说明:
这是选择 Enable wakeup from Sleep Mode(启用从睡眠模式唤醒)的情况下准备组件睡
2
2
眠的首选 API。此 API 使能 I C 睡眠地址解码。它将一直等待,直到所有 I C 流量在完成前
2
停止。所有后续的 I C 流量将被否认,直至该器件进入睡眠模式为止。
参数:
无
返回值:
无
副作用:
如果启用 Wake up from Sleep mode(启用从睡眠模式唤醒)选项(仅用于 PSoC 3 生产
2
芯片),将禁用 I C 中断。
void EZI2C_SlaveSetWakeMode(void)
说明:
这是将组件恢复为调用 EZI2C_SlaveSetSleepMode() 时的状态的首先 API。它禁用睡眠
EZI2C 从器件,并重新启用运行时 EZI2C。应当在从睡眠唤醒后立即调用。只有当使用单一
2
I C 地址时才提供此函数。
参数:
无
返回值:
无
副作用:
如果启用 Wake up from Sleep mode(启用从睡眠模式唤醒)选项(仅用于 PSoC 3 生产
2
芯片),将启用 I C 中断。
Page 10 of 19
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
void EZI2C_Sleep(void)
说明:
这是未选择从睡眠模式使能唤醒的情况下准备组件睡眠的首选 API。EZI2C_Sleep() API 保存
当前组件状态。然后它调用 EZI2C_Stop() 函数并调用 EZI2C_SaveConfig() 以保存硬件配
置。
在调用 CyPmSleep() 或 CyPmHibernate() 函数之前调用 EZI2C_Sleep() 函数。有关电源管
理函数的更多信息,请参考 PSoC Creator System Reference Guide(《系统参考指
南》)。
参数:
无
返回值:
无
副作用:
无
void EZI2C_Wakeup(void)
说明:
这是将组件恢复为调用 EZI2C_Sleep() 时的状态的首先 API。EZI2C_Wakeup() 函数调用
EZI2C _RestoreConfig() 函数来恢复硬件配置。如果在调用 EZI2C_Sleep() 函数之前启用组
件,EZI2C_Wakeup() 函数也将重新启用组件。
参数:
无
返回值:
无
副作用:
在 EZI2C_SaveConfig() 或 EZI2C_Sleep() 之前调用此函数会产生意外行为。
void EZI2C_Init(void)
说明:
此函数根据自定义程序 Configure(配置)对话框设置来初始化或恢复组件。不需要调用
EZI2C_Init(),因为 EZI2C_Start() API 将调用此函数,这是开始组件操作的首选方法。
参数:
无
返回值:
无
副作用:
所有寄存器都将根据定制器“配置”对话框设置为相应的值
void EZI2C_Enable(void)
说明:
此函数激活硬件并开始执行组件操作。不需要调用 EZI2C_Enable(),因为 EZI2C_Start()
2
API 将调用此函数,这是开始组件操作的首选方法。它还调用 EZI2C_EnableInt() 以启用 I C
中断。
参数:
无
返回值:
无
副作用:
无
Document Number: 001-78995 Rev. **
Page 11 of 19
®
PSoC Creator™ 组件数据手册
EZI2C Slave
void EZI2C_SaveConfig(void)
说明:
此函数会保存组件配置和非保留寄存器。它还保存 Configure(配置)对话框中定义的或通
过相应 API 修改的当前组件参数值。此函数由 EZI2C_Sleep() 函数调用。
参数:
无
返回值:
无
副作用:
无
void EZI2C_RestoreConfig(void)
说明:
此函数会恢复组件配置和非保留寄存器。它还将组件参数值恢复为在调用 EZI2C_Sleep() 函
数之前的值。
参数:
无
返回值:
无
副作用:
在 EZI2C_Sleep() 或 EZI2C_SaveConfig() 之前调用此函数会产生意外行为。
固件源代码示例
PSoC Creator 在 Find Example Project(查找示例项目)对话框中提供了许多包括原理图和示例
代码的示例项目。要获取特定组件的示例,请打开组件目录中的对话框或原理图中的组件实例。
要获取通用的示例,请打开开始页或 File(文件)菜单中的对话框。根据需要,使用对话框中的
Filter Options(筛选选项)可缩小可选项目的列表。
有关更多信息,请参考 PSoC Creator 帮助中的“查找示例项目”主题。
功能描述
此组件支持具有一个或两个 I2C 地址的 I2C 从器件设备。任一地址都可以访问 RAM、EEPROM
或闪存数据空间中定义的存储器缓冲区。EEPROM 和闪存存储器缓冲区是只读的,而 RAM 缓冲
区可以是读写的。这些地址右对齐。
由于 I2C 硬件是中断驱动的,因此在使用此组件时,必须启用全局中断。虽然此组件需要中断,
不过并不需要向 ISR(中断服务子程序)添加任何代码。模块独立于您的代码为所有中断(数据
传输)提供服务。为此接口分配的存储器缓冲区看上去类似于您的应用程序与 I2C 主控之间的简
单双端口存储器。
如果需要,可以通过在数据结构中定义信号和命令位置,在主控与从器件之间创建更高级别接口。
Page 12 of 19
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
存储器接口
对于 I2C 主控,该接口看上去非常类似于通用 I2C EEPROM。EZI2C 接口可以配置为简单变量、
数组或结构。在某种程度上,它通过 I2C 总线充当您的程序与 I2C 主控之间的一个或两个共享存储
器接口。该组件仅允许 I2C 主控访问指定存储器区域,阻止该区域外的任何读取或写入。例如,
如果主要从器件地址的缓冲区按下面的代码示例配置,则存储器中的缓冲区表示可以按图 1 所示
表示。
#define BUFFER_SIZE
#define BUFFER_RW_AREA_SIZE
(0x0Au)
(0x04u)
EZI2C_SetBuffer1(BUFFER_SIZE, BUFFER_RW_AREA_SIZE,(void *) ezi2cBuffer);
图 1. 公开给 I2C 主控的 EZI2C 缓冲区的存储器表示
RAM
0x00FF
Access type
Exposed Buffer
ezi2cBuffer[9]
ezi2cBuffer[8]
Read Only
ezi2cBuffer[7]
0x0016
ezi2cBuffer[6]
ezi2cBuffer[5]
ezi2cBuffer[4]
ezi2cBuffer[3]
0x000D
Read/Write
ezi2cBuffer[2]
ezi2cBuffer[1]
ezi2cBuffer[0]
0x0000
接口(I2C 主控)仅将结构视为字节数组,不能访问定义的区域外的任何存储器。通过使用上面的
示例结构,提供的 API 可将数据结构公开给 I2C 接口。
char ezi2cBuffer2[15u];
EZI2C_SetBuffer2(15u, 8u, (void *) ezi2cBuffer2);
对于不同架构,以不同字节顺序传输数据。字节顺序指单个 16、32 或 64 位字中的字节排序。
因此,当所传输数据的可单独寻址元素类型大于一个字节时,需要以特定字节顺序发送额外代码。
例如,CY_GET_REGXX()/ CY_SET_REGXX() 宏(XX 表示 16/24/32)可以用于匹配低位优先
顺序(与器件架构无关)。有关字节顺序的更多信息,请参见 System Reference Guide(《系统
参考指南》)的“寄存器访问”一节。
Document Number: 001-78995 Rev. **
Page 13 of 19
®
PSoC Creator™ 组件数据手册
EZI2C Slave
下面的简单示例显示仅公开一个整数(两个字节)。这两个字节都可由 I2C 主控读写。
uint16 ezi2cVariable1;
CY_SET_REG16(&ezi2cVariable1,0xABCD);
EZI2C_SetBuffer1(2u, 2u, (void *) (&ezi2cVariable1));
外部主控可视的接口
EZI2C Slave 组件支持读写区域的基本读写操作和只读区域的只读操作。两个 I2C 地址接口使用单
独偏移数据指针寻址的单独数据缓冲区。根据 Sub-address size(辅助地址大小)参数,主控将
偏移数据指针作为写入操作的第一个或前两个数据字节写入。在此讨论的其余部分,将重点介绍 8
位辅助地址大小。
图 2. 8 位和 16 位辅助地址大小(自上而下)
LSB
MSB
OFFSET DATA PTR
MSB
LSB MSB
LSB
OFFSET DATA PTR
对于写入操作,第一个数据字节始终是偏移数据指针(Sub-address size(辅助地址大小)的两
个字节 = 16)。偏移数据指针后的字节写入偏移数据指针指向的位置。第二个数据字节写入偏移
数据指针加一的位置,依此类推,直到写入完成。写入操作的长度仅受最大缓冲区读写区域大小
的限制。对于写入操作,必须始终提供偏移数据指针。
读取操作始终在最近写入操作提供的偏移数据指针处开始。像写入操作一样,每读取一个字节,
偏移数据指针都会递增。新的读取操作将不会从上一读取操作停止处继续。新的读取操作始终在
上一写入操作偏移数据指针指向的位置处开始读取数据。读取操作的长度仅受最大数据缓冲区大
小的限制。
通常,读取包含写入操作(该操作仅包含偏移数据指针,后跟重新启动(或停止/启动))和读取
操作。如果偏移数据指针像在重复读取相同数据时那样不需要更新,则第一次写入后不需要写入
操作。这可以通过允许读取操作彼此紧密跟随来极大提高读取操作速度。
Page 14 of 19
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
图 3. 将 (x+1) 字节写入 I2C 从器件
S SLAVE ADDR
R/W
A
DATA PTR
A
DATA[n]
from slave to master
A
DATA[n+1]
A
DATA[n+x]
A
P
A = acknowledge (SDA LOW)
A = not acknowledge (SDA HIGH)
S = START condition
P = STOP condition
from master to slave
例如,如果偏移数据指针设置为 4,则读取操作开始在位置 4 读取数据,并连续读取,直到达到
数据末尾或主机完成读取操作为止。无论执行一个还是多个读取操作,都是这样。偏移数据指针
在启动新写入操作之前不会更改。
如果 I2C 主控尝试跨过 EZI2C_SetBuffer1() 或 EZI2C_SetBuffer2() 函数指定的区域写入数据,则
该数据被丢弃,不会影响指定 RAM 区域内外的任何 RAM。不能在允许的范围外读取数据。在允
许范围外的任何主控读取请求都会导致返回无效数据。
图 4 说明了 8 位偏移数据指针的数据指针写入。
图 4. 设置从器件数据指针
S
SLAVE ADDR
R/
W
A
DATA PTR
A P
图 5 说明了 8 位偏移数据指针的读取操作。请记住,数据写入操作始终重新编写偏移数据指针。
图 5. 从 I2C 从器件读取 (x+1) 字节
S
SLAVE ADDR
R/
W
A
DATA PTR
A
DATA[n]
A
DATA[n+1]
A
DATA[x]
A P
在复位或加电时,将配置 EZI2C Slave 组件并提供 API,但是必须使用 EZI2C_Start() 函数明确启
用资源。
在 NXP ® 网站上提供的完整 I2C 规范中,以及通过参考器件数据表,可以获得 I2C 总线的详细说
明和实现。
数据连贯性
虽然数据缓冲区可以包含大于单字节的数据结构,但是主控读取或写入操作由多个单字节操作组
成。这可能会导致数据连贯性问题,因为没有机制可以确保多字节读取或写入将在接口两侧(主
控和从器件)同步。例如,考虑一个包含单一两字节整数的缓冲区。虽然主控每次读取两字节整
数的一个字节,但是从器件可能在主控读取整数的第一个字节 (LSB) 和要读取第二个字节 (MSB)
的时间内已更新了整个整数。主控读取的数据可能无效,因为 LSB 读取自原始数据,而 MSB 读
取自更新的值。
Document Number: 001-78995 Rev. **
Page 15 of 19
®
PSoC Creator™ 组件数据手册
EZI2C Slave
您必须在主控、从器件或二者上提供一个机制,以确保在另一方读取或写入数据时主控或从器件
不会进行更新。可以使用 EZI2C_GetActivity() 函数开发特定于应用的机制。
从睡眠模式唤醒
可以睡眠模式输入过程中修改(通过 CyPmSaveClocks() 函数)器件时钟配置(总线时钟频率)。
必须先恢复(通过 CyPmRestoreClocks() 函数)该配置,然后才能在活动模式下继续 I2C 操作。
为了满足这些要求,I2C 中断在 EZI2C_SlaveSetSleepMode() 中禁用,但在
EZI2C_SlaveSetWakeMode() 中启用。因此,当发生硬件地址匹配事件时,会通过将 SCL 线路保
持为低电平(时钟伸展过程)来暂停操作。
下面是启用 Enable wake up from Sleep mode(启用从睡眠模式唤醒)时的正确睡眠模式输入
过程:
/* 准备 EZI2C 以从睡眠模式唤醒 */
EZI2C_SlaveSetSleepMode();
/* 切换到睡眠模式 */
CyPmSaveClocks();
CyPmSleep(PM_SLEEP_TIME_NONE, PM_SLEEP_SRC_I2C);
CyPmRestoreClocks();
/* 准备 EZI2C 以在活动模式下工作 */
EZI2C_SlaveSetWakeMode();
外部电气连接
如图 6 所示,I2C 总线需要外部上拉电阻。上拉电阻 (RP) 取决于供电电压、时钟频率和总线
电容。将输出阶段的任何器件(主控或从器件)的最小灌电流设置为不小于 3 mA(在 VOLmax =
0.4 V 的条件下)。这会将 5-V 系统的最小上拉电阻值限制为大约 1.5 kΩ。RP 的最大值取决于总
线电容和时钟速度。对于总线电容为 150 pF 的 5-V 系统,上拉电阻不应大于 6 kΩ。有关更多信
息,请参见 NXP ® 网站 www.nxp.com 上的 I2C 总线规范。
图 6. 器件与 I2C 总线的连接
+VDD
pull-up
resistors
Rp
Rp
SDA (Serial Data Line)
SCL (Serial Clock Line)
Device 1
Page 16 of 19
Device 2
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
EZI2C Slave
注:从赛普拉斯或其获得分许可的其中一个联营公司处购买 I2C 组件,即可根据 Philips I2C 专利
权获得一份许可,以便在 I2C 系统中使用这些组件,但前提是该系统符合 Philips 定义的 I2C 标准
规范。自 2006 年 10 月 1 日起,飞利浦半导体就采用一个新的商标名称 - NXP
半导体。
中断服务子程序
中断服务子程序是组件代码本身使用的程序。请勿对其进行更改。
直流和交流电气特性
EZI2C 直流电规范
参数
说明
条件
模块电流消耗
最小值
典型值
最大值
单位
已使能,针对 100 kbps 进行配置
–
–
250
μA
已使能,针对 400 kbps 进行配置
–
–
260
μA
从睡眠模式唤醒
–
–
30
μA
最小值
典型值
最大值
单位
–
–
1
Mbps
EZI2C 交流电规范
参数
说明
条件
比特率
组件更改
本节介绍组件与以前版本相比的主要更改。
版本
1.61
更改说明
更改/影响原因
增强了在自定义程序中配置以及与 Enable
wakeup from Sleep Mode(启用从睡眠模式唤
醒)选项相关的选项的验证。
防止使用不支持的模式配置组件。
更新了针对 PSoC 3 器件的 EZI2C_Stop()
实现。
使 EZI2C_Stop() 释放(如果锁定)。
2
2
2
将默认 I C 地址更新为 8 和 9,以符合 I C 总线
规范要求。
根据 I C 总线规范保留以前使用的地址。
更新了组件调试器工具窗口支持。
增强了调试窗口支持。
Document Number: 001-78995 Rev. **
Page 17 of 19
®
PSoC Creator™ 组件数据手册
EZI2C Slave
版本
更改说明
通过向 .cyre 文件添加函数名称,增加了将每个
函数声明为 PSoC 3 的重新进入的可能性。
更改/影响原因
并非所有 API 都是真正可重入的。组件 API 源文件
中的注释指出了不能真正重入的函数。
需要此更改为采用安全方式使用(通过标志或关键节
防止并发调用)并且不是可重入函数消除编译器
警告。
1.60.b
数据手册校正
1.60.a
使用有关 Enable wakeup from Sleep mode(启
用从睡眠模式唤醒)与 Number of addresses(
地址数)选项之间的依赖关系的信息更新了“引脚
连接”一节。
说明该选项用于补充 Enable wakeup from Sleep
mode(启用从睡眠模式唤醒)选项,而且仅当在
Number of addresses(地址数)选项中选择了单个
2
I C 地址时才可用。
更新了图 2、3 和 5 以显示位字段。
可视性增强,
阐明了编写可移植代码(与 PSoC 器件架构无
关)的方法。
文档增强。
1.60
更改使用从器件启用位的方法:EZI2C_Stop() 不 用于实现 EZI2C_Start() - EZI2C_Stop() 再清除此位,此位的设置操作已从
EZI2C_Start() 和 EZI2C_Sleep() - EZI2C_Wakeup()
EZI2C_Enable() 移动到 EZI2C_Init()。现在是在 序列的正确结果。预计没有功能影响。
2
EZI2C_RestoreConfig() 函数中恢复 I C 配置寄
存器。
2
2
将自定义程序中的标签 I2C Bus Speed:(I2C 总
线速度:)替换为 Data Rate(数据速率)。向“
功能说明”中添加了“从睡眠模式唤醒”一节。
I C 总线规范命名和 I C/EZI2C 组件之间的一致性。
将自定义程序中的标签“I2C pins connected to
(连接到的 I2C 引脚)”替换为“Pin Connections
(引脚连接)”
修正了文本以便与要求一致。
将自定义程序中的标签“Enable wakeup from the
Sleep mode(启用从睡眠模式唤醒)”替换为
“Enable wakeup from Sleep mode(启用从睡眠
模式唤醒)”
修正了文本以便与要求一致。
更新了组件符号和目录放置名称:将“EZ I2C”重
命名为“EZI2C”。
修正了文本以便与要求一致。
解决了当全局变量在代码和 ISR 中使用时可能被
编译器优化的问题。
避免可能导致意外结果的优化问题。
向数据手册中添加了特性数据
对数据表进行了少量编辑和更新
1.50.a
将组件移动到组件目录的子文件夹中
1.50
更新了标准数据速率,最高可支持 1 Mbps。
Page 18 of 19
2
允许将 I C 总线速度设置为高达 1 Mbps。
Document Number: 001-78995 Rev. **
®
PSoC Creator™ 组件数据手册
版本
EZI2C Slave
更改说明
更改/影响原因
添加了 Keil 重入支持。
具有 Keil 编译器的 PSoC 3 支持从多个控制流进行
函数调用。
添加了睡眠/唤醒和初始化/启用 API。
用于支持低功耗模式并提供常用接口,以单独控制大
多数组件的初始化和启用。
添加了组件的 XML 说明。
这允许 PSoC Creator 提供一个机制来为此组件创建
新的调试器工具窗口。
添加了对 PSoC 3 量产器件的支持。
应用了必需的更改,以支持 PSoC 3 ES2 和生产器
件之间的硬件更改。
向组件目录添加了默认图示模板。
每个组件应当有一个图示模板。
2
修正了 EZI2C 的总线速度生成。以前它比应有的 正确的 I C 总线速度计算和生成。
速度大 4 倍。在源代码中添加了更多注释以描述
总线速度计算。
为 Microsoft Windows 7 优化了窗体高度。
在 Windows 7 中,在自定义程序启动后会立即出现
滚动条。
使用“将 0x 前缀用于十六进制”文本,为地址输入 用于告知用户十六进制输入的可能性。
框添加了工具提示。
1.20.a
将组件移动到组件目录中的子文件夹。
向组件中添加了信息,以说明它与芯片修订版的
兼容性。
1.20
如果组件在不兼容的芯片上使用,该工具将报告错误
/警告。如果发生此情况,请更新到支持您的目标器
件的修订版。
更新了“配置”对话框。
在原理图中将数字端口更改为引脚连接
© 赛普拉斯半导体公司,2012。此处所包含的信息可能会随时更改,恕不另行通知。除赛普拉斯产品的内嵌电路之外,赛普拉斯半导体公司不对任何其他电路的使用承担任何责任。也不根据专利
或其他权利以明示或暗示的方式授予任何许可。除非与赛普拉斯签订明确的书面协议,否则赛普拉斯产品不保证能够用于或适用于医疗、生命支持、救生、关键控制或安全应用领域。此外,对于
可能发生运转异常和故障并对用户造成严重伤害的生命支持系统,赛普拉斯不授权将其产品用作此类系统的关键组件。若将赛普拉斯产品用于生命支持系统中,则表示制造商将承担因此类使用而
招致的所有风险,并确保赛普拉斯免于因此而受到任何指控。
PSoC® 是赛普拉斯半导体公司的注册商标,PSoC Creator 和 Programmable System-on-Chip 是赛普拉斯半导体公司的商标。此处引用的所有其他商标或注册商标归其各自所有者所有。
所有源代码(软件和/或固件)均归赛普拉斯半导体公司(赛普拉斯)所有,并受全球专利法规(美国和美国以外的专利法规)、美国版权法以及国际条约规定的保护和约束。赛普拉斯据此向获许
可者授予适用于个人的、非独占性、不可转让的许可,用以复制、使用、修改、创建赛普拉斯源代码的派生作品、编译赛普拉斯源代码和派生作品,并且其目的只能是创建自定义软件和/或固件,
以支持获许可者仅将其获得的产品依照适用协议规定的方式与赛普拉斯集成电路配合使用。除上述指定的用途之外,未经赛普拉斯的明确书面许可,不得对此类源代码进行任何复制、修改、转换、
编译或演示。
免责声明:赛普拉斯不针对此材料提供任何类型的明示或暗示保证,包括(但不仅限于)针对特定用途的适销性和适用性的暗示保证。赛普拉斯保留在不做出通知的情况下对此处所述材料进行更
改的权利。赛普拉斯不对此处所述之任何产品或电路的应用或使用承担任何责任。对于可能发生运转异常和故障并对用户造成严重伤害的生命支持系统,赛普拉斯不授权将其产品用作此类系统的
关键组件。若将赛普拉斯产品用于生命支持系统中,则表示制造商将承担因此类使用而招致的所有风险,并确保赛普拉斯免于因此而受到任何指控。
产品使用可能受适用的赛普拉斯软件许可协议限制。
Document Number: 001-78995 Rev. **
Page 19 of 19