网站大量收购独家精品文档,联系QQ:2885784924

IIC模拟方式操作EEPROM.pdf

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IIC模拟方式操作EEPROM

IIC 模拟方式操作EEPROM 介绍 2016-08-26 by wit_yuan at Beijing 龙兴园北区 声明: 多主机模式目前还没见过,就不说明了。高速模式不常用,也不说明了。 参考手册: I2C-英文版-spec-(philips 官方文档).pdf 文档。 AT24C02 数据手册(到 下载即可)。 简单介绍: 1.I2C 总线在空闲的时候,是高电平。 这个原理可以这样解释:I2C 总线可以挂载一系列的从设备,从设备可以通过地址来区分, 可是主机如何确保和一个设备通信呢,这就得用总线上高低电平来区分了,在总线上,每个 设备使用的是开漏输出(硬件保证),假设一个从设备拉低总线了,那整个SDA 总线就被拉低 了,那I2C 主机的SDA 也是低,因此,这就是所谓的总线所有设备的线与概念,简单表示即: 主机( 电平) 从设备 …. (从设备n)等等。 这就是空闲时为高电平的道理。 2.I2C 速率 I2C 总线速率有标准模式100Kb/s,快速模式400Kb/s ,高速模式3.4Mb/s 。 3.数据可靠性保证 在SCL 为高期间,SDA 线必须要稳定。在SCL 是低的时候,SDA 线才能高低状态变换。 举个经典的图如下: 4.I2C 协议 a.起始停止状态定义 起始和终止状态定义可以如下图所示: 前面说过,一般状态下,数据位只能在SCL 为低的时候,SDA 才能变化。刚好留出一些非数 据传输状态。起始:SCL 为高,SDA 由高到低变化。结束:SCL 为高,SDA 由低到高变化,这个 过程刚好恢复到空闲状态。 5.I2C 数据传输 I2C 数据传输是MSB 先传输。 6.I2C 响应 数据传输过程中强制要响应,而时钟仍由主机产生。然后从机会将其本身的 SDA 线拉 高(强调一个线与概念,而带出来本身) 。要注意SDA 保持时间。 以上过程可以通过如下图生动表示: 响应与不响应情况可如下图生动的表示出来: 7.I2C 地址问题 设备地址是按照7 位来分的,在数据传输角度,再加一位来表示对从设备是读还是写。 使用0 来表示写,1 表示读。 下面给出一个完整的数据传输过程: 下面是一个主机控制从机写的大致过程: 下面是主机控制从机读的过程: 下面是读写混合的过程图: 好了,以上就是基本的I2C 内容介绍,现在开始操作I2C 接口的EEPROM。 8.I2C 的时序要求 9.I2C 各部分时序操作使用伪代码实现(注意这里说的是伪代码) 由于本程序是用来模拟I2C 总线的,因此对于响应不响应信号都由主机来产生。 a.起始条件函数I2C_start() void I2C_start() { //将SCL,SDA 置高,表明总线是空闲状态 //我参考一般数据手册上看,起始信号会持续产生,因此保证上一个时刻SCL=0 的 //情况下,让数据先为1 SDA=1; //延时4us Delay_us(4); //让SCL 变化,这里SDA 数据已经稳定了 SCL=1; //延时4.7us 或者以上,一般设置为5us 或者以上最好,留有余量 Delay_us(4.7); //将SDA 置低,表明起始条件建立。 SDA=0; //延时4us ,就可以产生下一个条件,也就是SCL 变化。一般大于4us 最好 Delay_us(4); //后面数据变化,是在SCL 为低时,因此,起始时,将SCL 置低,为4us. SCL=0; Delay_us(4); } b.终止条件,函数为I2C_stop() void I2C_stop() { //先将SCL 置为高,SDA 从低到高,默认SCL 状态是从0 开始 SDA=0; //延时4us,让数据先在SCL=0 这个阶段稳定 Delay_us(4); //然后SCL 开始变化,因为数据已经稳定了 SCL=1; //SDA 要延时一段时间,让其稳定。最小4us 。 //延时一段时间 Delay_us(4); //将SDA 置为高

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档