This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR2311:I2C 时钟速度太慢?

Guru**** 2386600 points
Other Parts Discussed in Thread: MSP430FR2311
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/954529/msp430fr2311-i2c-clock-speed-too-slow

器件型号:MSP430FR2311

你(们)好。

我将 MSP430FR2311与 driverlib 搭配使用、通过 I2C 与 MPU9250传感器进行通信。
我使用 driverlib 中的示例配置了 I2C:

#define CS_SMCLK_NEWD_FREQUENCY IN_kHz 1000

//设置比率和所需的 MCLK 频率并初始化 DCO
CS_initFLSettle (CS_SMCLK_NEWD_INCE_kHz、CS_SMCLK_FLLREF_RA比);
//设置 SMCLK = DCO、SPCLK_INCLK_INDIV_INCLK 和



INCLK_INCLK_INCLK_INCLK+
INCLK_INCLK_1 INCLK_INCE_INCLK+ INCLK_INCLK_INCLK_INCLK_1 INCLK_INCE_CLK_1和 INCLK_INCLK_INCLK_INCLK_INCLK_INCLK_INCE_INCE_CLK+ INCLK_INCLK_INCLK_INCE_CLK_1 INCLK_INCE_INCE_INCLK_1、GPIOUNCH_CLK_1和 INCLK_INCLK_INCLK_INCLK_INCLK_INCLK_INCLK_INCLK_INCLK_INCLK_
//禁用 GPIO 上电默认高阻抗模式以激活先前配置的端口设置
PMM_unlockLPM5 ();

//初始化主
EUSCI_B_I2C_DISABLE (EUSCI_B0_BASE);
EUSCI_B_I2C_initParam ={0};
param.selectClockSource = EUSCI_B_CLOCK_CLOCK_RATE;
EUSCI_RATE_RATE

= USCI_RATE_RATE_RATE_RATE ={0};EUSCI_RATE = USCI_RATE_RATE_RATE_RATE ={0}ECI_CLUSCI_CLUSCI_RATE_CLUSCI_CLUSCI_RATE = USCI_CLUSCI_RATE;ECI_RATE = USCI_
param.byteCounterThreshold = 1;
param.autoSTOPGeneration = EUSCI_B_I2C_NO_AUTO_STOP;
EUSCI_B_I2C_initMaster (EUSCI_B0_BASE、&param);
//指定从器件地址
EUSCI_B_I2C_setSlaveAddress (EUSCI_B0_BASE、MPU_I2C_ADDR);
//指定从器件地址 EUSCI_I2C 模块(EUSCI_START);//使能 EUSCI_I2C 模块启动 EUCI_I2C 模块

但是、我的逻辑分析仪显示、在向传感器发送数据时 I2C 时钟仅为~196kHz。 通信似乎正常。 由于'EUSCI_B_I2C_SET_DATA_RATE 400KBPS'、我预计时钟将约为400kHz。 我是否理解有问题或我是否做了错误的事情?

谢谢、此致、

MOE

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道 driverlib 在封面下面做什么、但如果您使用1MHz SMCLK、则无法获得400kHz 的频率。 500kHz 和250kHz 是、但400kHz 不是

    如果您确实需要400kHz、SMCLK 必须是该频率的整数倍。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢! 实际上、我也在考虑这一点、并尝试将 CS_SMCLK_所 需的_frequency in_kHz 更改为1200、1600、2000、4000和10000。 但是、在所有这些所需的频率上、我根本无法实现任何 I2C 通信。 我是否需要其他任何东西才能使另一个频率工作? 当我将其更改为800kHz 时、我仍然使用 I2C、但他的时钟仍在200kHz 左右。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    验证参数块中是否填充了正确的数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Moritz 和 David、

    用户指南(https://www.ti.com/lit/pdf/slau445)的 I2C 部分 包含以下信息:"可在单主控模式下使用的最大位时钟为 fBRCLK/4。" 请参阅 24.3.7节 I 2C 时钟生成和同步。

    这可能解释了当您使用 SMCLK = 1MHz 时、您获得较低时钟速率的原因。

    Srinivas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

     CS_SMCLK_FLLREF_Ratio 的值是多少?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的、谢谢! 但是、为什么不能使用1200kHz 的 SMCLK 呢?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    根据 driverlib 示例、它为30。 老实说,我不理解这种价值的含义。 我是否应该将其设置为其他内容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    30是目标速度(1MHz/32768 =~30)的 FLLREF 时钟(标称参考频率=32kHz)的倍数。 这是实际的目标频率。 kHz 设置可调节 DCORSEL、这是一个通用范围。 [参考数据表(SLASE58E)表5-6]。

    我认为 Srinivas 把它称为它、尽管我的实验表明最小除数比4更像5。  将 BRW 从5改为4实际上会使总线减速(有效除数6)。 I2C 单元必须符合 I2C 规范(UM10204版本6表10)中的限制、并且 I2C 单元中的某个位置可能存在一些内部舍入误差。

    我能够通过2MHz SMCLK 获得400kHz (比率=62、kHz=2000 -> BRW=5)。

    [编辑:"范围跟踪或未发生"。 或某些此类情况。

    ]