STM32F10x_模拟I2C读写EEPROM(1)(附时序图)

文章目录

  • 前言
  • 一、主机/从机,发送器/接收器
  • 二、I2C总线
    • 1. SDA / SCL
    • 2. 总线空闲状态
  • 三、起始 / 停止信号
    • 1. 时序图
    • 2. 起始信号
    • 3. 停止信号
  • 四、数据位传输
    • 1. 时序图
    • 2. 注意事项
  • 五、应答位信息
    • 1. 应答位信息产生及发送过程
    • 2. 应答信号ACK
    • 3. 无应答信号NACK
  • 六、小结


前言

  • 模拟I2C读写函数,可以去看我这篇博文
    《STM32F10x_模拟I2C读写EEPROM(2)(切换SDA方向 + 读ACK位 + 完整代码)》

  • 读写E2函数(带备份区+校验和判断),可以去看我这篇博文
    《STM32F10x_模拟I2C读写EEPROM(3)(读写E2备份区 + 校验位 + 完整代码 + 应用实例)》

  • E2的中文资料可以到我博客资源里下载,没有积分下载的,可以评论Ding我o( ̄▽ ̄)ブ

一、主机/从机,发送器/接收器

  • 发送器: 将数据传送到总线的器件

  • 接收器: 从总线接收数据的器件
     

  • 主机:一般指MCU

  • 从机:此处为EEPROM(后面均简称为E2

    • 主机 数据进从机 → 此时发送器主机接收器从机
    • 主机从机 数据 → 此时发送器从机接收器主机
    • 即,发送器既可以是主机也可以是从机,接收器同理。
       

二、I2C总线

  • 1. SDA / SCL

    • 一个I2C总线只包括两个总线:

      • 串行数据线SDA):

        • 双向串行数据输入输出口,用于存储器与单片机之间的数据交换。

        • 主机 / 从机 均可控制 SDA 高低电平。
           

      • 串行时钟线SCL) :

        • 串行时钟输入,通常在其上升沿将SDA上的数据入存储器,而在下降沿从存储器出数据并送往SDA。

        • 仅主机控制 SCL 高低电平。
           

  • 2. 总线空闲状态

    • I2C总线的SDASCL两条信号线同时处于高电平时,规定为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。
    • 只有在总线空闲时才允许启动数据传输。
       

三、起始 / 停止信号

  • 1. 时序图

    STM32F10x_模拟I2C读写EEPROM(1)(附时序图)_第1张图片
  • 2. 起始信号

    • 时钟线 SCL 保持高电平期间 数据线 SDA 电平从高到低的跳变作为I2C总线的起始信号
       
  • 3. 停止信号

    • 时钟线 SCL 保持高电平期间 数据线SDA 电平从低到高的跳变作为I2C总线的停止信号
       

四、数据位传输

  • 1. 时序图

    STM32F10x_模拟I2C读写EEPROM(1)(附时序图)_第2张图片
  • 2. 注意事项

    • 1、SCL电平为高时,不可以改换SDA的电平(但是在 I2C总线的起始和结束时例外)。
    • 2、SCL电平为低, 可以改换SDA的电平(准备待传输的SDA数据)
    • 3、在SCL上升沿的过程将SDA数据发送出去。
       

五、应答位信息

  • 1. 应答位信息产生及发送过程

    STM32F10x_模拟I2C读写EEPROM(1)(附时序图)_第3张图片
    • 1、I2C总线的数据都是以字节(8位)的方式传送的,发送器每发送一个字节之后,
    • 2、主机在时钟的第9个脉冲期间把SCL电平拉低
    • 3、发送器 释放数据总线(把SDA电平拉高),
    • 4、接收器 拉高 / 拉低 SDA,表示一个应答位信号(无应答信号NACK / 应答信号ACK)。
    • 5、主机SCL电平拉高,在上升沿处,传输应答位信息。
       
  • 2. 应答信号ACK

    • 接收器SDA电平拉低,表示一个应答信号ACK

    • 两个用途:

      • 1. 表示一个字节数据成功接收;

      • 2. 主机接收器时(主机进行 操作),未收到最后一个字节前,表示发送器可继续发送数据;
         

  • 3. 无应答信号NACK

    • 接收器把SDA电平拉高,表示一个无应答信号NACK

    • 两个用途:

      • 1. 一般表示接收器未成功接收数据字节;;

      • 2. 主机接收器时(主机进行 操作),它收到最后一个字节后,主机(接收器)应发送一个NACK信号,以通知 从机(发送器) 结束数据发送,并释放数据总线,以便主机(接收器) 发送一个停止信号STOP。;
         

六、小结

  • 写的着急,欢迎纠正
  • ☆⌒(*^-゜)v THX!!
  • 后续还会完善增加内容
  • 码字不易,记得点小心心 ( •̀ ω •́ )✧

你可能感兴趣的:(#,模拟I2C读写EEPROM,-,笔记,stm32,单片机,eeprom,模拟I2C)