I2C总线串行串行输入输出结构

I2C总线串行串行输入输出结构

                本文章以8XC552(飞利浦的一款微控制器)的IIC总线串行串行输入输出结构为例,深入理解IIC总线协议:
           
                IIC总线的串行输入输出结构保证了IIC总线的数据寄存器中能保存总线上的最新数据。SDAT和ACK组成一个9为的移位寄存器,它组成一个环状结构。串行输出的同时不断采入总线上的数据ACK标志位由总线控制,并可以由CPU存取(存入1对应的是非应答,存入0对应的应答)。在SCL线上的时钟脉冲的上升沿,串行数据通过ACK标志位存入SDAT,串行数据在SCL时钟脉冲下降沿沿BSD7移出当一个字节数据移入SADT后,SDAT中的数据有效,控制逻辑在第9个时钟脉冲周期送出应答位。
              为什么IIC总线进行数据发送时,时钟信号为高电平期间,数据线上的数据必须保持数据稳定???这是因为会在高电平期间采集总线上的数据,如果此时总线上的数据不稳定,会导致采集的数据和发送的数据不一致,从而关闭发送(类似仲裁失败)。协议规定只有在时钟信号为低电平期间,数据线上的高电平或低电平才允许变化,这是因为BSD7中的数据是在时钟下降沿发出的,且不会在时钟脉冲低电平期间采集总线上的数据。
             在CPU对SDAT写入时,SDAT7装入BSD7,这是向SDA线上发送的第一位数据,9个时钟脉冲后SADT中的8位数据发送到SAD线上,应答位出现在ACK中,这样发送到总线上的数据又返回到SDAT中。
              SDA寄存器,包含个待发送的数据或一个刚收到的数据字节,发送时,数据总是从右向左移位。数据移出时,总线上的数据同时移入,移位寄存器的这种结构保证了总线竞争失败时数据不会丢失。它以并行的方式与内部总线相连,以串行方式与SDA相连。发送数据时,由内部总线装入到SDAT中,发送时,数据以串行从串行通道返回SDAT中。接收时,装入新接收的SDA线上的数据。

 

查看了很多的资料,都是这样描述数据位的传输: 在I2C总线上传送的每一位数据都有一个时钟脉冲相对应(或同步控制),即在SCL串行时钟的配合下,在SDA上逐位地串行传送每一位数据。进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。只有在SCL为低电平期间,才允许SDA上的电平改变状态。尤其对“进行数据传送时,在SCL呈现高电平期间,SDA上的电平必须保持稳定,低电平为数据0,高电平为数据1。只有在SCL为低电平期间,才允许SDA上的电平改变状态”这句话不甚理解。

    带着这个问题,我在图书馆找了好几天的资料。终于弄懂了。


每bit数据定义 

下面再来看一下IIC总线时序的具体定义:


        其中,是数据建立的时间;是数据保持时间。上升沿将数据送到SDA线上,是建立时间。高电平期间数据稳定,等待下降沿读取SDA线上的数据。下降沿从SDA线上读取数据,下降沿之后的是保持时间。

        下面是发送数据的时序变化具体分析。


         再来看一下接收数据时的时序的变化。


           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值