【篇十】I2C通信

本行总结如下

  • I2C通信特征
  • I2C通信时序图
  • 210的I2C控制器
  • I2C的应用:gsensor应用

I2C通信特征

    ▶ 接线特点:简单,只有两根线:SCL + SDA
        • SCL (serial clock):时钟线,传输CLK信号,一般是I2C主设备向从设备提供时钟的通道
        • SDA(serial data):数据线,通信数据传输信号线
    ▶ 串行,同步,非差分,低速率
        • 因为I2C的速率较低,双方通信距离又很近,所以使用电平信号,一般用在一个板子上的2个IC之间通信,传输数据量不大
    ▶ 主设备+ 从设备
        • 通信都是通过主设备主导发送或命令,从从设备按照I2C协议被动接受主设备的通信,并处理响应
        • 主或者从设备不是I2C决定,而是由通信双方决定,需软件配置
    ▶ 可以多个设备挂在一条总线上
        • I2C可以一对一通信,也可以一对多通信(一主设备多个从设备)
        • 一个主设备只能同一时间和一个从设备通信,其他设备处于等待状态,主设备负责调度总线决定从设备是否选择通信
        • 主设备识别从设备机制:I2C从地址机制,每个I2c从设备都有一个I2c从设备地址,主设备通过地址识别,地址在电路板 是唯一的
    ▶ 主要用途:Soc和周边外设之间的通信(EEPROM,电容触摸IC,各种sensor(传感器)等)

I2C通信时序图

    ▶ 时序:时间顺序,通信中时序指的通信线上按照时间顺序发生的电平变化,以及这些变化对通信的意义
    ▶ I2C总线状态:空闲,起始位,结束位
    ▶ 起始位和结束位是一个时间段,这段时间内SCL线是高电平,同时SDA线发生一个从高到底(结束位时从低到高)的下降沿(结束位时上升沿) 
    ▶ 数据位:

在每一个SCL上升沿时,对应的SDA的电平是高还是低来判断0还是1
        • I2C通信是以字节为单位的,每次传输是一个字节(8位)
        • 主设备开始每个周期时会先发送8位(7位从设备地址,1位读还是写标识)到总线,总线的每个从设备都会受到该信号,通过地址和自己的比较,相等就拿来处理,不相等
            就会忽略信号
        • 发送方发送一段数据后,接收方需要回应一个ACK,同一时间只有一个从节点会回应,并且不会携带任何信息
        • I2C总线同一时刻,主设备和从设备只会有一个在发,另一个再收
        • 起始位及之后的8个CLK都是主设备在发送信号,此时从设备只能读取,识别主设备发送的请求,第9周期后,按照协议规定从设备需要发送ACK给主设备,
            此时,主设备必须释放总线(主设备把总线置为高电平,然后不动,表示总线空闲状态),同时从设备拉低总线发送ACK回应给主设备

210的I2C控制器

    ▶ 框图相关
        • 时钟:来源PCLK_PSYS
        • I2C总线有(CON,DATA)两个寄存器,主要负责产生I2C通信时序,如发送起始位,结束位,接受ACK等的实现
        • 移位寄存器(Shift register),将代码中要发送的字节数据,通过移位寄存器编程一个位一个位的丢给SDA线上去发送/接受
        • 地址寄存器+比较寄存器(AddressRegister,Comparator)I2C做从设备时使用
    ▶ 主要寄存器 I2CCON、I2CSTAT、I2CADD、I2CDS
        • 时钟可以进过2级分频
        • I2CCON + I2CSTAT: 用来产生时序和I2C接口时序        
        • I2CADD:用来写自己的slave address
        • I2CDS:存储发送/接受的数据

I2C的应用:gsensor

    ▶ 结构框图


        • PWMTOUT3引脚控制gsensor的供电,默认gsensor是不通电的,当输出高电频时gsensor才会同电工作
        • gsensor的SDA和SCL接的是210的I2C端口0
        • 编程时在gsensor_init函数中要去初始化相关的GPIO,要把响应的GPIO设置为正确的模式和输入输出值
    ▶ 用途:手机,平板,智能手表等设备上,用来感受人的移动,获取一些运动方向性信息用来给系统作为输入参量
        • 重力加速度传感器,地磁传感器,陀螺仪等三个传感器结合起来,都是用来感受运动的速度,方位,旋转等信息的,所以现在最新的9轴传感器,就是把三者结合起来,
           运用一定的算法得出结论,目的是更加准确
    ▶ 科普:一般传感器的接口有2种,模拟接口和数字接口,
         • 模式接口:用接口电平变化作为输出,SOC需要用AD接口来对接这种传感器对他输出的数据进行AD转换,得到数字电压值,再用数字电压值去校准得到压力值
         • 数字接口:后来发展起来的,是在模拟接口的基础上,芯片内部集成了AD,直接(通过一定的总线接口协议,一般是I2C)输出一个数字值的参数,这样SoC直接通过总线
           接口初始化,读取传感器输出的参数即可(比喻 gsensor,电容触摸屏IC)
    ▶ 从设备地址注意:     
        • gsensor的I2C固定地址为0b0001111, I2C地址本身是7位的,最后一位是读还是写标识位。
        •  在gsensor通信时,主设备发给gsensor信息时,SAD应该是:0b0001110
        •                     主设备读取gsensor信息时,SAD应该是:0b0001111

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

源14

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

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

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

打赏作者

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

抵扣说明:

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

余额充值