I2C协议全流程

I2C协议其实没有什么,就是一个实时的双线协议,主要是其中的时序比较复杂,但是函数并不复杂,需要记住以下的几个要点。

要点:

(1)其数据发送的方向是先高位,再低位。而时钟和18B20都是相反的,都是从低位走高位的。

(2)这个协议中的函数比较少,就是起一个起始信号,终止信号,读时序信号,写时序信号,写字节函数,读字节函数(由于是实时的串口,所以读写都不需要用缓存装着,直接通过信号线就传输过去了)

(3)需要注意的是,读时序的话,最后不读了之后发送的是无应答,这个需要记住,这个时候读信号可以将ACK的应答拆分出来就好了。

(4)还有一个就是注意起始信号和终止信号的陷阱。

void Dri_EEPROM_Start()
{
    /*初始化的时候,是SCL = 1,然后SDA是下降沿*/
    // 初始状态的时候,SCL和SAD都是1
    SDA = 1;
    SCL = 1;
    SDA = 0;
    // 后面可以不用讲SCL = 0,因为我们养成了一个好的习惯,会将SCL = 0提前准备好
}

void Dri_EEPROM_Stop()
{
    /*终止的时候,由于不知道前面的SCL 和SDA的数值是多少,所以不能先开SCL = 1,因为这样的话,
    再对SDA产生改变的话,可能会触发下降沿,即初始化,同时,SCL = 0需要重置化,因为如果SDA = 0的话
    前面的SCL = 1可能为1,从而导致下降沿*/
    SCL = 0;
    SDA = 0;
    SCL = 1;
    SDA = 1;

    // 这样就可以了
}

(5)还有一点是:由于IIC协议可以挂载很多个设备,属于的是内部的驱动,而开发板上只有一个EEPROM,所以还得写一个函数,这个函数可以屏蔽掉设备地址,直接返回内部的结果就好了。

(6)在IIC协议中,在完成了一个写时序之后,都需要5ms的时间,来完成写周期,这个是需要记住的。

(7)由于IIC协议有起始信号和终止信号,所以IIC没有初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值