查看: 1074|回复: 1

[原创] 【经验分享】RT1010 使用 LPI2C 时钟延展

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3300

    主题

    6547

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32034
    最后登录
    2024-4-26
    发表于 2021-12-10 13:31:54 | 显示全部楼层 |阅读模式
    RT1010 使用 LPI2C 时钟延展


    1 概述
    I2C 是在产品项目开发中常用到的通讯接口,i.MXRT 系列的 MCU 提供了功能强大的 LPI2C 模块。时钟延展功能便是其中之一。RT1010 支持了四种时钟延
    展方式。本文将介绍从机设备如何应用该功能并且描述了相关的要点。硬件环境使用的是 RT1010 EVK (版本 C) ,软件环境为 SDK 2.10.0 版本。
    具体的例程路径为:
    SDK_2_10_0_EVK-MIMXRT1010\boards\evkmimxrt1010\driver_examples\lpi2c\interrupt_b2b_transfer
    2 LPI2C 的时钟延展
    时钟延展是通将 SCL 保持为低电平来暂停传输,直到 SCL 再次被释放到高电平,传输才能继续进行。时钟延展通常可以分为字节级和比特级。在字节级的时钟延展,设备通常能够以较快的速度接收数据字节,但需要更多的时间用来存储数据或者准备即将发送的数据。在接收完一个字节数据后从机设备可以将 SCL 保持为低电平,强制让主机设备进入等待状态,直到从机设备完成准备进行下一个字节的传输。在比特级的时钟延展,每一个 bit 都是可以进行时钟延展而不需要传输整个字节后再进行时钟延展。
    注意
    在使用该功能前,需要确认主机设备和从机设备是否支持时钟延展功能。因为:
    • 不是所有的 I2C 从机设备都支持时钟扩展功能,例如某些传感器和存储设备。

    • 不是所有的 I2C 主设备支持时钟扩展,例如使用 GPIO 模拟的 I2C 或者 FPGA 上模拟的 I2C。
    3 RT1010 平台 LPI2C 的时钟延展
    i.MX RT1010 Processor Reference Manual(文档 IMXRT1010RM)列出了四种时钟延展功能,如 图 1 所示。
    51.png
    从我个人的观点出发,我认为用下面的方式进行描述会更准确:

    Using Following the Nth clock pulse instead of During the Nth clock pulse.


    3.1 接收地址信息后使能时钟延展
    在从机接收完主机发送的地址信息且 AVF 置位后,从机获得 SCL 的控制权,开始持续拉低 SCL 开启时钟延展。那么什么时候
    结束呢,从硬件状态机的角度看,当 AVF bit 被清除,时钟延展结束,主机获得 SCL 的控制权。举个例子,在接收到地址信息
    后,使用 delay 函数强行延时 500 μs 后再去清除 AVF bit, 图 2 为逻辑分析仪采集的波形。
    52.png
    图 2. 接收地址信息后使能时钟延展
    从 图 2 可以看到,两次时钟间隔约 491 μs,基本上与 500 μs 的预期相匹配。并不是精确的 500 μs 的原因是延时函数没有使用
    定时器精确延时。
    3.2 从机发送数据前使能时钟延展
    在从机接收到主机的地址信息和读指令后,TDF 将会置位,则此时从机获得 SCL 的控制权。同样是在清除 TDF bit 之后,主机
    再次获得 SCL 的控制权。在这个过程中,从机可以根据主机发送的信息,把要发送的数据准备好,再释放 SCL 的控制权。同
    样举个例子,再清除 TDF bit 之前等一等,这次等的长一点 800 μs。图 3 为波形结果,两个数据传输过程中 SCL 线被持续拉低
    约 800 μs。
    53.png
    图 3. 从机发送数据前使能时钟延展
    3.3 从机接收数据前使能时钟延展
    在从机接收到数据之后,RDF 会置位,此时从机会获得 SCL 的控制权。同样是在清除 TDF bit 之后,主机再次获得 SCL 的控
    制权。在清 TDF 标志位前增加 1000 μs 的延时,波形如 图 4 所示,两次数据传输过程中 SCL 被持续拉低约 1000 μs。
    54.png
    图 4. 从机接收数据前使能时钟延展
    3.4 从机发送 ACK/NACK 前使能时钟延展
    当主机把数据(地址信息或者数据信息)发送给从机传送完第八个 bit(或者说是第八个时钟)之后,从机获得了 SCL 的控制权
    限。在此时需要手动向 STAR 寄存器中最后一位写 0 或者 1,向主机反馈 ACK 或者 NACK。在手动发送 ACK/NACK 之前,可
    以根据主机发送的信息准备数据或者存储数据。举个例子,从机在接收到主机发来的地址信息后(前 8 个时钟),增加一个 500

    μs 的延时然后向寄存器内写 0 向主机发送 ACK 的波形见 图 5,可以看到第八个和第九个 CLK 时钟的间隔被拉长。
    55.png
    图 5. 从机发送 ACK/NACK 前使能时钟延展
    从机接收数据时同样加一个 500 μs 的延时函数。波形见 图 6 同样可以看到,第八个和第九个的时钟被拉长了。
    56.png
    图 6. 从机接收 ACK/NACK 后使能时钟延展
    3.5 如何使能时钟延展功能
    在 图 7 高亮部分写 true 即可使能对应的时钟延展功能。
    57.png
    图 7. 如何使能时钟延展功能
    4 要点
    在使用时钟延展的功能后,同样不能忽略的一个要点是要满足 I2C 的 AC timing,即数据的建立时间和保持时间。对于不同的

    工作速度,I2C 对于这两个参数的时间要求也是不同的,图 8 为 I2C 的规范上相关信息的截图。


    完整版请查看









    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    6 小时前
  • 签到天数: 1480 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92787
    最后登录
    2024-4-27
    发表于 2021-12-10 14:14:01 | 显示全部楼层
    感谢分享,时钟延展还是新鲜的玩意儿呢
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-27 22:42 , Processed in 0.111207 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表