• I2C 协议详解(二)—— 多组数据连续发送


    前面的章节讲述了单组 8 位数据的发送,但是仅仅发送单组数据往往是不够的, 因为实际上I2C协议的芯片需要传输多组数据。在使用 PCF8563和 AT24C02 之类的芯片之前,我们需要准备好实现多组数据的发送代码。

    I2C 的多组数据连续发送与单组数据稍有差异,时序图如下:

    上图由于长度关系只展示两组数据,实际上的 I2C 通讯的数据一般在 4组以上。时序也是类似的,这里不再赘述。

    经过多次调试实现的 I2C 多组数据连续发送代码如下:

    代码将 I2C 的信号传输分为4个函数:

    1. 发送起始位 i2c_start_bit
    2. 发送数据位 i2c_data_bit
    3. 发送应答位 i2c_ack_bit
    4. 发送停止位 i2c_stop_bit

    I2C 速率较高,在 I2C 的发送过程中如果进行计算数据发送会大大的延迟。所以,在发送前必须计算完所有需要发送的数据。

    由于 Keil C51 不支持动态数组,这里的声明的二维数组为 8 * 8的。这段代码允许连续发送的数据不超过 8 个,如果数据超过这个限制就需要做出修改。

    逻辑分析仪给出的结果如下:

    逻辑分析仪输出了四位数据 01、02、03、04,可以看到代码工作的还算不赖。由于没有接芯片,所以逻辑分析仪显示 ACK 位没有应答。

    (●'◡'●),这样的话,I2C 的部分就基本准备结束了,下一章节将以 PCF8563 为例,用 I2C 协议实现 RTC 的功能。

  • 相关阅读:
    Oracle错误一览表
    Oracle的基本操作
    oracle 从select的结果update其他表
    生成注册码的一种算法
    ASP.NET程序中常用的三十三种代码
    C# 中获取CPU序列号/网卡mac地址
    C# 断点续传原理与实现
    Cache与主存地址映像计算例题
    javac命令
    VS2010快捷键大全
  • 原文地址:https://www.cnblogs.com/SummerSunnyDay/p/14615204.html
Copyright © 2020-2023  润新知