- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
学习i2c心得
I2C学习心得 我最近刚做完I2C通信协议的编写与调试,下面介绍一下我从一开始理解夏老师的程序,修改程序,直到下板调试整个的学习过程,希望对大家学习I2C有一定的帮助。 分析源代码 学习I2C,首先我们要知道I2C是一种串行接口,I2C通信是一种串行通信。在实际的数字系统中,我们的数据经常是以并行的方式产生及存储的。而将数据通过进行传输时,通常会是串行地发送和接收的。比如我们常见的SPI,UART,I2C,USB,SATA等接口,均是串行接口。因此,在数字系统中我们经常会遇到需要将串行数据接收下来转为并行数据存储,或者是将并行数据转换成串行数据发送出去的情况。说白了,就是发送端要将数据排个队,一个一个地往外蹦,接收端接收到了这些数据又要将它们像串糖葫芦一个一个串起来,成为并行的数据。 那么我们要做的I2C协议,其实就是按照I2C总线协议的要求,将本地的数据串行地发送出去,或者将外部的数据串行地接收回来的这么一个过程。 图1: EEPROM读写电路和它的测试电路 由于以前从未搞过I2C方面的工作,我的第一步是从理解夏老师的程序开始的,通过浏览I2C设计实例,可以知道要设计一个I2C通信程序,我们需要一个主机和一个从机,如下图1所示,它们之间采用I2C协议进行串行通信,设计实例中的signal模块和EEPROM_WR模块是用来模拟主机发送方的,EEPROM_WR模块是一个可综合的EEPROM读写器模型,它通过SCL和SDA两根线与EEPROM器件进行通信,并且SCL与SDA上的信号必须满足I2C通信协议的要求。EEPROM模块只是EEPROM的行为级模型,signal模块与EEPROM模块都是为了仿真需要而存在的。 先简单的介绍一下I2C总线特征。 只有在总线处于“非忙”状态时,才能开始数据传输。在数据传输期间,只要时钟线为高电平,数据线都必须保持稳定,否则数据线上的任何变化都被当作“启动”或“停止”信号。图 1 是总线状态的定义。 SCL SDA (A) (B) (D) (D) (C) (A) 停止信号 数据的电平稳定 数据才有效 数据在此 期间变化 启动信号 图1. I2C 双向二线制串行总线 数据在此 期间变化 数据在此 期间变化 1/0 (1)总线非忙状态(A 段):数据线SDA 和 时钟线 SCL 都保持高电平。 (2)启动数据传输(B 段):当时钟线(SCL)为高电平状态时,数据线(SDA)由高电平变为低电平的下降沿被认为是“启动”信号。只有出现“启动”信号后,其它的命令才有效。 (3)停止数据传输(C 段):当时钟线(SCL)为高电平状态时,数据线(SDA)由低电平变为高电平的上升沿被认为是“停止”信号。随着“停在”信号出现,所有的外部操作都结束。 (4)数据有效(D 段):在出现“启动”信号以后,在时钟线(SCL)为高电平状态时数据线是稳定的,这时数据线的状态就要传送的数据。数据线(SDA)上的数据的改变必须在时钟线为低电平期间完成,每位数据占用一个时钟脉冲。每个数传输都是由“启动”信号开始,结束于“停止”信号。 (5)应答信号:每个正在接收数据的从机EEPROM 在接到一个字节的数据后,通常需要发出一个应答信号。而每个正在发送数据的EEPROM 在发出一个字节的数据后,通常需要接收一个应答信号。EEPROM 读写控制器必须产生一个与这个应答位相联系的额外的时钟脉冲。在EEPROM 的读操作中,EEPROM 读写控制器对EEPROM 完成的最后一个字节产生一个高的应答位,这叫做非应答信号,随后给EEPROM 一个结束信号。 了解完了I2C的总线特征,我们就可以进一步地了解夏老师的I2C设计。 首先介绍核心模块——EEPROM_WR模块,该模块的难点在于对状态机的编写,图2、3分别是AT24C02/4/8/16字节写入帧格式和读指定地址存储单元的数据帧格式,简单分析一下字节写入格式:第1位启动信号,接下来的第2-9位是控制字节写入,其中2-5位是固定的机器码1010,6-8位是页地址,第10位是EEPROM给出的应答信号0,第11-18位是把存储地址,19位又是EEPROM给出的应答信号0,第20-27位是写入的数据,28位应答信号,29位停止信号。而AT24C02/4/8/16的字节读取格式也是大同小异,在写完地址后,又加入了启动信号与控制字节信号,这时,控制字节的第8位变为了1(读取),然后是读取数据,并且在读取完毕后,主机将SDA拉高作为非应答信号。最后是停止位。 可能有人还是对这种字节写入与读取格式不明白,其实这种格式是别人定好的,我们所需要的就是要让SDA与SCL的信号满足这种格式要求即可,下面我们来看夏老师的EEPROM_WR程序。 图2:24C02/4/8/16字节写
文档评论(0)