【江科大】STM32:I2C时序/数据帧

这篇具有很好参考价值的文章主要介绍了【江科大】STM32:I2C时序/数据帧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

IIC的时序基本单元

【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机

  • 起始条件如图:SDA先出现下降沿,然后SCL也下降变为低电平。
    这样做的目的是,可以让SCL以低电平开始低电平结束
  • 结束的条件是,SCL放手,回弹为高电平,接着SDA再放手,产生一个上升沿。回弹以后SCL和SDA均回到高电平。
    注意:其实和终止条件都是由主机产生的,从机不允许产生起始和终止,所以在总线空闲状态,从机必须始终双手放开。不允许主动跳出来,去碰总线。
    如果允许就是多主机模型了。

发送一个字节(数据传输,SCL高电平时不允许改变SDA)

发送一个字节:SCL低电平期间,主机将数据位依次放到SDA线上(高位先行),然后释放SCL,从机将在SCL高电平期间读取数据位所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次
即可发送一个字节.
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机

  1. 主机将数据依次放在SDA线上,指的就是想输出0就向下拉,变为低电平。输出1就放手变为高电平。
  2. 然后释放SCL,从机在SCL为高电平时读取SDA的电平(其实一般在上升沿就会把数据读走)。
  3. 读完第一位,主机拉低SCL,在SDA出现下降沿的时候,放数据。
  4. 放完以后,主机松手,SCL回到高电平,从机读取这一位
  5. 在SDA的同步下,依次进行主机发送和从机接收,循环8次,就可以发送8个数据,也就是一个字节(高位先行)
  6. 如果在传输的过程中突然进中断,那么主机的发送和从机的接收都会暂停,SCL,和SDA也会保持7. 当前状态一直延时,直到中断结束。主机继续控制SCL和SDA继续传输数据。
    SCL和SDA的控制权均为主机所有。

接收一个字节:

SCL低电平期间,从机将数据位依次放到SDA线上(高位先行),然后释放SCL,主机将在SCL高电
平期间读取数据位,所以SCL高电平期间SDA不允许有数据变化,依次循环上述过程8次,即可接收一个字节(主机在接收之前,需要释放SDA)
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机

  1. 主机在接收之前,需要释放SDA。(释放SDA就相当于切入到输入模式,其实可以理解为主机和所有设备均处于输入模式)
  2. 当主机要发送的时候,拉低SDA,当主机接收的时候释放SDA(不影响其他设备往SDA上放数据)
  3. 因为总线是线与的结构,只要有一个设备拉低了,总线就会变为低电平。
  4. 如果一直拉着总线不放手,那么无论其他设备发送什么数据,总线一直处于低电平。
    从流程上看,接收一个字节和发送一个字节是非常相似的。
    区别
    发送数据:低电平主机放数据,高电平,从机读数据
    接收数据:低电平从机放数据,高电平,主机读数据
    实线代表主机控制的总线,虚线代表从机控制的部分。
    图中SDA从实线变为虚线代表,主机在接收前,释放SDA回到高电平。交由从机控制。
    因为SCL始终都是由主机控制,所以从机数据变换基本都是贴着SCL下降沿进行的。(原因,慢一点,主机可不等你,时钟就变化了)
    而主机可以在SCL高电平的任意时刻读取。

发送应答:

主机在接收完一个字节之后,在下一个时钟发送一位数据,数据0表示应答,数据1表示非应答
(主机发送应答)

接收应答:

主机在发送完一个字节之后,在下一个时钟接收一位数据,判断从机是否应答,数据0表示应答,数据1表示非应答(主机在接收之前,需要释放SDA)
(从机接收应答)
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机
主机接收完一个字节,主机要发送数据,主机将SDA拉为低电平,然后在SCL为高电平时,从机读取应答位,数据为0代表应答。
如果从机没有收到应答,则会释放SDA,防止干扰主机的操作。
主机发送完一个字节,主机释放SDA,从机立刻将SDA拉到低电平。然后在SCL为高电平时,主机读取应答位,如果为O表示应答,确实有人收到了。

完整的数据帧

指定地址写

(Slave Address)对于指定设备,
(Reg Address)在指定地址下,(寄存器地址,指令控制字,存储器地址)
(Data)写入指定数据
S:起始位
P:终止位
RA:应答位(接收从机的应答位)
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机

相同型号的芯片地址是相同的。那么同时存在多个相同芯片给的地址怎么办?

这就需要用到地址中的可变部分,一般器件地址的最后几位都是可以在线路中改变的。
比如MPU6050的最后一位就可以由板子上的AD0引脚确定。这个引脚接低电平,它的地址就是1101000,高电平110100
AT24c02地址的后三位,都可以分别由这块板子的A0,A1,A2引脚来确定。
1010000
比如0引脚接低电平,地址对应的位就是0
高位由厂商决定,低位可以自己换。

