SFF-8636 I2C协议相关解析

2-wire Bus Interface

5.1 Signal Interface

I2C组成由master和salve组成。固定侧为master,自由侧为slave。采用串行的方式来控制以及传输数据。

一定是由master开始数据传输。数据传输方向可以是master到slave,或者slave到master。I2C由SCL以及SDA组成。

master利用SCL对双线总线上的数据和控制信息进行时钟控制。master和slave应该在SCL上升沿的时候锁定数据。

SDA信号时双向的,在数据传输过程中,当SCL为低电平时,SDA电平进行转换。当SCL为高电平时时,SDA电平上的转换应表示停止或启动状态。

5.2 2-wire Bus Protocol

5.2.1操作状态和状态转换

5.2.1.1 Start信号

Start信号:SCL为高时,SDA从高到低进行转换。所有i2c操作必须在start信号开始之后。

5.2.1.2 Stop信号

Stop信号:SCL为高时,SDA从低到高进行转换。所有i2c操作必须在stop信号出现后结束。

5.2.1.3 Acknowledge信号

Acknowledge信号:在发送一个字节以后,持有sda信号的一侧应该释放sda线一段时间,在这个期间接收

方可以拉低sda发送应答信号。
master写数据到slave时,slave应该在每次接收到数据后发送应答信号。

master读数据slaver是,master 应该在最后一次接收数据之前都发送应答信号,在最后一个应该发送nack信号,并接着发送一个stop信号。

5.2.1.4 Clock Stretching

clock stretching通过将SCL线拉低来暂停一个传输.直到释放SCL线为高电平,传输才继续进行.

5.2.2 Reset (仅限管理界面)

5.2.2.1 Power On Reset

掉电时i2c应该进行复位,上电后应该复位完成。

5.2.2.2 Protocol Reset(协议复位)

同步问题可能导致master和slvae对当前正在传输的特定位位置、操作类型甚至正在进行的操作存在分歧。i2c没有明确定义的复位机制。以下步骤可能会强制完成当前操作,并使slave释放SDA。

  1. master应向slave提供多达9个SCL时钟周期(先低再高)
  2. 当每个周期SCL高时,master应监测SDA。
  3. 如果slave释放SDA,它将会拉高,并且master可以开始start操作。
  4. 如果SDA在整整9个时钟周期后保持低,则协议复位失败。
5.2.2.3 Reset Signal

如果实现了一个重置引脚。如果提供,在断言复位引脚时,自由侧应过渡到复位状态。状态过渡的延迟超出了本文件的范围。

5.2.3 Format

5.2.3.1 Control

在start信号后,i2c操作的前8位字应包括“1010000”,然后是一个读/写控制位。

1010000R/W
MSBLSB

lsb位表示操作是数据读取还是写。如果该位为高,则执行读取操作;如果该位被设置为低,则执行写操作;

在控制位传输完成后,slave应把sda信号拉低,确认接收成功。(发送应答)

5.2.3.2 Address and Data

在读/写控制位之后,地址和数据字以8位1 byte进行传输。数据首先用大端序进行传输。

5.3 Read/Write Operations

5.3.1 Slave Memory Address Counter (Read and Write Operations)

所有i2c slave都有一个内部的寄存器地址计数器,其中包含在最近一次读写操作中访问的最后一个地址,并增加1。

每当slave接收或发送数据字时,地址计数器就会递增。只要没有掉电,此地址应该保持有效。在对自由侧设备断电或复位时,从地址计数器的内容可能不确定。读写操作期间的地址滚动是从128字节内存页面的最后一个字节到同一页面的第一个字节。

5.3.2 Write Operations (BYTE Write)

在发送完设备地址(A0h)和确认之后的8位数据字地址之后才可以进行写操作。在收到这个地址(寄存器地址)后,slave应发送(ACK信号)来确认,然后记录第一个8位的数据。

在收到数据字后,slave应该发送ack信号进行应答,master如果想终止顺序写,应该发送一个stop信号。

如果发送start信号代替stop信号,那写入的数据应该丢弃。再接收到合法的stop信号后,salve写入数据到自己内部的内存上。slave在此写周期内禁用其管理接口输入,在内部内存写入完成之前,不得响应或确认后续命令

5.3.3 Write Operations (Sequential Write)

双线从应最多支持4个连续字节写入,不重复发送从地址和内存地址信息。顺序写入以与单字节写入相同的方式启动,但是主机主机在输入第一个字后不发送停止条件。相反,在slave确认接收到第一个数据字之后,master最多可以传输三个数据字。slave应在收到每个数据字后发送一个确认信号。master必须以STOP条件终止顺序写入序列,否则将中止写入操作并丢弃数据。

5.3.4 Write Operations (Acknowledge Polling)

一旦slave内部定时的写周期开始,就可以使用轮询来确定写操作何时完成。这涉及到发送一个启动条件,然后是设备地址字。只有当内部写周期完成时,从属才会响应出对后续命令的确认,表明读或写操作可以继续。

5.3.5 Read Operations (Current Address Read)

当前地址读操作只需要发送从地址读字(10100001),一旦slave发送ack确认,当前地址数据字将被连续选出。当master用NACK和STOP响应而不是确认时,传输将终止。

在这里插入图片描述

5.3.6 Read Operations (Random Read)

随机读操作需要在目标字节地址中加载一个虚拟写操作(也就是写设备地址和寄存器地址),这可以通过以下顺序来完成:

  1. 目标8位数据字地址在设备地址写入字(10100000)之后发送,并由从slave确认
  2. 然后master生成另一个开始条件(中止1010000写入)和通过发送设备读地址(10100001)读取的当前地址。
  3. slave确认设备地址,并连续呼出所请求的数据字。
  4. 当master用NACK和STOP响应而不是确认时,传输将终止。

在这里插入图片描述

5.3.7 Read Operations (Sequential Read)

  1. 顺序读取由当前地址读取或随机地址读取启动。
  2. 要指定顺序读取,master在每个数据字之后响应确认(而不是STOP)。
  3. 只要slave收到确认,它就应该连续发出顺序数据字。
  4. 当master用NACK和STOP响应而不是确认时,传输将终止。

在这里插入图片描述

在这里插入图片描述

5.4 2-wire Interface Timing

5.4.1 Timing Diagram

在这里插入图片描述

5.4.2 Timing Parameters

在这里插入图片描述

5.5 Write Operation Restrictions

1字节的位置应该用单字节写操作写入,而那些>1字节可以用多字节写操作写入。表5-3中定义的可写内存块的内容,除了第02h页之外,都是易失性的,在开机时所有位都设置为零。

4263667)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值