I2C通信协议
I2C简介
串口通信的缺点 就是一个串口只能连接一个设备
无法连接多个设备
总线的概念
一个串口只能连接一个模块 TX这条路只能发送数据据 RX这条路只能接收数据 效率十分有限 但是总线(共享通信链路)相当于搭建了一条马路 能够进行多向数据的接收和发送
I2C总线
两根线分别为SDA(数据线) 和SCL(时钟线)
SCL负责传递时钟信号 发送一个个脉冲信号 (打节拍) SDA负责发送数据
主机与从机
主机的职责
当从机1需要发送数据 从机2也要发送数据 会发生冲突 需要主机来进行管理
1.波特率的选择
2.数据通信的方向
主机可以主动读取从机的数据(绿色的箭头) 也可以主动的发起数据传输(粉色的箭头) 不存在从机与从机之间进行数据传输
数据的发送和接收
总结的来说就是第一首先是由主机发起通信 开始 然后向总线发送数据 (7位地址 1位读写)这个数据就是从机的地址加上读写的操作 如果为0就是主机向从机发送数据 如果为1就是主机去读取从机的数据 然后完成数据的交换 然后由主机主动结束数据的传输
开漏和线与
A B C代表着从机 1 2 3 等只有A B C都为1逻辑与才会输出1 只要有一个为0就会输出0
SCL信号的产生
时钟信号是由主机产生的 所以从机的scl开关全部写1 (高阻态) 断开 然后闭合主机的蓝色SCL开关 就输出一个0 断开开关就输出一个1(上拉电阻) 这样不断地闭合断开开关就可以输出一个时钟信号
SDA信号的产生
主机发送数据就断开所有从机 从机的sda写1断开 然后也是通过闭合和断开开关发送数据0和1 从机向主机也是如此 从机二发送数据 断开从机1 3 主机开关然后闭合和断开开关控制SDA发送数据0和1
SCL负责打节拍 SDA负责传输数据
一个周期发送一个bit位 比如第一个周期(第一个方波)就发送数据0 只有SCL为低电平 SDA的电平才可以发生变化 SCL低电平时发送方准备数据 高电平发送方接收数据 SCL为高电平的时候 SDA的电平不允许发生变化!!!!
I2C的数据帧格式
数据帧概述
空闲
主机和从机的开关都断开 所以SDA和SCL都呈现出高电平
起始位和停止位
注意是在SCL为高电平的情况下改变SDA 的电平
寻址与应答
数据的发送和应答
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!