12
返回列表 发新帖
楼主: cjpx84

[求助] kinetis i2c 驱动的疑惑

[复制链接]

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-1-14 16:43:05 | 显示全部楼层
wacaca 发表于 2015-1-14 10:58
补充一下,
   i2c_give_nack(I2C0_B); -----------这里进入receive模式之后

非常感谢wacaca的详细解答。
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-1-15 09:42:18 | 显示全部楼层
cjpx84 发表于 2015-1-14 14:27
抓过了,现在有一个奇怪的问题。我用的是coderwarrior开发的,直接运行程序,读出来的数据是正确的。单步调 ...

按照你的说法,程序是可以运行的,只是在单步调试的时候有差错,我的猜想是是不是有可能单步调试时,影响了I2C通信过程或造成数据传输过程终止,而通信异常!
回复 支持 反对

使用道具 举报

该用户从未签到

1

主题

65

帖子

0

中级会员

Rank: 3Rank: 3

积分
233
最后登录
1970-1-1
发表于 2015-1-15 10:52:56 | 显示全部楼层
FSL_TICS_ZP 发表于 2015-1-15 09:42
按照你的说法,程序是可以运行的,只是在单步调试的时候有差错,我的猜想是是不是有可能单步调试时,影响 ...

yes, 对于 I2C, SPI 等通信 是不能够 单步调试的, 只能通过 逻辑分析仪或者示波器抓波形形。
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-1-19 12:35:50 | 显示全部楼层
还有一个问题,在读取的时候,偶尔会出现接收到的数据位FFFF,抓信号发现会restart信号丢失。请问这一般是怎么引起的呢?
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-1-19 13:51:44 | 显示全部楼层
wacaca 发表于 2015-1-15 10:52
yes, 对于 I2C, SPI 等通信 是不能够 单步调试的, 只能通过 逻辑分析仪或者示波器抓波形形。 ...

主要是单步调试的时候,会影响到I2C的数据传输吗?是数据线没有释放,还是其他什么原因?
另外,现在还出现了一个问题,I2C读取数据的时候,会出现读取到的数据是全1的情况,而且概率还非常高,也有读取数据正常的时候。对比了正常和全1的情况时的波形,发现在全1的时候,本来应该发一个repeart start信号的,但是实际情况是该信号被丢失了,请问这应该是什么原因引起的呢?
回复 支持 反对

使用道具 举报

该用户从未签到

16

主题

90

帖子

0

中级会员

Rank: 3Rank: 3

积分
357
最后登录
2015-12-1
 楼主| 发表于 2015-1-19 16:30:34 | 显示全部楼层
本帖最后由 cjpx84 于 2015-1-19 16:40 编辑

我配置芯片的主频为48MHZ,总线频率为24MHZ,I2C的配置为MULT为0x01,icr为0x1f,这样算出来我的I2C的波特率为50kbs,按照这个配置,会出现读数据的时候读取到的数据全1,对比波形丢了一个repeart start信号。在此基础上做了几个实验:
1)将mult配置成0x00,icr配置不变,此时i2c的波特率为100kbs,在这种配置下,读写数据正常。怀疑是i2c的波特率太低导致的问题,因此重新将i2c的波特率配置成50kbs。
2)将mult 配置成0X00,icr配置成0x27,此时i2c的波特率为50kbs,经过实验验证,读写数据正常。该试验保持了波特率为50kbs,与之前的50kbs保持一致,只是修改了mult的值为0x00,而此时读写数据正常,基本可以确定与I2C的波特率无关。上面两个数据读写正常的实验,mult的值都为0x00,因此怀疑是不是mult的值导致的,在第三个实验中,将mult的值做了改变。

3)将mult配置成0x01,icr配置成0x27,此时波特率为25kbs,按照这个配置读取数据全1的情况又出现了。第三个实验与第二个实验相比,只改变了mult的值,因此mult的非常怀疑是mult的值导致了目前我出现的这个问题。

但是,对比了下数据手册,配置mult和icr对波特率和保持时间的影响基本上是一致的,而现在感觉是只要将mult配置成0x01,读数据就会出现全1的情况,请问这是什么原因引起的呢?是不是mult还有其他在手册上没有标明的作用?
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2017-5-9 08:12
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    34

    主题

    801

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2367
    最后登录
    2021-8-11
    发表于 2015-1-20 16:43:38 | 显示全部楼层
    i2c 时序很重要     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    2

    主题

    3

    帖子

    0

    新手上路

    Rank: 1

    积分
    16
    最后登录
    2015-4-21
    发表于 2015-4-21 21:44:41 | 显示全部楼层
    cjpx84 发表于 2015-1-19 16:30
    我配置芯片的主频为48MHZ,总线频率为24MHZ,I2C的配置为MULT为0x01,icr为0x1f,这样算出来我的I2C的波特率 ...

    这个你可以看这个帖子,据说是KL系列的一个bug
    http://mcuoneclipse.com/2012/12/ ... ed-start-condition/
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    90

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    357
    最后登录
    2015-12-1
     楼主| 发表于 2015-4-22 13:51:32 | 显示全部楼层
    孤独边界 发表于 2015-4-21 21:44
    这个你可以看这个帖子,据说是KL系列的一个bug
    http://mcuoneclipse.com/2012/12/05/kl25z-and-i2c-missi ...

    确实是芯片的一个bug,我在官网上看到勘误表里有描述。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 05:12 , Processed in 0.103886 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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