当前位置: 首页 > news >正文

I2C

任何一个CPU要和某个设备交互,就需要使用某种双方约定好的通信协议。这种通信协议,从OSI七层计算机网络架构上来说,从最高层应用层的HTTP,传输层的TCP,到底层数据链路层的I2C,SPI,CAN等。本文来介绍I2C协议,这是本科刚开始学嵌入式时就接触到的非常基础的东西了,工作后在这回顾整理一下。

MCU用这种协议来和存储器等外部设备通信,是一种低速、简单的协议,只有一根时钟线和一根数据线。数据线 SDA 和时钟线 SCL 都是双向线路,都通过一个电流源或上拉电阻连接到正的电压,所以当总线空闲的时候,这两条线路都是高电平。总线上数据的传输速率在标准模式下可达 100kbit/s 在快速模式下可达 400kbit/s 在高速模式下可达3.4Mbit/s。把某个外设挂载到I2C总线上,MCU就能使用I2C协议和这个外设通信。

一个MCU可能要和多个外设通信,因此需要知道外设地址。知道了地址之后,就可以使用I2C读写时序来发出信号、和外设通信了。
image

时序

MCU准备发送数据,先要告知外设:“我要发数据了,你准备好接收”。
当 SCL 为高电平期间,SDA 从高电平跳到低电平。该信号由主机发出,在起始信号产生后,总线就处于被占用状态,准备数据传输。

接着开始传输数据。进行数据传送时,只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。时钟信号为高电平期间,数据线上的数据必须保持稳定。I2C数据每传输一个字节,就在下一个时钟脉冲期间释放数据线,由接收器反馈一个应答信号。应答信号为低电平时,规定为有效应答位( ACK 简称应答位),表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位(NACK),一般表示接收器接收该字节没有成功。

发送完成之后,MCU要告知外设:“我说完了”。当 SCL 为高电平期间, SDA 由低到高跳变,就表达了这个意思。在停止信号发出后,总线就处于空闲状态。

IIC 总线的 SDA 和 SCL 两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。

这里还有一个问题是,MCU怎么告诉设备要读/写设备上哪个地址的数据?一般在发送设备地址后会发送设备的内存地址,然后再结合设备属性进行单字节操作或单页操作等。一般根据应答/非应答信号确定是否继续。

写时序

整体的写时序如下

MCU首先在 IIC 总线上发送起始信号,这时总线上的从机都会等待接收由主机发出的数据。接着MCU发送从机地址+0(写操作)组成的 8bit 数据,从机接收到该 8bit 数据后,检验是否是自己的设备的地址,假如是自己的设备地址,那么从机就会发出应答信号。主机在总线上接收到有应答信号后,才能继续向从机发送数据。

image

读时序

读时序如下

依然是MCU发出起始信号,接着发送从机地址+1(读操作)组成的 8bit 数据,从机接收到数据验证是否是自身的地址。验证是自己的设备地址后,从机就会发出应答信号,并向主机返回 8bit 数据,发送完之后从机就会等待主机的应答信号。假如主机一直返回应答信号,那么从机可以一直发送数据,就是图中的(n byte + 应答信号)情况,直到主机发出非应答信号,再发送停止信号,从机才会停止发送数据。

image

http://www.sczhlp.com/news/564.html

相关文章:

  • 小新Pad2022刷机记录
  • 每日随笔
  • 01API语法与路由配置详解
  • 图 - -刘-j-x
  • 02路由配置与参数解析详解
  • 03Gin中间件开发与鉴权实践
  • day27
  • 浅析扫描线
  • 入门
  • CRUD
  • 暑期周总结(五)
  • 用 Python 实现多干扰线图像验证码的识别系统
  • Python 实现多干扰线图像验证码识别
  • 学习链接
  • helm环境快速部署实战
  • PlantUML绘制时序图
  • Datawhale AI夏令营 Dify入门 Task05 智能客服
  • ICPC 2024 网络赛(I)
  • LED控制原理
  • 【ESP8266】Vscode + platformIo + Esp8266 新建工程 关键步骤
  • Revo Uninstaller Pro专业版领取:2025最佳Windows软件卸载工具
  • 北大 2024 强基数学
  • 付老师名言
  • [羊城杯 2021]Baby_Forenisc-内存取证-Volatility 2工具下载使用- Volatility 2.6 的 Linux 免安装版(Standalone 版本)
  • 开发集合控件的拖拽流程优化——以TreeView为例
  • 第七天
  • 基于深度学习的YOLO框架的7种交通场景识别项目系统【附完整源码+数据集】
  • 2-2 点灯例程(寄存器开发) - LI,Yi
  • 【Datawhale AI夏令营--task2】科大讯飞AI大赛(大模型技术)
  • 记录一次vue3+mqtt.js连接华为云mqtt的成功经历