浅谈iic时序

一、iic通信核心要点

8c726b4e8c1144f9b69dfa048161af2c.png

在iic通信中,进行数据传输的时候,遵循在scl时钟线高的时候保持sda电平稳定,这个电平值就是要写入的值,然后,在scl时钟线拉低的时候去改变sda上的值,达到自己想要输出的值

所以说,一般scl高电平的时候,sda都是稳定的电平

但是,起始信号、结束信号、重开信号(SR)不同,他们可以也必须是在scl高电平的时候改变,以此来彰显不同

二、读写寄存器的时序

1、写寄存器

866d1439491d4560add0c23e5aa21092.png

2、读寄存器

db91606c673e48aca5aa06eb63b65513.png

三、过程中各种信号解释

首先,不管是读还是写寄存器,开始都是需要走下面这一步流程,目的是为了确定从机地址,然后要操作从机哪个地址的寄存器

start信号,7位从机地址+写,(从机ACK),要操作的寄存器地址,(从机ACK)

(1) start信号:scl高电平的时候,SDA输出一个下降沿

(2) stop信号:scl高电平的时候,SDA输出一个上升沿

(3) restart信号

restart信号被用于主机向从机读取的时候,因为这其中存在一次传输方向的变换,所以需要进行一次方向的变换。前面我也提到了,不管是想给从机写还是想从从机读取,最开始都是一个写入方向,写入从机地址,写入要通信的寄存器地址。因此,如果是要往从机写数据,那好,方向不变,已然是写这一个方向,就用不到restart信号,但如果需要读,那么方向就变了,从原来的写变成读,就需要用到restart信号。

start 和 restart 信号的区别:restart需要占据一个时序,也就是一个上升一个下降这样一个时序周期,而start不需要,它只要是scl时钟线是高电平就行

(4) ack和nack信号

ack也占一个时序,nack也占一个时序

ack和nack的区别:ack表示不再需要后续,nack表示已经结束,在连续读取寄存器的时候需要,另外,nack只有主机主动发送这一种情况,从机发送的都是ack

(5) 其他需要注意的点:

iic两条总线也就是数据线和时钟线,都是需要上拉的,就像下面这样

45a7a49aa8f644c8980bf7e181296331.png

如果之前是低电平,直接配置成输出模式,因为有上拉电阻的存在,他就会直接输出1,但我们可能傻傻的认为,它还没输出1呢,用的时候要小心,另外,这种变化操作都在scl低电平的时候去做,切记,切记!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翔在天上飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值