I2C开发实例说明_第1页
I2C开发实例说明_第2页
I2C开发实例说明_第3页
I2C开发实例说明_第4页
I2C开发实例说明_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、I2C开发实例说明开发实例说明I2C的定义o I2C(Inter IC BUS)是Philips公司开发的用于芯片之间连接的总线。 o I2C总线用两根信号线进行数据传输,一根为串行数据线(SDA),另一根为串行时钟线(SCL)。 I2C的速率o 串行8位双向数据传输速率在标准模式下可达100Kbit/so 快速模式下可达400Kbit/so 高速模式下可达3.4Mbit/s I2C术语定义 I2C总线应用举例o 如下图2个处理器,其他为外围应用设备 I2C的特(优)点o 串行总线和并行总线相比具有结构简单 o 占用引脚少 o 成本低等优点 I2C传输数据有效性o SDA线上数据必须在时钟高电

2、平保持稳定o SDA高低电平只在SCL低电平时才能改变起始和停止条件o SCL为高电平时,SDA从高电平到低电平转换,这个条件表示为起始条件o SCL为高电平时,SDA从低电平到高电平转换,这个条件表示为停止条件传输字节格式o 发送到SDA线必须为8位o 每次可以传输的字节数量没有限制o 每个字节后必须跟一个响应位响应bit说明o 低电平表示响应,高电平表示不响应响应bit的几种情况7位的传输格式n 先发起始条件(S)n 再发从机地址,这个地址共有7位n 紧接着第8位是数据方向位(R/W,0表示发送(写),1表示请求数据(读)。)n 从机(不)响应n 传输数据+(不)响应(循环)n 数据传输又

3、主机产生停止位(P)终止传输完整格式三种可能的传输格式第1种:主机发送器发送到从机接收器,传输方向不会改变三种可能的传输格式第2种:第一个字节后,主机立即读从机,注意第一次的响应时由从器件产生三种可能的传输格式第3种:注意事项:o 数据格式中的数据并没有说明里面的数据具体的含义o 换句话说到底是地址还是数据没有定义说明o 具体的传输格式意义应该是由设计者自己决定10位寻址简单做一说明o 如果只使用7位寻址这部分可以忽略o 10寻址和7位寻址兼容,而且可以结合使用o 10位寻址采用保留的1111XXX作为起始条件(S)或重复起始条件(Sr)的后第一个字节的头7位o 尽管保留地址位1111XXX有

4、8个可能的组合,但是只有4个组合11110XX用于10位寻址。剩下的4个组合11111XX保留给以后增强的I2C总线头2个字节的定义n 十位从机地址是由在起始条件(S)或重复起始条件(Sr)后的头2个字节组成n 第一个字节头7位是11110XX的组合n 其中最后2位XX是10位地址的2个最高位n 第一个字节的第8位决定报文方向(R/W,0为写,1为读)第一种10位传输第2种10位传输第3种10位传输第4种10位传输第5种10位传输实例开发举例说明o 上面讲了I2C的理论o 下面根据FDD的I2C设计进行详细设计说明PIGI的I2C时序(W)PIGI的I2C时序(读)RM-CPLD的I2C时序(

5、W)RM-CPLD的I2C时序(R)比较PIGI和RM-CPLD时序结论o 2个时序关系一致o 写是常规的写操作o 需要注意的是读不是在常规写读位置改bit位1(读),而是先进行一个写操作,给出寄存器地址,再进行读操作RM-CPLD的I2C控制器框架首先看下三态电路三态电路代码always (posedge clk or negedge reset_n) if (!reset_n) sda_inner = 1b0 ; else if (sda_output_enable) sda_inner = sda_output; else sda_inner = 1bz ; assign I2C_SDA

6、 = sda_inner;assign sda_input = I2C_SDA ;三态电路注意事项总结o 在写数据时方向为主从,则enable位高无效,此时SDA位输入方向o 当从器件响应时,则enable为低电平此时输出响应位SDA为输出方向o 默认SDA位输入I2C控制器的实现步骤说明(写为例)o首先主器件发起始bit,从器件检测起始bito再进行从器件地址检测(与从器件地址比较,如果正确则响应,如果不正确则不作响应)o解析写bitoCPLD发响应o解析寄存器地址oCPLD发响应o主器件发高8位oCPLD发响应o主器件发低8位oCPLD发响应o主器件发停止位结束检测起始bit(首先检测SD

7、A下降沿)再检测SDA下降沿是否在SCL高电平下代码实现/detect sda startalways (posedge clk or negedge reset_n) if (!reset_n) sda_start = 1b0 ; else if (scl_in_d2) if (sda_in_reg) sda_start = 1b1 ; else sda_start = 1b0 ; 检测停止bit(检测SDA上降沿)再检测SDA上升沿是否在SCL高电平下代码实现/detect sda stopalways (posedge clk or negedge reset_n) if (!reset

8、_n) sda_stop = 1b0 ; else if (scl_in_d2) if (sda_in_pos) sda_stop = 1b1 ; else sda_stop = 1b0 ; .移位寄存器(串并转换过程)/*sda series shift to parallel*/ /sda shift to registeralways (posedge clk or negedge reset_n) if (!reset_n) sda_in_shift = 8b0 ; else if (sda_valid) if (scl_en) sda_in_shift = sda_in_shift6

9、:0,sda_input;串转并后与本地从器件地址比较/*judge slave cpld address and read or write*/ always (posedge clk or negedge reset_n) if (!reset_n) cpld_device_address_right = 1b0 ; else if (sda_valid) if (bit_cnt_d1 = 4b0111 & byte_cnt = 8b0 & scl_in_reg) if (cpld_device_address = sda_in_shift7:1) cpld_device_

10、address_right = 1b1; else cpld_device_address_right = 1b0; else cpld_device_address_right = cpld_device_address_right ; else cpld_device_address_right = 1b0 ;o 当完整接受到16bit后,产生写使能到写寄存器always (posedge clk or negedge reset_n) if (!reset_n) register_wr = 1b0 ; else if (sda_write_valid) if (bit_cnt_d1 =

11、4b0111 & scl_en & byte_cnt = 8b00000011) /& sda_ack register_wr = sda_write_enable; else register_wr = register_wr ; else register_wr = 1b0 ;最后需要看下响应bit/*ack */ always (posedge clk or negedge reset_n) if (!reset_n) sda_ack = 1b0 ; else if (scl_in_reg_d1) if (cpld_device_address_right & bit_cnt_d1 = 4b0111 ) sda_ack = 1b1 ; /ack enable else if (!cpld_device_address_right | sda_stop | bit_cnt_d1 = 4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论