0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

i.MX RT1010的I2C Slave时钟延展功能小记

jf_pJlTbmA9 来源:恩智浦MCU加油站 作者:恩智浦MCU加油站 2023-09-27 16:22 次阅读

最近客户在使用i.MX RT1010的I2C作为从机设备与主机通讯,使用了时钟延展的功能(clock stretching)。在开发过程中遇到了一些小烦恼和小细节,在此呢,也写下一篇文档予以总结。

什么是时钟延展

首先,简单介绍一下什么是时钟延展。时钟延展是指从机通过将SCL拉低以暂停数据传输的一个过程,在暂停过程中,从机可以有更多的时间处理接收到的数据,或者准备即将发送的数据。在相关的处理和准备完成之后,将交出SCL的控制权,主机继续控制SCL的节奏进行数据的收发。换句话说,时钟延展是从机跟不上主机的速度,让老司机等等它,啊不,是让主机等等它的操作。

时钟延展通常分为两种,一种是字节级(byte)的时钟延展,一种是比特级(bit)的时钟延展。字节级的时钟延展是按照字节为单位开展,每一个字节收发结束之后启动。比特级则是每个数据bit都进行延展,强行让master慢下来。

在查阅相关资料的过程中发现,并不是所有的I2C从机设备都支持时钟延展,例如I2C的传感器,部分存储设备;也并不是所有的主机设备也支持时钟延展,例如使用IO口模拟实现的I2C或者是FPGA上实现的I2C。因此在使用之前,需要检查器件自身是否支持时钟延展。

四种时钟延展功能

在我们i.MX RT1010上总共支持4种字节级的时钟延展:

wKgaomUD8x2AckpuAAIHSQxPjXE815.png

下面我们将对这四种时钟延展的功能进行简要介绍,以下介绍均为从机视角。

延展功能1:收完地址等一等

在从机接收完主机发送的地址信息后,且AVF 置位,则此时从机获得SCL的控制权,开始持续拉低SCL开启时钟延展。那么什么时候结束呢,从硬件状态机的角度看,当AVF bit被清除,时钟延展结束,主机获得SCL的控制权。

举个例子,用我们SDK工程在接收到地址信息后强行延时500us再去清除AVF bit, 看看波形是怎样的:

wKgZomUD8x-AQPa7AAEBy7k4A2g628.png

从图中可以看到,两次时钟间隔约491us,基本上与500us的预期相匹配。并不是完美的500us的原因是,延时函数没有使用定时器精确延时。

延展功能2:发送之前等一等

在从机接收到主机的地址信息和读指令后,TDF将会置位,则此时从机获得SCL的控制权。同样是在清除TDF bit之后,主机再次获得SCL的控制权。在这个过程中,从机可以根据主机发送的信息,把要发送的数据准备好,再释放SCL的控制权。同样举个例子,再清除TDF bit 之前等一等,这次等的长一点800us。

wKgaomUD8yGAA7uBAADgwDdllBY656.png

延展功能3:接收之前等一等

在从机接收到数据之后,RDF会置位,此时从机会获得SCL的控制权。同样是在清除TDF bit之后,主机再次获得SCL的控制权。拉个波形看看,在清标志位前拉个1000us的延时,波形如下图所示。

wKgZomUD8yKAIhxsAACR5KBp8ds478.png

延展功能4:手动回ACK

这里是指,当主机把数据(地址信息或者数据信息)发送给从机后,在传送完第八个bit(或者说是第八个时钟)之后,从机即获得了SCL的控制权限,在此时需要手动向STAR寄存器中最后一位写0或者1,以向主机反馈ACK 或者NACK。在写0之前,我们增加一个500us的延时,地址信息的波形见下图,可以看到第八个和第九个CLK时钟的间隔被拉长。

wKgaomUD8ySAfplsAADdgFrtRnw389.png

从机接收数据的信息见下图,同样可以看到,第八个和第九个的时钟被拉长了。

wKgaomUD8yaAPvw0AADg34dgIyw602.png

时钟延展的时序要求

在使用时钟延展的功能后,同样不能忽略的一个要点是要满足I2C的AC timing,即数据的建立时间和保持时间。对于不同的工作速度,I2C对于这两个参数的时间要求也是不同的,下图为I2C的规范上的截图。

wKgaomUD8yiATM5AAAjuj8VjhYQ703.png

对于i.MX RT1010来说,我们在开启时钟延展功能后需要对下面的两个参数进行设置,以满足I2C的timing要求。

CLKHOLD: I2C的数据的建立时间,需要根据不同的通讯速度进行设置。

DATAVD: I2C的数据保持时间,通常来看保持为0即可。

wKgZomUD8yuAK2knAAXOX9cyj5g868.png

如果不能正确设置CLKHOLD的时间会怎样呢?

造成时序混乱,当SCL的驱动能力较强,且SDA的负载较重的时候,甚至会引起SCL上升的比SDA速度快,那么想一下I2C的停止条件,当SCL处于高电平时,SDA拉高。那么就会让总线停止传输,除此以外,可能还会有其他的未知问题发生。

其次,关于CLKHOLD时间的计算,目前的驱动程序是有些小问题的。因此建议徒手撸寄存器,自己把想要的数值填写到CLKHOLD寄存器内。对于具体的时间,计算公式如下:

t =(CLKHOLD + 3) * Tclk

这里的Tclk是指I2C的functional clock的周期。因此,真正的建立时间,是CLKHOLD的数值和I2C 的输入时钟频率共同作用的结果。

