查看: 11496|回复: 15

[已解决] 请教一个关于I2C的问题(已解决)

[复制链接]

该用户从未签到

37

主题

132

帖子

0

新手上路

Rank: 1

积分
40
最后登录
1970-1-1
发表于 2013-8-23 13:42:09 | 显示全部楼层 |阅读模式
通过Kinetis KL25单片机内部的I2C接口和传感器从机通信,当我发出地址信号后一直无法得到从机的应答信号,我用示波器测了一下我I2C的CLK引脚发现我的CLK引脚的时钟频率和我设置的不相同并且不断的跳动,I2C使用的时钟源是Bus clock,默认情况下是24MHZ吗?
我知道答案 目前已有15人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-23 13:55:56 | 显示全部楼层

    回复:请教一个关于I2C的问题

    不清楚你用的是哪个demo code,如果你指的是KL25 Sample Code\kl25_sc_rev7\klxx-sc-pex\projects\accelerometer_demo\cw这个例程,那默认的i2c时钟源是24MHz。SCL frequency可以从I2C2这个Component Inspector窗口下观察到配成了6.25kHz。
    请你上传工程,方便我们看下是什么问题导致的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    459

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    303
    最后登录
    2024-10-24
    发表于 2013-8-23 15:06:59 | 显示全部楼层

    回复:请教一个关于I2C的问题

    建议你把I2Cx_F的值改为0x14和0x18再试一下!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37

    主题

    132

    帖子

    0

    新手上路

    Rank: 1

    积分
    40
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-23 15:27:41 | 显示全部楼层

    回复:请教一个关于I2C的问题

    回复第 2 楼 于2013-08-23 13:55:56发表:
    不清楚你用的是哪个demo code,如果你指的是KL25 Sample Code\kl25_sc_rev7\klxx-sc-pex\projects\accelerometer_demo\cw这个例程,那默认的i2c时钟源是24MHz。SCL frequency可以从I2C2这个Component Inspector窗口下观察到配成了6.25kHz。
    请你上传工程,方便我们看下是什么问题导致的。
     
    我用的是IAR,使用的代码基本上是IAR里面自带的Kinetis启动文件,下面是我的IIC函数,请看看有什么问题
    void IIC1_Init( void )
    {
      SIM_SCGC4 |= SIM_SCGC4_I2C1_MASK;                     // Turn on clock to I2C1 module
      PORTE_PCR0 |= PORT_PCR_MUX(6) | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;                        // Configure GPIO for I2C1 Function
      PORTE_PCR1 |= PORT_PCR_MUX(6) | PORT_PCR_PE_MASK | PORT_PCR_PS_MASK;                        // PTE0,PTE1 as I2C1 Pin
      I2C1_F |= 0x18;                                        // Configure I2C rate 100kHz(because bus clock is 24MHz
     I2C1_C1 |= I2C_C1_IICEN_MASK;                         // Enable I2C1
    }
    void IIC1_WriteByte(unsigned char data )
    {
      I2C1_D = data;
      while( (I2C1_S & I2C_S_IICIF_MASK)==0 );
      I2C1_S |= I2C_S_IICIF_MASK;
    }
    unsigned char IIC1_ReadByte( void )

      unsigned char data;
      data = I2C1_D;
      return data;
    }



     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37

    主题

    132

    帖子

    0

    新手上路

    Rank: 1

    积分
    40
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-23 15:29:45 | 显示全部楼层

    回复:请教一个关于I2C的问题

    回复第 3 楼 于2013-08-23 15:06:59发表:
    建议你把I2Cx_F的值改为0x14和0x18再试一下!
    试了还是不行,可能和我的程度有问题!请教一下为什么你说设0x14和0x18可以咧,这样的话I2C的速度更快了啊,难道是芯片本身就有这个BUG存在。
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-2 06:04
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-8-23 15:49:25 | 显示全部楼层

    回复:请教一个关于I2C的问题

    关于i2c的读写请参看www.nxpic.org.cn/bbs/article_1280_554911.html
    关于I2Cx_F的值,因为KL25Z有个bug会导致Repeat START发不出去。具体参看Errata:
    KINETIS_L_1N97F.pdf (123.07 KB, 下载次数: 167)
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    459

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    303
    最后登录
    2024-10-24
    发表于 2013-8-23 16:38:45 | 显示全部楼层

    回复:请教一个关于I2C的问题

    回复第 5 楼 于2013-08-23 15:29:45发表:
    回复第 3 楼 于2013-08-23 15:06:59发表:
    建议你把I2Cx_F的值改为0x14和0x18再试一下!
    试了还是不行,可能和我的程度有问题!请教一下为什么你说设0x14和0x18可以咧,这样的话I2C的速度更快了啊,难道是芯片本身就有这个BUG存在。
     
    确实有个小Bug,如果I2Cx_F寄存器的Mult位设置为非零会导致无法产生Repeat信号。其他的都OK!
     

     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37

    主题

    132

    帖子

    0

    新手上路

    Rank: 1

    积分
    40
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-24 12:49:52 | 显示全部楼层

    回复:请教一个关于I2C的问题

    回复第 7 楼 于2013-08-23 16:38:45发表:
    回复第 5 楼 于2013-08-23 15:29:45发表:
    回复第 3 楼 于2013-08-23 15:06:59发表:
    建议你把I2Cx_F的值改为0x14和0x18再试一下!
    试了还是不行,可能和我的程度有问题!请教一下为什么你说设0x14和0x18可以咧,这样的话I2C的速度更快了啊,难道是芯片本身就有这个BUG存在。
     
    确实有个小Bug,如果I2Cx_F寄存器的Mult位设置为非零会导致无法产生Repeat信号。其他的都OK!
     为什么觉得看了勘误表后觉得Kinetis MCU好多问题啊,这还是堂堂FreeScale产的MCU吗!

     

     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37

    主题

    132

    帖子

    0

    新手上路

    Rank: 1

    积分
    40
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-25 15:00:36 | 显示全部楼层

    回复:请教一个关于I2C的问题

    回复第 6 楼 于2013-08-23 15:49:25发表:
    关于i2c的读写请参看www.nxpic.org.cn/bbs/article_1280_554911.html
    关于I2Cx_F的值,因为KL25Z有个bug会导致Repeat START发不出去。具体参看Errata:


     现在还有一个问题就是我读I2Cx_D寄存器时,明明我通过register观察到它已经有值了,但是当我执行读取指令时,它却变为了0xff,于是我读到的值也便是0xff,这是怎么回事?
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    37

    主题

    132

    帖子

    0

    新手上路

    Rank: 1

    积分
    40
    最后登录
    1970-1-1
     楼主| 发表于 2013-8-25 20:48:00 | 显示全部楼层

    回复:请教一个关于I2C的问题

    回复第 2 楼 于2013-08-23 13:55:56发表:
    不清楚你用的是哪个demo code,如果你指的是KL25 Sample Code\kl25_sc_rev7\klxx-sc-pex\projects\accelerometer_demo\cw这个例程,那默认的i2c时钟源是24MHz。SCL frequency可以从I2C2这个Component Inspector窗口下观察到配成了6.25kHz。
    请你上传工程,方便我们看下是什么问题导致的。
    工程是用的IAR中的程序移植的,压缩有点大,我将I2C传感器的代码帖上你帮我看一个(程序之前使用PIC单片机内部的I2C模块正常用过)
    IIC_DEMO.zip (2.96 KB, 下载次数: 64)
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-28 22:56 , Processed in 0.111281 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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