SMBus与I2C总线的区别.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
SMBus与I2C总线的区别

SMBus与I2C总线的区别The I2C bus and the SMBus are popular 2-wire buses that areessentially compatible with each other.Below,significantdifferences between the two buses.?I2CSMBusTimeoutNoYesMinimum Clock SpeedDC10kHzMaximum Clock Speed100kHz (400kHz and 2MHz also available)100kHzVHIGH0.7 × VDD, 3.0V Fixed2.1VVLOW0.3 × VDD, 1.5V Fixed0.8VMax I3mA350μAClock NomenclatureSCLSMBCLKData NomenclatureSDASMBDATGeneral CallYesYesAlert#NoYesSMBus与I2C的差别???? SMBus与I2C总线之间在时序特性上存在一些差别。首先,SMBus需要一定数据保持时间,而 I2C总线则 是从内部延长数据保持时间。SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清 除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。SMBus只工作在从10kHz到最高100kHz。最低工作频率10kHz是由SMBus超时功能决定的(1)SMBus是一种二线制串行总线,1996年第一版规范开始商用。它大部分基于I2C总线规范。和 I2C一样,SMBus不需增加额外引脚,创建该总线主要是为了增加新的功能特性,但只工作在100KHZ且专门面向智能电池管理应用。它工作在主/从模式:主器件提供时钟,在其发起一次传输时提供一个起始位,在其终止一次传输时提供一个停止位;从器件拥有一个唯一的7或10位从器件地址。????? SMBus与I2C总线之间在时序特性上存在一些差别。首先,SMBus需要一定数据保持时间,而 I2C总线则是从内部延长数据保持时间。SMBus具有超时功能,因此当SCL太低而超过35 ms时,从器件将复位正在进行的通信。相反,I2C采用硬件复位。SMBus具有一种警报响应地址(ARA),因此当从器件产生一个中断时,它不会马上清除中断,而是一直保持到其收到一个由主器件发送的含有其地址的ARA为止。SMBus只工作在从10kHz到最高100KHZ。最低工作频率10kHz是由SMBus超时功能决定的。(2)参照i2c时序图,才用smbus总线完成对应读写函数。A,mma7660?static int mma7660_write_register( const u8 subAddress, u8 *bufP ){????? int ret;????? unsigned long flags;????? spinlock_t *lock = get_i2c_lock();????? if( g_client == NULL || lock == NULL)?/*?No global client pointer??*/???????????? return -1;???? ?spin_lock_irqsave(lock,flags);????? ret =? i2c_smbus_write_byte_data(g_client, subAddress, *bufP);? //写一个字节的数据????? spin_unlock_irqrestore(lock, flags);?? ?? return ret;}static int mma7660_read_register( const u8 subAddress, u8 *bufP ){?????? int ret = 0;?????? unsigned long flags;???????? spinlock_t *lock = get_i2c_lock();????? ?if( g_client == NULL || lock == NULL)?/*?No global client pointer??*/???????????? return -1;??????? spin_lock_irqsave(lock,flags);?????? g_client-flags|=I2C_M_NOSTOP;? //注意写两个器件地址之间的SR,中间没有STOP,相当于重发。所以要置标志?????? ret = i2c_smbus_write_byt

您可能关注的文档

文档评论(0)

138****7331 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档