PSoCCreatorComponentDatasheet赛普拉斯半导体公司198ChampionCourtSanJose,CA95134-1709408-943-2600DocumentNumber:001-89662Rev.
*A修订时间October25,2016性能SMBus从器件模式PMBus从器件模式SMBALERT#引脚支持25ms超时固定功能(FF)和UDB实现可配置SM/PM总线指令概述系统管理总线(SMBus)和电源管理总线(PMBus)从器件组件提供了一种简单的方式来使用其上运行的SMBus或PMBus协议将I2C物理层接口添加至PSoC3或PSoC5LP设计中.
SMBus是一个双线接口,包括可与系统主机进行通信的各种系统管理芯片.
它将I2C当作为物理层使用.
SMBus从器件组件实现了大多数的SMBus从器件规范,同时提供用于配置从器件参数的选项.
此从器件可使用提供的API与SMBus主控进行通信.
PMBus协议是更为通用的SMBus协议的特定实现.
使用PMBus,此组件显示所有可能的PMBus指令,并允许选择哪些指令与您的应用程序相关联.
何时使用SM总线和PM总线从器件此组件可用于需要SMBus或PMBus从器件通信接口的设计中.
此组件处理硬件中的大量物理层请求.
此固件处理协议和存储器缓冲区管理;它还管理I2C中的数据传送.
SM总线和PM总线从器件2.
20SM总线和PM总线从器件PSoCCreatorComponentDatasheet页2/36DocumentNumber:001-89662Rev.
*A输入/输出连接本节介绍SMBus从器件的各种输入和输出连接.
I/O列表中的星号(*)表示I/O可能在某种SARADC配置下隐藏.
时钟—输入时钟输入应用作为I2CSCL/SDA低电平停滞超时计时器的时钟源.
当Implementation(实现)参数设置为UDB时,它需要时钟提供16倍过采样.
当I2CImplementation(实现)参数设置为UDB时,时钟输入可用.
数据速率时钟10kbps160kHz50kbps800kHz100kbps1.
6MHz400kbps6.
4MHz1000kbps16MHz复位—输入UDBI2C的硬件复位.
如果高电平复位引脚保持在逻辑高电平状态,则I2C模块将处于复位状态,并且通过I2C进行的通信会停止.
SDA和SCL应强制为高电平.
这仅适用于硬件复位.
而软件必须使用Stop()和Start()API进行单独复位.
sda(SMBDAT)—输入/输出串行数据(SDA)是I2C数据信号.
这种双向数据信号用于传输或接收所有总线数据.
应该将连接至sda的引脚配置为开漏驱动低电平(Open-Drain-Drives-Low).
如果您在自定义程序中选择了"ExternalI/OOption",单个sda双向信号将由单独的输入和输出(sda_o和sda_i)替换.
在某些应用程序需要使能多个I2C总线的多路复用时,这是必要的.
scl(SMBCLK)—输入/输出串行时钟(SCL)是主控生成的I2C时钟.
虽然从器件从不会生成时钟信号,但它可使时钟保持在低电平状态,并使总线停顿,直至它准备发送数据或确认/否认最新数据或地址为止.
应该将连接至scl的引脚配置为开漏驱动低电平(Open-Drain-Drives-Low).
如果您在自定义程序中选择了"ExternalI/OOption",单个scl双向信号将由单独的输入和输出(sdl_o和sdl_i)替换.
在某些应用程序需要使能多个I2C总线的多路复用时,这是必要的.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页3/36smbalert(SMBALERT#)—输出警报是可选SMBus定义的SMBALERT#引脚.
可以选择使能此信号.
警报引脚可通过后文介绍的API进行设置/解除.
应该将连接至smbalert的引脚配置为开漏驱动低电平(Open-Drain-Drives-Low).
原理图宏信息默认情况下,PSoCCreator组件目录包括SM/PM总线从器件组件的原理图宏实现.
这些宏包括已经连接和配置的引脚以及定义数据速率的内部配置的时钟值.
原理图宏使用配置为使用固定功能I2C模块和硬件地址解址的I2C从器件组件.
SM总线从器件宏此宏提供了SM/PM总线从器件组件在SM总线模式下的正确配置.
连接至终端SCL和SDA的引脚被配置为双向,且Drive(驱动)模式被设置为开漏驱动低电平(Open-Drain-Drives-Low).
此组件定义数据速率为100kHz.
PM总线从器件宏此宏提供了SM/PM总线从器件组件在PM总线模式下的正确配置.
连接至终端SCL和SDA的引脚被配置为双向,且Drive(驱动)模式被设置为开漏驱动低电平(Open-Drain-Drives-Low).
此组件将数据速率定义为400kHz.
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页4/36DocumentNumber:001-89662Rev.
*A组件参数将一个SM/PM总线从器件组件拖放到您的设计上,并双击以打开Configure对话框.
默认情况下,Configure对话框最初显示"General"选项卡.
General(常规)选项卡General选项卡提供用于配置SM/PM总线的一般设置的选项.
有以下参数可用.
Export/ImportConfiguration(导出/导入配置)Export/ImportConfiguration(导出/导入配置)允许您将自定义程序设置保存和恢复到外部文件中.
它允许快速加载预设的配置文件和保留自定义设置.
Mode(模式)Mode参数将此组件的模式选择为SMBus从器件模式或PMBus从器件模式.
如果选择了SMBus从器件模式,则将禁用PMBusCommands选项卡.
Mode还将确定可用的数据速率.
在PMBus从器件模式中,只有两个选项:100和400kHz.
在SMBus从器件模式中,还有额外的10和50kHz选项.
此参数的默认设置为SMBus从器件模式.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页5/36DataRate(数据速率)DataRate参数用于选择I2C数据速率.
可用选项取决于SM/PMBusMode选择.
PMBus从器件模式允许DataRate值为100kHz和400kHz.
SMBus从器件模式提供10kHz、50kHz、100kHz和400kHz选项.
DataRate参数的默认值为100kHz.
Slaveaddress(从器件地址)Slaveaddress参数确定此器件的I2C地址(7位格式).
输入的值是十进制或十六进(如果最前面是"0x").
自定义程序验证此地址以确保它不会与SMBus从器件保留列表上任何地址相冲突.
Slaveaddress的默认值为默认值:0x20.
SMBALERT通过SMBALERT框,您可以为主机通知配置可选SMBALERT#输出引脚.
如果选择EnableSMBALERT#pin,该引脚将当作为组件符号上的输出显示.
主机Auto/Manual按钮确定在主机查询警报响应地址(SetSmbAlertMode()API的GUI表示)处的器件后,SMBALERT#pin是否会自动解除.
此参数的默认值设置为EnabledAuto.
PagedCommands(分页指令)此参数框配置PMBusPAGE指令.
Maximumpage参数确定分页指令的阵列大小.
所有分页指令共享此阵列大小.
默认值设置为8页.
有效范围为1到32.
SMBus框SMBus框配置可选SMBus功能.
它仅在SMBus从器件模式下显示.
Enablereceivesthebyteprotocol复选框使能/禁用对SMBus接收字节协议的支持.
如果未选中,任何接收字节数据操作都将被视为总线错误.
如果已选中,此组件将调用SMBus_GetReceiveByteResponse()API确定接收字节请求的响应字节.
SupportPAGECommand复选框允许您在SMBusSlave模式下访问PAGE指令.
SupportQUERYCommand复选框允许您在SMBusSlave模式下访问QUERY指令.
如果使能了PAGE或QUERY指令,则这些指令将被添加至CustomCommands选项卡上的指令列表中.
这些指令的属性是基于PMBus规范的,但也可以对指令代码进行完全的自定义.
此框的默认值为:Enablereceivesbyteprotocol未选中、SupportPAGECommand已启用、CommandCode=0x00、SupportQUERYcommand已启用、CommandCode=0x1A.
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页6/36DocumentNumber:001-89662Rev.
*APMBusCommands(PM总线指令)选项卡PMBusCommands选项卡在此组件的Mode(模式)设置为PMBusSlave时可用.
此选项卡显示PMBus规范中的定义指令的完整列表.
预先填充的信息包括指令名称、其数字指令代码以及指令的类型(即SMBus协议).
您可以启用/禁用您希望此组件的实例处理的指令.
名称、代码和类型字段都是只读字段.
此选项卡中的可用参数概述如下.
Format(格式)Format参数指定此指令的数字格式.
此组件在指定对QUERY指令的响应时使用此格式.
QUERY指令中的可选格式值有Linear(线性)、Signed(有符号)、Direct(直接号)、Unsigned(无符号)和VIDMode(VID模式).
此字段仅用于QUERY指令目的,因为计算机并不执行任何实际的数字转换.
Size(大小)对于模块和进程调用类型的指令,您可以编辑Size字段以指定数据元素的大小.
此大小不包括SMBus协议附加到模块传输的起始位置的大小/计数字节.
仅可针对模块或进程调用指令编辑此字段.
对于所有其他类型,Size字段来源于PMBus规范.
默认值为16.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页7/36Read/WriteConfig(读/写配置)针对每条指令,选择此指令是否通过ReadConfig和WriteConfig参数可读和/或可写.
为每条指令选择None(无)、Auto(自动)或Manual(手动).
None说明此操作被禁用(即将只读指令的WriteConfig设置为None).
"Auto"(自动)模式命令完全由此器件处理.
它们在寄存器存储区与I2C传输缓冲区之间传输,同时不会出现用户固件干扰或通知.
"Manual"(手动)命令被添加至数据操作队列,必须由用户固件进行处理.
这些参数的默认值为"Manual".
注意:由于写与读之间可能的不对称以及进程调用协议的复杂性,针对使用此协议的指令不得选择自动模式.
Paged(分页)Paged复选框说明此指令是否分页(即索引).
针对被指定为分页的指令,此组件将自动在寄存器存储区中为此指令生成阵列.
此阵列的大小取决于MaximumPage参数.
针对Auto(自动)读写,此组件将基于当前的PMBus页面自动索引至分页参数的正确阵列编号(由上一个PAGE指令选定).
此参数的默认设置为未选中.
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页8/36DocumentNumber:001-89662Rev.
*ACustomCommands(自定义指令)选项卡此选项卡允许您修改并自定义CommandName(指令名称)、Code(代码)和Type(类型)字段.
CommandName(指令名称)这是用户为此指令指定的名称.
允许的字符为A-Z(全部大写)、0-9和下划线"_".
最大长度为24个字节.
第一个字符不得为数字.
不允许指令名称重复(包括重复标准的PMBus指令名称的自定义指令名称).
CommandName默认为空白.
CommandCode(指令代码)这是此指令的数字代码.
它是十六进制值,限于两个字符(0-9、ssA-F).
不允许重复的指令代码.
这包括与使能的PMBus指令相冲突的代码.
CommandCode默认为空白.
Type(类型)Type指定针对此指令使用的SMBus传输协议/数据大小.
可选值为SendByte(发送字节)、Read/WriteByte(读/写字节)、Read/WriteWord(读/写字)、Read/WriteBlock(读/写模PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页9/36块)、ProcessCall(进程调用)和BlockProcessCall(模块进程调用).
它默认设置为Read/WriteByte.
Format(格式)Format参数指定此指令的数字格式.
此组件在指定对QUERY指令的响应时使用此格式.
QUERY指令中的可选格式值有Linear(线性)、Signed(有符号)、Direct(直接号)、Unsigned(无符号)和VIDMode(VID模式).
此字段仅用于QUERY指令目的,因为计算机并不执行任何实际的数字转换.
Size(大小)对于模块和进程调用类型的指令,您可以编辑Size字段以指定数据元素的大小.
此大小不包括SMBus协议附加到模块传输的起始位置的大小/计数字节.
仅可针对模块或进程调用指令编辑此字段.
对于所有其他类型,Size字段来源于PMBus规范.
默认值为16.
Paged(分页)Paged复选框说明此指令是否分页(即索引).
针对被指定为分页的指令,此组件将自动在寄存器存储区中为此指令生成阵列.
此阵列的大小取决于Pages参数.
针对Auto(自动)读写,此组件将基于当前的PMBus页面自动索引至分页参数的正确阵列编号(由上一个PAGE指令选定).
此参数的默认设置为未选中.
分页参数的数量默认情况下,分页参数的数量是指定在General选项卡上的分页总数.
将该参数应用于特殊指令时,用户可以选择减小它.
该参数的最小值为1.
最大值为分页的总数.
未选中Paged复选框时,该参数将以灰色显示.
Read/WriteConfig(读/写配置)针对每条指令,选择此指令是否通过ReadConfig和WriteConfig参数可读和/或可写.
为每条指令选择None(无)、Auto(自动)或Manual(手动).
None说明此操作被禁用(即将只读指令的WriteConfig设置为None).
"Auto"(自动)模式命令完全由此器件处理.
它们在寄存器存储区与I2C传输缓冲区之间传输,同时不会出现用户固件干扰或通知.
"Manual"(手动)命令被添加至数据操作队列,必须由用户固件进行处理.
这些参数的默认值为"Manual".
注意:由于写与读之间可能的不对称以及进程调用协议的复杂性,针对使用此协议的指令不得选择自动模式.
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页10/36DocumentNumber:001-89662Rev.
*AI2CConfiguration(I2C配置)选项卡此选项卡允许配置I2C硬件.
Implementation(实现)此参数确定I2C硬件是使用FixedFunction还是UDB实现.
默认模式设置为UDB.
Addressdecode(地址解码)通过此参数,您可以选择软件地址解码或硬件地址解码.
对于提供了足够的API并且只需一个从器件地址的大部分应用程序来说,将首选硬件地址解码.
而对于希望修改源代码以检测多个从器件地址或10位地址的应用程序而言,则必须使用软件地址检测.
Hardware(硬件)是此参数的默认设置.
如果使能硬件地址解码,该模块会自动不响应不属于自己的地址,而无需CPU干预.
它会在收到正确地址后自动中断CPU的运行,并将SCL线保持为低电平,直至CPU干预为止.
Pins(引脚)此参数可确定用于SDA和SCL信号连接的引脚类型.
此参数包含三个可选值:Any、I2C0和I2C1.
默认值为"Any".
"Any"表示通用I/O(GPIO或SIO).
UDBclocksource(UDB时钟源)该参数允许您针对数据速率生成在内部配置的时钟和外部配置的时钟之间进行选择.
考虑到16倍过采样,当设置为InternalClock(内部时钟)时,PSoCCreator将基于DataRate参数计算和PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页11/36配置所需时钟频率.
在ExternalClock(外部时钟)模式下,组件不控制数据速率而是基于用户连接的时钟源显示实际速率.
如果将此参数设置为InternalClock(内部时钟),则符号上将不显示时钟输入.
您可以为内部时钟输入所需容差值.
时钟容差可指定为百分比.
默认范围为-5%到+50%.
EnableUDBslavefixedplacement(使能UDB从器件固定放置)EnableUDBslavefixedplacement参数允许您选择一个固定组件放置,以提供高于无限制放置下的组件性能.
当设置此参数后,全部组件资源都将固定在器件的右上角.
此参数可控制连接至组件的引脚分配.
引脚分配的选择并非组件性能的决定因素.
此选项仅在Implementation设置为UDB时才有效.
默认情况下,禁用此选项.
此组件的固定放置状态消除了路由可变性.
此外,还可以在一个完全空白的设计中按照与非固定放置设计相同的方式继续运行固定放置.
ExternalIOBuffer(外部IO缓冲区)此参数允许内部I2C总线复用.
内部OE缓冲区已被移除,双向scl和sda终端已被单独的输入(sda_i和scl_i)和输出(sda_o和scl_o)替换.
应用程序编程接口(API)路由允许您使用软件配置此组件.
下表列出每个函数的接口,并进行了说明.
以下各节将更详细地介绍每个函数.
应用程序编程接口应用程序编程接口(API)函数允许用户在运行时使用软件配置组件.
下表列出每个函数的接口,并进行了说明.
以下各节将更详细地介绍每个函数.
默认情况下,PSoCCreator将实例名称"SMBusSlave_1"分配给提供的设计中的第一个组件实例.
您可以将其重新命名为任何一个符合标识符语法规则的值.
实例名称会成为每个全局函数名称、变量和常量符号的前缀.
为增加可读性,下表中使用了实例名称"SMBusSlave".
注意:一些组件API功能被用于组件中断服务子程序中,因此,在使用Keil构建时,编译器可能会引起编译器警告提示.
为了避免这种情况,将这些函数纳入到了".
cyre"文件中.
函数说明SMBusSlave_Start()初始化并使能SMBus组件.
使能I2C中断后,该组件可响应SMBus通信.
SMBusSlave_Stop()停止对SMBus通信的响应.
同时禁用中断.
SMBusSlave_EnableInt()使能I2C中断.
SMBusSlave_DisableInt()禁用I2C中断.
SMBusSlave_Init()使用自定义程序提供的初始值来初始化I2C寄存器.
SMBusSlave_Enable()激活I2C硬件.
不使能正常操作需要的I2C中断.
SMBusSlave_SetAddress()设置I2C从器件地址.
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页12/36DocumentNumber:001-89662Rev.
*A函数说明SMBusSlave_SetAlertResponseAddress()设置I2C从器件地址,在此地址中当处于警报响应地址模式时,此器件将进行响应.
SMBusSlave_GetNextTransaction()将一个指针返回至数据操作队列中的下一个数据操作记录.
如果此队列为空,此函数将返回NULL.
SMBusSlave_GetTransactionCount()返回数据操作队列中的数据操作记录的数量.
SMBusSlave_CompleteTransaction()促使此组件完成此队列最前面的当前待处理数据操作.
SMBusSlave_SetSmbAlert()声明或解除SMBALERT#smbalert引脚.
SMBusSlave_SetSmbAlertMode()确定此组件如何响应SMBus主控针对警报响应地址的读取.
SMBusSlave_HandleSmbAlertResponse()当主机响应警报响应地址且SMBALERT模式设置为FIRMWARE_MODE时,将被此组件调用.
SMBusSlave_GetReceiveByteResponse()当I2C中断服务子程序检测到"接收字节"协议请求时,将被其调用以确定响应字节.
SMBusSlave_HandleBusError()当出现总线协议错误时,将被此组件调用.
SMBusSlave_StoreUserAll()将RAM寄存器存储区保存至闪存中的用户寄存器存储区.
SMBusSlave_RestoreUserAll()验证用户寄存器存储区的CRC字段,并将用户寄存器存储区的内容复制到RAM寄存器存储区中.
SMBusSlave_EraseUserAll()通过调用该函数,用户可以擦除闪存中的用户存储区.
SMBusSlave_RestoreDefaultAll()验证默认寄存器存储区的签名字段,并将默认寄存器存储区的内容复制至RAM寄存器存储区中.
SMBusSlave_StoreComponentAll()调用此函数以使用当前PMBus设置更新系统中的其他组件的参数.
SMBusSlave_RestoreComponentAll()调用此函数以使用系统中的其他组件的当前配置参数更新PMBus工作寄存器存储区.
SMBusSlave_Lin11ToFloat()将参数"linear11"转换为浮点并将其返回.
SMBusSlave_FloatToLin11()使用参数"floatvar"(浮点编号)并将其转换为16位LINEAR11值(11位尾数+5位指数),同时将其返回.
SMBusSlave_Lin16ToFloat()将参数"linear16"转换为浮点并将其返回.
SMBusSlave_FloatToLin16()使用参数"floatvar"(浮点编号)并将其转换为16位LINEAR16值(16位尾数),同时将其返回.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页13/36全局变量函数说明SMBusSlave_initVar(static)initVar变量用于说明此组件的初始配置.
此变量前面加有组件名称,此处为SMBusSlave.
SMBusSlave_initVar变量被初始化为0,并在第一次调用SMBusSlaveStart()时被设置为1.
这可以实现组件初始化,同时无需重新初始化SMBusSlaveStart()路由中的所有后续调用.
当此器件经过睡眠周期时,需要重新初始化此组件.
因此,在执行睡眠SMBusSlaveSleep()时,此变量设置为0;并在SMBusSlaveWakeup()中执行的重新初始化期间进行设置.
voidSMBusSlave_Start(void)说明:这是开始执行组件操作的首选方法.
SMBusSlave_Start()调用SMBusSlave_Init()函数,然后调用SMBusSlave_Enable()函数.
您必须在执行I2C总线操作之前调用SMBusSlave_Start().
此API可使能I2C中断.
参数:无返回值:无副作用:无voidSMBusSlave_Stop(void)说明:此函数可禁用I2C硬件和中断.
如果I2C总线被器件锁定且被设为空闲状态,则它会将其释放.
参数:无返回值:无副作用:无voidSMBusSlave_EnableInt(void)说明:此函数可使能I2C中断.
参数:无返回值:无副作用:无SM总线和PM总线从器件PSoCCreatorComponentDatasheet页14/36DocumentNumber:001-89662Rev.
*AvoidSMBusSlave_DisableInt(void)说明:此函数可使能I2C中断.
通常情况下,在I2C_Stop()函数禁用中断后就不需要此函数了.
参数:无返回值:无副作用:如果在运行I2C的同时禁用I2C中断,则可能造成I2C总线锁定.
voidSMBusSlave_Init(void)说明:此函数根据配置窗口"Configure"对话框设置来初始化或恢复组件.
您无需调用SMBusSlave_Init(),因为SMBusSlave_Start()API会调用此函数,该函数是开始执行组件操作的首选方法.
参数:无返回值:无副作用:根据自定义程序"Configure"对话框中的内容,对所有寄存器进行设置.
voidSMBusSlave_Enable(void)说明:此函数激活硬件并开始执行组件操作.
您无需调用SMBusSlave_Enable(),因为SMBusSlave_Start()API会调用此函数,该函数是开始执行组件操作的首选方法.
如果要调用此API,则必须首先调用SMBusSlave_Start()或SMBusSlave_Init().
参数:无返回值:无副作用:无voidSMBusSlave_SetAddress(uint8address)说明:此函数可设置I2C从器件地址.
参数:uint8address:主设备的I2C从器件地址.
此值可以为0至127(0x00-0x7F)之间的任意地址.
此地址为右对齐的7位从器件地址,它不包括读/写位.
返回值:无副作用:无PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页15/36voidSMBusSlave_SetAlertResponseAddress(uint8address)说明:此函数设置I2C从器件地址,在此地址中当处于警报响应地址模式时,此器件将进行响应.
参数:uint8address:针对警报响应模式的I2C从器件地址.
此值可以为0至127(0x00-0x7F)之间的任意地址.
此地址为右对齐的7位从器件地址,它不包括读/写位.
返回值:无副作用:无TRANSACTION_STRUCT*SMBusSlave_GetNextTransaction(void)说明:此函数将一个指针返回至数据操作队列中的下一个数据操作记录中.
如果此队列为空,此函数将返回NULL.
此函数将仅返回手动读取和写入,因为此组件将处理队列中的任何自动数据操作.
如果是写入,服务于数据操作队列的用户固件负责将"有效负载"复制到寄存器存储区.
如果是读取,用户固件负责更新寄存器存储区中此指令的变量的内容.
如果是这两者,调用SMBusSlave_CompleteTransaction()以释放数据操作记录.
注意,对于读取数据操作,长度字段和有效负载字段不适于大多数的数据操作类型.
例外情况是进程调用,其中写入相中的字将被存储在有效负载字段中.
参数:无返回值:指向下一个数据操作记录的指针副作用:无uint8SMBusSlave_GetTransactionCount(void)说明:返回数据操作队列中的数据操作记录的数量.
参数:无返回值:uint8:数据操作队列中的记录数量副作用:无SM总线和PM总线从器件PSoCCreatorComponentDatasheet页16/36DocumentNumber:001-89662Rev.
*AvoidSMBusSlave_CompleteTransaction(void)说明:促使此组件完成此队列最前面的当前待处理数据操作.
用户固件数据操作处理程序在处理数据操作之后调用此函数.
这将提醒组件代码将与寄存器存储区中的待处理读取数据操作相关联的寄存器变量复制到I2C传输存储区中,以便于传输可以完成.
它还可加快队列.
必须针对读取和写入进行调用.
参数:无返回值:无副作用:无voidSMBusSlave_SetSmbAlert(uint8assert)说明:声明或解除SMBALERT#smbalert引脚.
只要声明了SMBALERT#,此组件就将响应主控针对警报响应地址的读取.
此响应将是此器件的主要从器件地址.
根据模式设置,此组件将自动解除SMBALERT#,调用SMBusSlave_HandleSmbAlertResponse()API,或不执行任何操作.
参数:uint8:声明函数值说明SMBusSlave_SMBALERT_DEASSERT解除smbalert引脚SMBusSlave_SMBALERT_ASSERT声明smbalert引脚返回值:无副作用:无PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页17/36voidSMBusSlave_SetSmbAlertMode(uint8alertMode)说明:此函数确定此组件如何响应SMBus主控针对警报响应地址的读取.
当设置了SMBALERT#时,SMBus主控可将读取传播至全局警报响应地址以确定共享总线上的哪个SMBus设备已设置SMBALERT#.
在自动模式下,一旦总线主控成功地READ警报响应地址,SMBALERT#将自动解除.
在手动模式下,此组件将调用APISMBusSlave_HandleSmbAlertResponse(),其中用户代码(在合并部分)负责解除SMBALERT#.
在DO_NOTHING模式中,此组件将不执行任何操作.
参数:uint8:alertMode,定义SMBALERT引脚模式的字节函数值说明SMBusSlave_DO_NOTHING不对SMBALERT#引脚执行任何操作SMBusSlave_AUTO_MODE自动解除SMBALERT#引脚SMBusSlave_FIRMWARE_MODE用户负责解除SMBALERT#引脚返回值:无副作用:无voidSMBusSlave_HandleSmbAlertResponse(void)说明:当主机响应警报响应地址且SMBALERT模式设置为FIRMWARE_MODE时,此API将被此组件调用.
此函数包含合并代码部分,在此部分中当主控响应后,用户插入要运行的代码.
例如,用户可能会更新状态寄存器并解除SMBALERT#引脚.
参数:无返回值:无副作用:无SM总线和PM总线从器件PSoCCreatorComponentDatasheet页18/36DocumentNumber:001-89662Rev.
*Auint8SMBusSlave_GetReceiveByteResponse(void)说明:当I2C中断服务子程序检测到"接收字节"协议请求时,此函数将被其调用以确定响应字节.
此函数包括合并代码部分,在此部分中用户可插入其代码以覆盖此函数的返回值-即0xFF.
此函数将在中断服务子程序上下文中进行调用.
因此,用户合并代码必须快速、无阻塞,且仅可调用重入函数.
参数:无返回值:uint8:用户指定的状态字节函数值说明SMBusSlave_RET_UNDEFINED默认返回状态副作用:无voidSMBusSlave_HandleBusError(uint8errorCode)说明:当出现总线协议错误时,此API将被此组件调用.
总线错误的示例有:无效的指令、数据下溢和时钟延展冲突.
此函数仅负责错误的后果,因为此组件将以确定的方式处理错误.
此函数主要用于通知用户固件已出现错误.
例如,在PMBus器件中,这会向用户固件提供在STATUS_CML寄存器中设置相关错误的机会.
参数:uint8errorCode:函数值说明SMBusSlave_ERR_READ_FLAG读取标志设置错误SMBusSlave_ERR_RD_TO_MANY_BYTES主机尝试读取大量字节SMBusSlave_ERR_WR_TO_MANY_BYTES主机尝试写入大量字节SMBusSlave_ERR_UNSUPORTED_CMD不支持接收的指令SMBusSlave_ERR_INVALID_DATA收到的数据无效SMBusSlave_ERR_TIMEOUT出现了总线复位超时SMBusSlave_ERR_WR_TO_FEW_BYTES主机尝试写入少量字节返回值:无副作用:无PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页19/36uint8SMBusSlave_StoreUserAll(char*flashRegs)说明:此函数将RAM寄存器存储区保存至闪存中的用户寄存器存储区.
寄存器存储区数据结构中的CRC字段将在保存之前进行重新计算和更新.
默认情况下,此函数不会向闪存执行任何存储.
相反,它包含合并区域,在此区域中用户可以执行将工作内存存储至闪存的算法.
参数:flashRegs:指向闪存中应存储工作内存(RAM)所在位置的指针.
返回值:uint8:以下标准返回状态之一函数值说明CYRET_SUCCESS成功完成操作CYRET_MEMORY出现内存问题副作用:无SM总线和PM总线从器件PSoCCreatorComponentDatasheet页20/36DocumentNumber:001-89662Rev.
*Auint8SMBusSlave_RestoreUserAll(char*flashRegs)说明:此函数验证用户寄存器存储区的CRC字段,并将用户寄存器存储区的内容复制到RAM寄存器存储区中.
默认情况下,此函数不会执行从闪存恢复寄存器存储区.
相反,它包含合并区域,在此区域中用户可以执行将数据恢复至工作内存(RAM)的算法.
参数:flashRegs:指向闪存中存储工作内存(RAM)所在位置的指针返回值:uint8:以下标准返回状态之一.
函数值说明CYRET_SUCCESSCRC匹配,因此工作内存更新用户寄存器存储器(Flash)中的内容CYRET_BAD_DATA数据已损坏.
CRC不匹配副作用:无uint8SMBusSlave_EraseUserAll(void)说明:通过调用该函数,用户可以擦除闪存中的用户存储区.
该函数含有合并区域,因此用户必须执行它自己的机制来擦除闪存中用户储存区的内容.
参数:无返回值:uint8:以下标准返回状态之一.
函数值说明CYRET_SUCCESS成功完成操作或用户定义的其他非成功状态.
副作用:无uint8SMBusSlave_RestoreDefaultAll(void)说明:此函数验证默认寄存器存储区的签名字段,并将默认寄存器存储区的内容复制至RAM寄存器存储区中.
参数:无返回值:uint8:以下标准返回状态之一.
函数值说明CYRET_SUCCESS成功完成操作CYRET_BAD_DATA数据已损坏.
CRC不匹配副作用:无PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页21/36uint8SMBusSlave_StoreComponentAll(void)说明:用户调用此函数以使用当前PMBus设置更新系统中的其他组件的参数.
因为此参数是非常特定于应用程序的,所以此函数几乎完全由合并部分组成.
组件提供的唯一一个固件是返回值变量(retval),它将被初始化为CYRET_SUCCESS且在此函数结束时被恢复.
此函数的其余部分必须由用户提供.
参数:无返回值:uint8:以下标准返回状态之一.
函数值说明CYRET_SUCCESS成功完成操作或用户定义的其他非成功状态.
副作用:无uint8SMBusSlave_RestoreComponentAll(void)说明:用户调用此函数以使用系统中的其他组件的当前配置参数更新PMBus工作寄存器存储区.
因为此参数是非常特定于应用程序的,所以此函数几乎完全由合并部分组成.
组件提供的唯一一个固件是返回值变量(retval),它将被初始化为CYRET_SUCCESS且在此函数结束时被恢复.
此函数的其余部分必须由用户提供.
参数:无返回值:uint8:以下标准返回状态之一.
函数值说明CYRET_SUCCESS成功完成操作或用户定义的其他非成功状态.
副作用:无floatSMBusSlave_Lin11ToFloat(uint16linear11)说明:此函数将参数"linear11"转换为浮点并将其返回.
参数:uint16linear11:使用LINEAR11格式的数字.
返回值:float:被转换为浮点的linear11参数副作用:无SM总线和PM总线从器件PSoCCreatorComponentDatasheet页22/36DocumentNumber:001-89662Rev.
*Auint16SMBusSlave_FloatToLin11(floatfloatvar)说明:此函数使用参数"floatvar"(浮点编号)并将其转换为16位LINEAR11值(11位尾数+5位指数),同时将其返回.
参数:floatfloatvar:浮点编号返回值:uint16:被转换为LINEAR11的floatvar副作用:无floatSMBusSlave_Lin16ToFloat(uint16linear16,int8inExponent)说明:此函数将参数"linear16"转换为浮点并将其返回.
参数Linear16包含尾数.
参数inExponent是转换中要使用的5位二进制补码指数.
参数:uint16linear16:LINEAR16数字的16位尾数.
int8inExponent:LINEAR16数字的5位指数.
在低5位中.
2的补码.
返回值:float:被转换为浮点的参数副作用:无uint16SMBus_FloatToLin16(floatfloatvar,int8outExponent)说明:此函数使用参数"floatvar"(浮点编号)并将其转换为16位LINEAR16值(16位尾数),同时将其返回.
参数outExponent是转换中要使用的5位二进制补码指数.
参数:floatfloatvar:要转换为LINEAR16的浮点编号.
int8outExponent:转换中要使用的用户提供的5位指数.
返回值:uint16:被转换为LINEAR16的参数.
副作用:无Bootloader支持SMBus和PMBus从器件组件可作为Bootloader的通信组件使用.
有关Bootloader的更多信息,请参考《系统参考指南》中的"Bootloader系统"一节.
SMBus和PMBus从器件组件为使用Bootloader提供了一组API函数.
函数说明SMBusSlave_CyBtldrCommStart启动SMBus和PMBus从器件组件,并使能其中断.
SMBusSlave_CyBtldrCommStop禁用SMBus和PMBus从器件组件并禁用其中断.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页23/36函数说明SMBusSlave_CyBtldrCommReset将读取和写入I2C缓冲区设置为其初始状态,然后重置从设备状态.
SMBusSlave_CyBtldrCommWrite允许调用程序将数据写入bootloader主机.
该函数将处理轮询以便让数据块完全发送至主机器件.
SMBusSlave_CyBtldrCommRead允许调用程序读取bootloader主机中的数据.
该函数将处理轮询以便从主机器件完全接收到数据块.
voidSMBusSlave_CyBtldrCommStart(void)说明:启动通信组件并使能中断.
读取缓冲区初始状态为已满,读取始终为0xFFu.
写入缓冲区已清理,可接收指令.
参数:无返回值:无副作用:此函数使能组件中断.
如果已使能I2C而未使能中断,它将锁定总线.
voidSMBusSlave_CyBtldrCommStop(void)说明:禁用通信组件并禁用中断.
参数:无返回值:无副作用:无voidSMBusSlave_CyBtldrCommReset(void)说明:将缓冲区设置为初始状态,并使从状态复位.
读取缓冲区初始状态为已满,读取始终为0xFFu.
写入缓冲区已清理,可接收指令.
参数:无返回值:无副作用:无SM总线和PM总线从器件PSoCCreatorComponentDatasheet页24/36DocumentNumber:001-89662Rev.
*AcystatusSMBusSlave_CyBtldrCommRead(uint8*Data、uint16size、uint16*count、uint8timeOut)说明:接收来自主机的指令.
所有字节由I2C中断服务子程序接收并存储在内部I2C缓冲区中.
此函数使用超时检查状态以确定传输结束,然后将数据复制到bootloader缓冲区.
退出此函数后,I2C中断服务子程序能够接收更多的数据.
参数:uint8*Data:指向要从bootloader主机读取的数据块的存储的指针uint16size:要读取的字节数uint16*count:指向用于写实际读取字节数的变量的指针uint8timeOut:等待的单位数(时间为10毫秒),之后会因超时而返回返回值:cystatus:如果未遇到任何问题则返回CYRET_SUCCESS,或是返回对该问题描述最准确的值.
有关更多信息,请参考《系统参考指南》中的"返回代码"一节.
副作用:无cystatusSMBusSlave_CyBtldrCommWrite(uint8*Data、uint16size、uint16*count、uint8timeOut)说明:将已执行指令的状态传送至主机.
此函数使用响应更新I2C读取缓冲区并将其释放给主机.
所有读取都返回0xFF,直至缓冲区被释放.
所有字节由I2C中断服务子程序传送.
此函数超时等待,直至已读取所有字节.
退出此参数后,所有读取返回0xFF.
参数:uint8*Data:指向要写入bootloader主机的数据块的指针uint16size:要写入的字节数uint16*count:指向实际写入字节数的变量指针uint8timeOut:等待的单位数(时间为10毫秒),之后会因超时而返回返回值:cystatus:如果未遇到任何问题则返回CYRET_SUCCESS,或是返回对该问题描述最准确的值.
有关更多信息,请参考《系统参考指南》中的"返回代码"一节.
副作用:在"BootloaderWrite"数据操作期间调用启动时钟延展时,临时使能组件中断,但在返回之前通过此函数禁用此中断(以符合手动指令处理行为).
当不使用"BootloaderWrite"进行调用时-始终保留组件中断已使能.
宏SMBusSlave_FL_ADDR_TO_ROW(addr)—从指定地址提取闪存行数.
SMBusSlave_FL_ADDR_TO_ARRAYID(addr)—从指定地址提取闪存阵列ID.
SMBusSlave_SIZE_TO_ROW(size)—计算并返回存储size定义的数据量所需的闪存行数.
SMBusSlave_MAX_PAGES—指定分页指令所使用的最大页数.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页25/36SMBusSlave_NUM_COMMANDS—定义分页指令的页数.
MISRA合规性本节介绍了MISRA-C:2004合规性和本组件的偏差情况.
有两种差异的类型,如下定义:项目偏差—适用于所有PSoCCreator组件的偏差特定偏差—仅适用于该组件的偏差本节介绍了有关组件特定偏差的信息.
《系统参考指南》的"MISRA合规性"章节中介绍了项目偏差以及有关MISRA合规性验证环境的信息.
还未证明SM总线和PM总线从器件组件源代码符合MISRA-C:2004编码准则.
样例固件源代码在"FindExampleProject"对话框中,PSoCCreator提供了大量的示例项目,包括原理图和代码的.
要获取组件特定的示例,请打开组件目录中的对话框或原理图中的组件实例.
要查看通用示例,请打开"StartPage"或File菜单中的对话框.
根据要求,可以通过使用对话框中的FilterOptions项来限定可选的项目列表.
更多有关信息,请参考PSoCCreator帮助中的"FindExampleProject"(查找示例项目)主题.
中断服务子程序SMBus和PMBus从器件组件使用2个中断服务子程序进行操作.
一个中断服务子程序处理通过SM/PM总线的指令解码和数据操作.
另一个中断服务子程序是25ms超时中断,设计用于在出现低电平停滞情况时复位总线.
功能说明此组件的工作原理与I2C从器件组件的工作原理非常相似.
所有SMBus规范均参考版本2.
0的SMBus规范.
本节将重点介绍此组件的关键功能.
I2C物理层SM/PM总线从器件组件的物理层是基于I2C协议的.
影响此组件的三个主要区别是:SM总线和PM总线从器件PSoCCreatorComponentDatasheet页26/36DocumentNumber:001-89662Rev.
*ASMBus规范强制规定,如果检测到SCL信号低电平停滞25ms,此组件必须复位并释放SCL和SDA线.
该内容在《交流和直流电气性能要求》一节中有更加详细的说明.
此组件还监控SDA线,并且如果其仍保持低电平停滞状态25ms,作为额外防范措施,还将对其进行复位.
SMBus规范强制规定此组件不得在任何给定的传输中延展时钟超过25ms(累积时间).
如果任何数据操作中的累积延展时间未超过25ms,当此从器件忙碌于将SCL拉至低电平(时钟延展)时,允许此从器件延迟传输增加SMBALERT#引脚以通知主机此器件需要引起关注SMBus/PMBus寻址每个SMBus/PMBus从器件都有一个I2C地址.
以下地址留作特定的SMBus用途,且不得作为SMBus/PMBus从器件的通用从器件地址使用.
从器件地址(位7:1)R/W#位(位0)注释00000000通用调用地址00000001START字节0000001XCBUS地址0000010X留作用于其他总线格式0000011X留作日后使用00001XXX留作日后使用0101000X留作用于ACCESS总线主机0110111X留作用于ACCESS总线默认地址11110XXX留作用于10位从器件寻址11111XXX留作日后使用0001000X留作用于SMBus主机0001100XSMBus警报响应地址1100001XSMBus组件默认地址如果用户使能了SMBALERT#引脚选项,此组件将响应其主要地址以及警报响应地址.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页27/36SMBus/PMBus协议SMBus规范中定义了9个不同的协议.
这些协议的概要及其支持状态如下所示.
协议支持状态注释快速指令不支持仅SMBus发送字节支持两者接收字节支持仅SMBus写入字节/字支持两者读取字节/字支持两者进程调用支持两者模块写入/读取支持两者模块写入/模块读取进程调用支持两者SMBus主机通知协议不支持两者体现SM/PM总线组件特性的关键概念如下.
SMBus和PMBus都不使用子地址或I2C寄存器映射的概念.
所有传输都是基于指令的.
I2C从器件地址后面紧跟的是指令代码.
指令可以是只写、只读或读/写指令.
在SMBus中,指令的定义以及读/写限制几乎完全取决于用户.
在PMBus中,指令很大程度上是预先定义的,但提供了一系列的指令代码,这些指令代码未进行分配,可用于"特定于制造商的"实现.
对于读取数据操作,主机通过发出REPEATEDSTART总线条件在编写读取指令代码与读取请求数据之间来回切换.
一旦整个数据操作完成,将仅生成STOP位.
如下例所示:SMBus和PMBus是低位优先协议(即在总线上将首先传送多字节数据类型的最低有效字节).
从PSoC角度需要所有寄存器以PSoC固有的字节顺序格式存储.
此组件负责在PSoC与I2C缓冲区之间正确地转换字节顺序.
这仅适用于16位字传输.
SMBus规范不定义任何指令代码;它们由用户进行定义.
但是,PMBus规范第2部分附录1定义了所有255个可选指令代码;其中46个由用户进行定义(被称为特定于制造商的指令).
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页28/36DocumentNumber:001-89662Rev.
*A寄存器存储区概念根据PMBus规范II5.
4.
2—"可写入的每个参数必须可读".
通常,接受写入的值的任何指令在读取时也必须返回此值.
为此,使用了寄存器存储区的概念.
图1.
寄存器存储区概念工作内存寄存器存储区这是RAM版本的寄存器存储区.
运行时,SMBus/PMBus指令可修改此版本的寄存器存储区.
由于此寄存器存储区位于RAM中,因此在复位时其内容被假定为无效.
默认寄存器存储区闪存版本的寄存器存储区,包含所有SMBus/PMBus参数的默认值.
启动时,默认寄存器存储区可被复制至工作内存寄存器存储区以初始化工作寄存器存储区.
默认寄存器存储区中的参数值在编译/链接期间是固定的.
用户负责为寄存器存储区中的参数提供默认值.
要打开SMBusSlave_Defaults.
c,从注释模块中复制参数并将其粘贴到下面的合并区域内.
如果您这样做,它们将存储在SMBusSlave_regsDefault中,且每次启动时,工作内存将使用这些参数进行初始化.
另一种使用默认值初始化工作内存的方式是调用SMBus_RestoreDefaultAll().
此函数可在用户处理程序用于RESTORE_DEFAULT_ALL(0x12)PM总线指令.
PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页29/36用户寄存器存储区这是另一个闪存版本的寄存器存储区.
不同于默认寄存器存储区,它基本上是只读的,而用户寄存器存储区则可以基于工作寄存器存储区的当前内容进行更新.
由于将数据存储至闪存中的操作是特定于实现的,因此此组件不会执行任何存储至闪存中的操作;它提供了两个包括合并区域的API功能,此区域可用于此目的.
SMBusSlave_StoreUserAll()执行检查恢复时的数据有效性所需的CRC的计算.
要设计您自己的将数据存储至闪存的数据的方法,请参考《系统参考指南》.
第10章提供了基本信息以及用于处理闪存的指令说明.
此组件中还提供了一组宏,在处理闪存时可使用这些宏.
组件寄存器存储区组件寄存器存储的主要动机是允许PMBus从标准的PSoCCreator组件中提取参数并配置这些组件(因此名称为组件寄存器存储区).
Creator组件都有其自己的配置参数,这些参数通常是使用组件自定义程序设置的.
在运行时可通过特定于组件的SMBusSlave_StoreComponentAll()/SMBusSlave_RestoreComponentAll()API来访问这些参数.
可通过API访问的组件参数包括组件寄存器存储区.
启动时,用户PMBus固件可能需要:基于用户或默认寄存器存储区中存储的PMBus参数更新其他组件设置,或基于组件设置更新PMBus寄存器存储区.
特例指令PAGE指令PMBusPAGE(代码0x00)指令(PMBus第2部分—第11.
10节)允许访问同一个PMBusI2C地址下的多个逻辑PMBus器件.
例如,控制多个电源轨的PMBus功耗监控器可提供对每个轨在其自己的页面上的指令/参数的访问.
可将该页面视为到指令/寄存器的阵列的索引.
一旦通过PAGE指令设置了此页面,页面设置将是持久性的,直至再次被另一个PAGE命名设置.
在PMBus模式中,此组件具有对PAGE指令的内置支持.
在SMBus模式中,用户可以选择使能PAGE指令并为PAGE指定要使用的指令代码.
如果使能了PAGE指令,则PAGE指令值的有效范围为1到32之间,且必须在用户确定的MaxPage(最大页面)设置范围内.
异常情况是"AllPages"(所有页面)通配符设置,为0xFF.
"AllPages"(所有页面)通配符仅针对写入数据操作有效,且必须在"Manual"(手动)模式中进行处理.
如果PAGE被设置为0xFF,以下数据操作将被视为错误:通过分页指令尝试读取通过配置为Manual(手动)的分页指令尝试写入SM总线和PM总线从器件PSoCCreatorComponentDatasheet页30/36DocumentNumber:001-89662Rev.
*A甚至在包括多个页面的PMBus器件中,一些指令不会独立于当前页面,且始终按相同的方式进行处理,与PAGE设置情况无关.
例如,用于返回此组件支持的PMBus版本的PMBUS_REVISION指令对于所有页面是通用的.
因此,存在页面指令和常见指令的概念.
对于每个SMBus/PMBus指令,自定义程序允许用户指定指令是Paged(分页)指令还是Common(常见)指令.
当指令被标记为Paged(分页)时,此组件将在寄存器存储区中为此指令定义一个阵列.
QUERY指令PMBusQUERY(代码0x1A)指令用于询问PMBus器件是否支持所给出的指令,以及如果支持的话它针对此指令支持哪些数据格式.
在PMBus模式中,此组件具有对QUERY指令的内置支持.
在SMBus模式中,用户可以选择使能QUERY指令并为QUERY指定要使用的指令代码.
此指令使用SMBus规范中介绍的模块写入模块读取进程调用.
针对进程调用的写入部分,一个数据字节是未分配的二进制整数,此整数等于正在被操作的指令的指令代码.
针对进程调度的读取部分,一个数据字节是未分配的二进制整数,其包括以下值:位数值含义71支持指令0不支持指令61支持指令写入0不支持指令写入51支持指令读取0不支持指令读取4:2000使用了线性数据格式00116位有符号数字010保留011使用了直接模式格式1008位无符号数字101使用了VID模式格式110使用了特定制造商的格式111指令不返回数字数据.
这还用于返回各个数据区块的指令.
1:0XX留作日后使用PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页31/36可以基于自定义程序中的用户选择生成上表中的所有信息.
如果不支持使用QUERY研究的指令代码,在这种情况下,将返回"0x00".
数据操作队列对于任何还没指定为AUTO的SMBus/PMBus指令,则必须在主程序上下文中进行及时处理.
要实现这一操作,该组件将保持一个数据操作队列,从而可通过您的代码在I2CISR上下文之外对总线数据操作进行处理.
只要检测到"Manual"(手动)类型的指令,则将它录入数据操作队列,然后它应由用户代码进行处理.
数据操作队列的记录具有以下结构:typedefstruct{uint8read;/*r/wflag–1=read0=write*/uint8commandCode;/*SMBus/PMBuscommandcode*/uint8page;/*SMBus/PMBuspage*/uint8length;/*bytestransferred*/uint8payload[65];/*payloadforthetransaction*/}TRANSACTION_STRUCT下面说明了各字段的内容:"read"是一个标志,表示接收到Read(读取)或Write(写入)的指令类型.
"commandCode"是目前接收到的指令的1字节指令代码"page"是目前接收到的指令的页码它仅适用于分页指令.
对于常见指令,该字段将是零.
"length"对于Write(写入)指令,"length"指定了目前接收指令的数据长度(单位为字节).
对于Read(读取)指令,"length"指定需要发送的字节数.
对于模块指令,"length"包括了"字节数"字节.
"payload"对于Write(写入)指令,"payload"包含目前指令的接收数据.
用户代码用于更新寄存器存储区,然后对SMBusSlave_CompleteTransaction()函数进行调用.
对于Read(读取)指令,"payload"即不可用.
用户代码用于更新寄存器存储区中该指令的变量,然后调用SMBusSlave_CompleteTransaction()函数.
每次接收手动指令,该组件将开始伸展时钟,直至处理待定数据操作,以及SMBusSlave_CompleteTransaction()被调用.
对于Read(读取)指令,重复开始后,时钟将开始伸展,并等待用户代码为外部主机提供响应.
对于Write(写入)指令,接收目前指令的数据SM总线和PM总线从器件PSoCCreatorComponentDatasheet页32/36DocumentNumber:001-89662Rev.
*A后,时钟将开始伸展.
当时钟开始伸展时,内部定时器也开始计数25ms超时.
如果在发生超时前,未调用SMBusSlave_CompleteTransaction()函数,则该组件将复位总线.
因此,这将使数据操作队列中剩余的记录无效.
Bootloader指令当此组件被安置在"Bootloader"项目中,Configure对话中的CustomCommands(自定义指令)选项卡上将有两个额外的指令可用.
这两个指令是BOOTLOAD_READ和BOOTLOAD_WRITE,它们的默认指令代码分别为0xFD和0xFC.
它们向此组件增加了一项作为Bootloader组件的通信组件的功能.
这两个指令可与设计原理图上安置的Bootloader组件进行交互.
在安装Bootloader后,在Bootloader组件的Configure对话框中选择"Custominterface"(自定义界面).
资源下面列出了固定功能实现的SM/PM总线从器件组件的资源图表.
这些数据是数据速率为400kbps时收集的.
PSoC3配置资源类型数据路径单元宏单元状态单元控制单元I2C固定模块中断SM总线/PM总线(UDB)33226__2SM总线/PM总线(固定功能)291412PSoC5LP配置资源类型数据路径单元宏单元状态单元控制单元I2C固定模块中断SM总线/PM总线(UDB)33226__2SM总线/PM总线(固定功能)152212PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页33/36API存储器大小组件存储器使用的大小显著不同,它取决于编译器、设备、所使用的API数量以及组件配置.
下表提供的是已给组件配置中的所有API存储器大小.
此次测量使用的编译器配置是针对代码大小优化的Release(发布)模式有关特定的设计,可分析编译器生成的映射文件以确定内存使用情况.
配置PSoC3(Keil_PK51)PSoC5LP(GCC)闪存字节SRAM字节闪存字节SRAM字节SM总线从器件(固定功能)55542033844142SM总线从器件(UDB)56281993956132PM总线从器件(固定功能)7539179550853326PM总线从器件(UDB)7613179151893316直流和交流电的电气特性除非另有说明,否则这些规范的适用条件是:-40°C≤TA≤85°C和TJ≤100°C.
除非另有说明,否则这些规范的适用范围为1.
71V到5.
5V.
SMBus和PMBus从器件直流电规范参数说明最小值典型值[1]最大值单位IDD组件电流消耗SMBus(UDB)数据速率=50kbps—380—μASMBus(固定功能)—670—μAPMBus(UDB)数据速率=100kbps—440—μAPMBus(固定功能)—620—μASMBus(UDB)数据速率=400kbps—720—μASMBus(固定功能)—860—μA1.
未包括设备IO和时钟分配的电流.
这些值是在温度是25°C时的值.
数据是在BUS_CLK被设置为24MHz时测得的.
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页34/36DocumentNumber:001-89662Rev.
*A参数说明最小值典型值[1]最大值单位PMBus(UDB)数据速率=400kbps—750—μAPMBus(固定功能)—980—μASMBus和PMBus从器件交流电规范参数说明最小值典型值最大值单位fSCLSCL时钟频率——————1004001000kHzfCLOCK组件输入时钟频率—16*fSCL—kHztRESET复位信号脉冲宽度—2—tCY_clock2tLOWSCL时钟的低电平周期4.
71.
30.
5——————μstHIGHSCL时钟的高电平周期4.
00.
60.
26——————μstHD_STA(重复)启动条件后的保留时间4.
00.
60.
26——————μstSU_STA重复启动条件的建立时间4.
70.
60.
26——————μstHD_DAT数据保留时间5.
0————————μstSU_DAT数据建立时间25010050——————nstSU_STO停止条件的建立时间4.
00.
60.
26——————μs2tCY_clock=1/fCLOCK.
这是一个时钟周期的时间长度PSoCCreatorComponentDatasheetSM总线和PM总线从器件DocumentNumber:001-89662Rev.
*A页35/36参数说明最小值典型值最大值单位tBUF停止和启动之间的总线空闲时间4.
71.
30.
5——————μstFLASH_WRITE—40.
63—ms图2.
数据转换时序图组件更改本节列出了各版本的主要组件更改内容.
版本更改内容更改原因/影响2.
20修复了有关在尝试读取"仅写入"指令时组件传送"垃圾"数据(而不是FFs)的问题.
该问题是由ISR组件中处理指令读取部分的错误条件引起的.
从组件删除了对PSoC5系列器件的支持.
使用新值更新了API存储器占用表.
添加了数据操作队列的说明.
需要数据操作队列的信息,以处理手动类型的指令.
修复了将页码错误地设置为最大页码值的问题.
因为页面索引是从零开始的,所以最大页码应等于最大页码值减去1.
解决了有关时钟输入的错误存在问题.
当在组件定制器中选中了固定功能实现时,组件不能在符号上公开时钟输入,因为在该模式下,组件只能使用内部时钟.
3通过以下方式获取的值:使用所有PM总线指令存储为PM总线模式配置的寄存器存储区,同时这些指令是使用BUS_CLK为24MHz时的默认配置使能的.
SM总线和PM总线从器件PSoCCreatorComponentDatasheet页36/36DocumentNumber:001-89662Rev.
*A版本更改内容更改原因/影响将定制器中"General"选项卡下的"Actualdatarate"(实际数据速率)改为"Attainabledatarate"(可达到的数据速率).
2.
10纠正了无法将PAGE设置为0xFF("所有页面"通配符)的相关问题.
2.
0必须始终使用分页指令陈列来声明PMBus寄存器存储区,即使用户在设计中只能选择一个页面.
导致代码重组的错误,将"Pages"列添加到自定义指令表格内.
这是为特殊定义指令定义页数的参数.
纠正了有关未完成写入数据操作的问题.
通过修改该代码来验证"Bytecount"(字节计数)字段所指定的字节数是否等于接收数据的字节数.
修改前的代码验证了数据数量是否等于特殊数据块指令中的"Size"参数,用户通过组件自定义程序访问这些指令.
清除SMBALERT引脚保持未连接状态时所导致的编译错误.
页面设置为"所有页面"通配符情况下,当处理页面索引和手动指令时,纠正了有关出错生成总线错误的问题.
限制从器件地址将地址留作特殊的SMBus用途.
这是一个错误,因为组件没有验证该地址,修复了一些小问题.
添加了新函数—SMBusSlave_EraseUserAll().
1.
10已添加MISRA合规性章节.
此组件未进行MISRA合规性验证.
将I2C和控制寄存器组件的最新版本更新到SM总线和PM总线从器件.
1.
0第一版赛普拉斯半导体公司,2013-2016年.
本文件是赛普拉斯半导体公司及其子公司,包括SpansionLLC("赛普拉斯")的财产.
本文件,包括其包含或引用的任何软件或固件("软件"),根据全球范围内的知识产权法律以及美国与其他国家签署条约由赛普拉斯所有.
除非在本款中另有明确规定,赛普拉斯保留在该等法律和条约下的所有权利,且未就其专利、版权、商标或其他知识产权授予任何许可.
如果软件并不附随有一份许可协议且贵方未以其他方式与赛普拉斯签署关于使用软件的书面协议,赛普拉斯特此授予贵方属人性质的、非独家且不可转让的如下许可(无再许可权)(1)在赛普拉斯特软件著作权项下的下列许可权(一)对以源代码形式提供的软件,仅出于在赛普拉斯硬件产品上使用之目的且仅在贵方集团内部修改和复制软件,和(二)仅限于在有关赛普拉斯硬件产品上使用之目的将软件以二进制代码形式的向外部最终用户提供(无论直接提供或通过经销商和分销商间接提供),和(2)在被软件(由赛普拉斯公司提供,且未经修改)侵犯的赛普拉斯专利的权利主张项下,仅出于在赛普拉斯硬件产品上使用之目的制造、使用、提供和进口软件的许可.
禁止对软件的任何其他使用、复制、修改、翻译或汇编.
在适用法律允许的限度内,赛普拉斯未对本文件或任何软件作出任何明示或暗示的担保,包括但不限于关于适销性和特定用途的默示保证.
赛普拉斯保留更改本文件的权利,届时将不另行通知.
在适用法律允许的限度内,赛普拉斯不对因应用或使用本文件所述任何产品或电路引起的任何后果负责.
本文件,包括任何样本设计信息或程序代码信息,仅为供参考之目的提供.
文件使用人应负责正确设计、计划和测试信息应用和由此生产的任何产品的功能和安全性.
赛普拉斯产品不应被设计为、设定为或授权用作武器操作、武器系统、核设施、生命支持设备或系统、其他医疗设备或系统(包括急救设备和手术植入物)、污染控制或有害物质管理系统中的关键部件,或产品植入之设备或系统故障可能导致人身伤害、死亡或财产损失其他用途("非预期用途").
关键部件指,若该部件发生故障,经合理预期会导致设备或系统故障或会影响设备或系统安全性和有效性的部件.
针对由赛普拉斯产品非预期用途产生或相关的任何主张、费用、损失和其他责任,赛普拉斯不承担全部或部分责任且贵方不应追究赛普拉斯之责任.
贵方应赔偿赛普拉斯因赛普拉斯产品任何非预期用途产生或相关的所有索赔、费用、损失和其他责任,包括因人身伤害或死亡引起的主张,并使之免受损失.
赛普拉斯、赛普拉斯徽标、Spansion、Spansion徽标,及上述项目的组合,WICED,及PSoC、CapSense、EZ-USB、F-RAM和Traveo应视为赛普拉斯在美国和其他国家的商标或注册商标.
请访问cypress.
com获取赛普拉斯商标的完整列表.
其他名称和品牌可能由其各自所有者主张为该方财产.
licloud怎么样?licloud目前提供香港cmi服务器及香港CN2+BGP服务器/E3-1230v2/16GB内存/240GB SSD硬盘/不限流量/30Mbps带宽,$39.99/月。licloud 成立於2021年,是香港LiCloud Limited(CR No.3013909)旗下的品牌,主要提供香港kvm vps,分为精简网络和高级网络A、高级网络B,现在精简网络和高级网络A。现在...
小渣云 做那个你想都不敢想的套餐 你现在也许不知道小渣云 不过未来你将被小渣云的产品所吸引小渣云 专注于一个套餐的商家 把性价比 稳定性 以及价格做到极致的商家,也许你不相信36元在别人家1核1G都买不到的价格在小渣云却可以买到 8核8G 高配云服务器,并且在安全性 稳定性 都是极高的标准。小渣云 目前使用的是美国超级稳定的ceranetworks机房 数据安全上 每5天备份一次数据倒异地 支持一...
RAKsmart 商家估摸着前段时间服务器囤货较多,这两个月的促销活动好像有点针对独立服务器。前面才整理到七月份的服务器活动在有一些配置上比上个月折扣力度是大很多,而且今天看到再来部分的服务器首月半价,一般这样的促销有可能是商家库存充裕。比如近期有一些服务商挖矿服务器销售不好,也都会采用这些策略,就好比电脑硬件最近也有下降。不管如何,我们选择服务器或者VPS主机要本着符合自己需求,如果业务不需要,...