当前地址读

  • 对于指定设备(Slave Address)
  • 在当前地址指针指示的地址下,读取从机数据(Data)
    【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机
  • 主机寻址,最后一位读写标志位1,表示主机读数据。发送一个字节以后,接收从机的应答位。
  • 主机释放SDA,从机得到主机的允许进行写操作,然后,主机在SCL高电平,读取SDA上的数据。
    接着发送一个应答位(SA),告诉从机收到了。
    SA:发送应答位

图中可以看到,主机并没有指定从机的寄存器地址,那主机读取的是从机的那个寄存器呢?

在从机中,所有的寄存器都被分配在一个线性区域,并且会有一个单独指针指向一个寄存器。
般这个指针上电默认,一般指向0地址,并且每写入一个字节和读出一个字节,这个指针就会自增一次。类似于下图
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机

指定地址读

对于指定设备(Slave Address),在指定地址(Reg Address)下,读取从机数据(Data)
sr:重复起始条件
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机
SA=1,代表主机不想要数据,从机就会释放SDA
SA=0,从机就会继续发送数据,主机接收数据。
【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机

指定地址写()多个字符,读也是同样的操作,多次操作最后的读部分。

【江科大】STM32:I2C时序/数据帧,STM32学习,stm32,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-823463.html

到了这里,关于【江科大】STM32:I2C时序/数据帧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【STM32】STM32学习笔记-软件I2C读写MPU6050(33)

    I2C(Inter-Integrated Circuit)总线 是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。 串行的 8 位双向数据传输位速率在标准模式下可

    2024年01月21日
    浏览(64)
  • 【STM32】STM32学习笔记-硬件I2C读写MPU6050(35)

    I2C(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。 串行的 8 位双向数据传输位速率在标准模式下可

    2024年01月25日
    浏览(63)
  • STM32 HAL库函数学习 I2C篇

    本篇内容讲述STM32的硬件IIC功能。硬件IIC的使用在F1系列上可能会有问题。本次使用的测试平台是H7,用于AT24C02芯片的读写正常,暂不清楚在其他芯片上使用是否正常。 1、HAL_StatusTypeDef HAL_I2C_Init (I2C_HandleTypeDef * hi2c) I2C初始化函数,使用CubeMx生成。需要选中I2C硬件指定的IO口。

    2023年04月08日
    浏览(42)
  • 【STM32学习】——I2C通信协议&MPU6050姿态传感器&软件I2C读写MPU6050

    ​   目录 前言 一、I2C通信协议 1.简介 2.硬件电路设计 3.I2C时序(软件)

    2024年02月16日
    浏览(56)
  • 【STM32学习】——STM32-I2C外设&硬件读写MPU6050&软硬件读写波形对比

    目录 前言 一、I2C外设 二、硬件I2C操作流程 1.主机发送时序 3.其他时序

    2024年02月10日
    浏览(49)
  • 电脑传输数据STM32模拟I2C显示实时画面到OLED

    写的不好,还望大家指正,有的地方引用了一下大佬的代码。 一、所需硬件: STM32F103C8T6 USB转串口模块 OLED 128*64显示屏 STLINK 二、代码部分 1.stm32串口部分代码 2.stm32OLED屏幕部分代码 3.主程序 4.电脑通过opencv库截取电脑当前1080p一帧画面,并对图片二值化处理,通过电脑端编写

    2024年02月13日
    浏览(48)
  • 【STM32 CubeMX】I2C层次结构、I2C协议

    在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,广泛应用于连接各种外设和传感器。理解I2C的层次结构、协议和硬件结构对于STM32微控制器的开发至关重要。通过STM32 CubeMX提供的图形化配置工具,我们能够更轻松地理解和配置I2C通信,同时深入了解

    2024年02月22日
    浏览(81)
  • STM32 I2C

    目录 I2C通信  软件I2C读写MPU6050 I2C通信外设 硬件I2C读写MPU6050 I2C通信 R/W:0写1读 十轴:3轴加速度,3轴角速度,3轴磁场强度和一个气压强度  软件I2C读写MPU6050 MyI2C.c MPU6050.c MPU6050_Reg.h(寄存器) main.c I2C通信外设 GPIO口需要配置为复用开漏输出模式。复用:就是GPIO的状态是交由

    2024年02月19日
    浏览(49)
  • STM32---I2C

    目录                                       一.I2C协议 1.什么是I2C协议?  2.物理层特性                                     二.协议层 1.I2C读写过程 2.I2C外设 3.I2C外设通讯过程              三.I2C库函数                       四.EEPROM 写操作: 读操作:      

    2024年02月16日
    浏览(48)
  • STM32模拟I2C获取TCS34725光学颜色传感器数据

    TCS34725是RGB三色颜色传感器,和TCS34727都属于TCS3472系列,在电气特性上略有差别,TCS34727相比TCS34725在I2C总线的访问电平上可以更低,而在I2C软件访问地址方面则一致。 TCS3472内部有4个PD(光电二极管),一个接收clear light(净光,未做任何处理),另外三个分别接收Red, Green,

    2024年02月16日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包