哦对了,如何使能时钟延展功能?

如果你喜欢寄存器操作,那么可以在SCFGR1寄存器中的bit[3:0]直接开启对应的功能:

wKgaomUD8yyAAVg_AAJe97hCAfI635.png

如果你习惯SDK操作,那么在这个结构体里把对应的功能写true吧:

wKgZomUD8y6AG0UwAAS9mA8-w7U046.png

来源:恩智浦MCU加油站

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21729

    浏览量

    603001
  • 时钟
    +关注

    关注

    10

    文章

    1733

    浏览量

    131447
  • I2C
    I2C
    +关注

    关注

    28

    文章

    1484

    浏览量

    123620
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    17057
收藏 人收藏

    评论

    相关推荐

    基于FPGA的I2C SLAVE模式总线的设计方案

    。经过实际应用,证实了本方案操作简便,实用性强。##I2C SLAVE 控制器的接口部分主要包括,信号异步时钟域的转换。输入滤波器,用来抑制毛刺。及SDA 线的双向转换。
    发表于 02-26 11:39 1.4w次阅读

    i.MX RT1xxx 系列的时钟系统以及相关功能引脚

    目前 i.MXRT1xxx 系列主要分为 i.MX RT10xx 和 i.MXRT11xx 两大分支。这两个分支的时钟系统设计是有一些差异的
    发表于 07-08 17:01 783次阅读

    i.MX RT1020到i.MX RT1010的迁移手册

    i.MX RT1020到i.MX RT1010的迁移指南
    发表于 12-12 06:25

    时钟延展导致 I2C 通信不可靠

    STM32时钟延展导致 I2C 通信不可靠
    发表于 12-04 15:15 0次下载

    01:i.MX RT的市场应用和参考解决方案

    i.MX RT产品是今年市场上最受欢迎的跨界MCU产品。i.MX RT定位为一款MCU产品,它可以重复利用传统的Arm MCU生态系统。除此之外,本次讲座还将简要介绍
    的头像 发表于 01-21 07:13 3350次阅读
    01:<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的市场应用和参考解决方案

    恩智浦i.MX RT1170开创GHz MCU时代

    的运算能力和多媒体功能与易用性和实时处理相结合。i.MX RT1170双核MCU集成主频高达1 GHz的Arm Cortex -M7内核和400 MHz的Cortex-M4内核,同时提供先进的安全性。凭借
    的头像 发表于 03-22 11:14 3483次阅读

    恩智浦i.MX RT1170在将该系列带上了更高的层面

    的运算能力和多媒体功能与易用性和实时处理相结合。i.MX RT1170双核MCU集成主频高达1 GHz的Arm Cortex -M7内核和400 MHz的Cortex-M4内核,同时提供先进的安全性。凭借
    的头像 发表于 05-18 11:15 3772次阅读

    i.MX RT开发笔记-08 | i.MX RT1062嵌套中断向量控制器NVIC(按键中断检测)

    系列文章目录i.MX RT开发笔记-01 | 初识 i.MX RT1062 跨界MCUi.MX RT
    发表于 12-01 13:51 2次下载
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>开发笔记-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中断向量控制器NVIC(按键中断检测)

    RT-Thread & NXP 发布 i.MX RT 系列 BSP 新框架

    前言i.MX RT 是 NXP 推出的跨界处理器系列。该系列下又包括 i.MX RT1020、i.MX
    发表于 12-07 13:06 2次下载
    <b class='flag-5'>RT</b>-Thread & NXP 发布 <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b> 系列 BSP 新框架

    STM32F103硬件I2C Slave

    MCU:STM32F103IDE:STM32CubeIDEHAL库硬件I2C当作Slave,模拟EEPROM行为测试工具:树莓派为I2C主机,使用I2C-tools进行测试配置
    发表于 12-20 19:38 52次下载
    STM32F103硬件<b class='flag-5'>I2C</b> <b class='flag-5'>Slave</b>

    Gowin I2C Master/Slave用户指南

    Gowin I2C Master 和 Slave 用户指南主要包括功能简介、信号定义、工 作原理、实例化等,旨在帮助用户快速了解 Gowin I2C Master IP 和
    发表于 09-15 10:07 1次下载
    Gowin <b class='flag-5'>I2C</b> Master/<b class='flag-5'>Slave</b>用户指南

    适用于i.MX RT500和i.MX RT600 MCU的Xtensa音频框架介绍

    在众多的恩智浦i.MX RT跨界处理器当中,您可能会发现有些系列除了Arm内核之外还结合了高性能的DSP,利用集成DSP的技术优势,可提供高性能音频数字信号处理能力,并包含特定算法操作,可实现完全
    的头像 发表于 11-10 09:39 2698次阅读

    i.MX RT的FlexRAM配置问题

    i.MX RT的FlexRAM配置问题
    的头像 发表于 10-24 15:46 805次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置问题

    i.MX RT中FlexSPI外设不常用的读选通采样时钟

    i.MX RT中FlexSPI外设不常用的读选通采样时钟
    的头像 发表于 10-30 17:44 548次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中FlexSPI外设不常用的读选通采样<b class='flag-5'>时钟</b>源

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序启动设计

    恩智浦i.MX RT1060/1010上串行NOR Flash冗余程序启动设计
    的头像 发表于 09-26 16:53 737次阅读
    恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1060/<b class='flag-5'>1010</b>上串行NOR Flash冗余程序启动设计