查看: 3877|回复: 6

[求助] LPC812 I2C SCL时钟如何计算有问题,请大家帮忙

[复制链接]

该用户从未签到

2

主题

8

帖子

0

注册会员

Rank: 2

积分
60
最后登录
2022-4-24
发表于 2022-4-11 10:47:03 | 显示全部楼层 |阅读模式
对规格书I2C如何计算I2C SCL时钟不清楚,请大家帮忙:
       时钟换算关系:     I2C_Pclk   = MAIN_CLK / SYSAHBCLKDIV;
                                    I2C_Fclk   = I2C_Pclk / (DIVVAL+1);
                                    I2C_SCLclk = I2C_Fclk / (MSTSCLLOW + MSTSCLHIGH + 4);

      系统时钟:           MAIN_CLK   = 30 MHz,    SYSAHBCLKDIV = 1;
                                  I2C_Pclk    =30 MHz

     I2C  位传输速度:   I2C_SCLclk = 400 kHz;

     按第1点:  DIV=2     ,计算  I2C_Fclk= 30 MHz/(  2+1  )=  10 MHz

     按第2点:MSTSCLLOW =2, MSTSCLHIGH=2  

                 I2C_SCLclk = I2C_Fclk / (MSTSCLLOW + MSTSCLHIGH + 4)
                                  =  10 MHz/  ( 2+2+4   )=1.25  MHz

               我计算得是1.25MHZ,这规格书说是“SCL 时钟频率为 375 kHz。”,请问这是怎么计算出来的?我计算哪里出错误?

    谢谢!

最佳答案

是的。我是这样计算的。我只能看手册帮忙解决一下,如果你有芯片,配置一下,示波器抓波形看一下实际的值是多少。
I2C.png
I2C.png
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2022-4-11 13:59:57 | 显示全部楼层
    本帖最后由 安 于 2022-4-11 14:39 编辑

    SCL high time (in I2C function clocks) = (CLKDIV + 1) * (MSTSCLHIGH + 2)
    SCL low time (in I2C function clocks) = (CLKDIV + 1) * (MSTSCLLOW + 2)
    这里注意,前面还有一个DIV+1 *的算法,我按照你给的算出来的结果是357。从上面的注释中描述,MSTSCLHIGH 应该是0,默认值是0。如果按这个算,DIV=4时,才能计算出这个结果。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    8

    帖子

    0

    注册会员

    Rank: 2

    积分
    60
    最后登录
    2022-4-24
     楼主| 发表于 2022-4-12 09:48:49 | 显示全部楼层
    谢谢!安
    请问你是怎么算的是357,能否帮忙写一下算的过程。
    还有要位频率改为100KHZ呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2022-4-12 11:18:33 | 显示全部楼层
    SCL high time (in I2C function clocks) = (CLKDIV + 1) * (MSTSCLHIGH + 2)
    SCL low time (in I2C function clocks) = (CLKDIV + 1) * (MSTSCLLOW + 2)
    Nominal SCL rate = I2C function clock rate / (SCL high time + SCL low time)
    注意这两个时钟的算法。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    8

    帖子

    0

    注册会员

    Rank: 2

    积分
    60
    最后登录
    2022-4-24
     楼主| 发表于 2022-4-12 13:16:06 | 显示全部楼层
    谢谢!安
    DIV=2
    SCL_H_TIME=(2+1)*(2+2)=12
    SCL_L_TIME=(2+1)*(2+2)=12
    I2C_Fclk   = I2C_Pclk / (DIVVAL+1)=30M/(2+1)=10M;
    SCL Rate =10M/(SCL_H_TIME+SCL_L_TIME)=10M/24=0.416M  是这样计算么?

    若需要SCL Rate=100K,      LPC_I2C->DIV       = 5;
                                      LPC_I2C->MSTTIME |=(2<<0)|(2<<4);这样配是正确的么?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2022-4-12 13:33:16 | 显示全部楼层
    是的。我是这样计算的。我只能看手册帮忙解决一下,如果你有芯片,配置一下,示波器抓波形看一下实际的值是多少。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    8

    帖子

    0

    注册会员

    Rank: 2

    积分
    60
    最后登录
    2022-4-24
     楼主| 发表于 2022-4-12 17:45:27 | 显示全部楼层
    太感谢!安
    回复

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-8-29 18:51 , Processed in 0.096566 second(s), 29 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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