查看: 30166|回复: 268

[求助] 手把手学会官方例程<三>:Kinetis 100MHz I2C(有更新在40楼)

[复制链接]

该用户从未签到

85

主题

790

帖子

0

金牌会员

Rank: 6Rank: 6

积分
2279
最后登录
1970-1-1
发表于 2013-8-8 10:15:24 | 显示全部楼层 |阅读模式
 
 
飞思卡尔论坛支持小组推出手把手学会官方例程第三篇:Kinetis 100MHz I2C。
 
 
I2C是大家在平时应用中经常会使用到的一种总线形式。
 
附件的中文文档,对I2C例程进行了一步步的讲解,重点函数说明,I2C收发流程配置方法等进行了详细的讲解。同时配有操作的图片展示。
 
运行平台:TWR-K60D100M
                             
软件环境:CodeWarrior V10.x / IAR ARM IDE
 
 
FSL中文论坛支持小组 - 我们“制作”你们需要的。
 
友情提示:请用除IE外的浏览器下载代码。IE下载会出现源代码无法解压情况。
我知道答案 目前已有268人回答

KINETIS512_V2_SC_I2C.zip

237.47 KB, 下载次数: 815, 下载积分: 威望 1

手把手学习官方例程三Kinetis100MHzI2C.pdf

1.15 MB, 下载次数: 1219, 下载积分: 威望 1

回复

使用道具 举报

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

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    5970
    最后登录
    2020-9-28
    发表于 2013-8-16 10:42:23 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

    回复第 37 楼 于2013-08-14 23:43:47发表:
    谢谢楼主的辛勤劳动,请问一下楼主,在hal_dev_mma8451_read_reg(u8 addr)函数中,函数i2c_give_nack(I2C0_B)是不是应该放在
    result = i2c_read_byte(I2C0_B);
    i2c_wait(I2C0_B);
    两句话后面?修改为
    i2c_set_rx_mode(I2C0_B);
    result = i2c_read_byte(I2C0_B);
    i2c_wait(I2C0_B);
    i2c_give_nack(I2C0_B);
    i2c_stop(I2C0_B);
    另外还有,这句result = i2c_read_byte(I2C0_B)在运行完I2C_stop之后数字不会改变吗?是不是应该在I2C_stop之前读取数值呢?
     

     
    1、关于i2c_give_nack(I2C0_B)这句话你要看下i2c的C1寄存器中TXAK位描述
    1.jpg
     
    FACK=0,我个人理解TXAK=1后,只有在接收完下一字节数据后nack才会发上总线。并不是一旦TXAK=1后SDA上就立马出现nack信号。我测试了下你的程序,单次读MMA8451寄存器后因为你那么写nack信号没出现在SDA线上导致MMA8451理解成多次读,但是主机又没按多次读时序图操作故与MMA8451通信卡死。(一旦卡死,我是断电了一会后重新上电debug才能在正常通信的)
    2、关于result = i2c_read_byte(I2C0_B);我注释有点小问题。我觉得i2c_give_nack(I2C0_B);后的那句读数据寄存器作用是启动接收下一字节数据(类似主机发送模式给数据寄存器写值启动了一帧数据的发送),而I2C_stop之后读数据寄存器才是真正将数据取出。
    2.jpg
    我测试了一下result = i2c_read_byte(I2C0_B)在I2C_stop之前,但SDA线上的波形有问题导致与MMA8451的i2c通信出错。
    如果有什么问题,欢迎提出讨论
    该会员没有填写今日想说内容.
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    0

    主题

    16

    帖子

    0

    新手上路

    Rank: 1

    积分
    6
    最后登录
    1970-1-1
    发表于 2013-8-14 23:43:47 | 显示全部楼层

    RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

    谢谢楼主的辛勤劳动,请问一下楼主,在hal_dev_mma8451_read_reg(u8 addr)函数中,函数i2c_give_nack(I2C0_B)是不是应该放在
    result = i2c_read_byte(I2C0_B);
        i2c_wait(I2C0_B);
    两句话后面?修改为
    i2c_set_rx_mode(I2C0_B);
        result = i2c_read_byte(I2C0_B);
        i2c_wait(I2C0_B);
        i2c_give_nack(I2C0_B);
        i2c_stop(I2C0_B);
        另外还有,这句result = i2c_read_byte(I2C0_B)在运行完I2C_stop之后数字不会改变吗?是不是应该在I2C_stop之前读取数值呢?
    回复 支持 1 反对 0

    使用道具 举报

    该用户从未签到

    0

    主题

    38

    帖子

    0

    新手上路

    Rank: 1

    积分
    42
    最后登录
    1970-1-1
    发表于 2013-8-8 11:03:03 | 显示全部楼层

    RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

    下来学习~~~我要顶~~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    351

    帖子

    0

    高级会员

    Rank: 4

    积分
    870
    最后登录
    1970-1-1
    发表于 2013-8-8 11:24:23 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

    下来看看
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

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

    RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

    学习!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    11

    主题

    64

    帖子

    0

    注册会员

    Rank: 2

    积分
    180
    最后登录
    1970-1-1
    发表于 2013-8-8 13:39:25 | 显示全部楼层

    RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

    学习研究研究学习
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17

    主题

    72

    帖子

    0

    注册会员

    Rank: 2

    积分
    87
    最后登录
    1970-1-1
    发表于 2013-8-8 13:41:22 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

    好好学习!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17

    主题

    72

    帖子

    0

    注册会员

    Rank: 2

    积分
    87
    最后登录
    1970-1-1
    发表于 2013-8-8 13:42:44 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

    好好学习!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    17

    主题

    72

    帖子

    0

    注册会员

    Rank: 2

    积分
    87
    最后登录
    1970-1-1
    发表于 2013-8-8 13:44:33 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

    好好学习!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    36

    帖子

    0

    注册会员

    Rank: 2

    积分
    116
    最后登录
    1970-1-1
    发表于 2013-8-8 16:01:49 | 显示全部楼层

    RE:手把手学会官方例程<三>:Kinetis 100MHz I2C

    谢谢你的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    4

    主题

    72

    帖子

    0

    新手上路

    Rank: 1

    积分
    92
    最后登录
    1970-1-1
    发表于 2013-8-8 16:54:07 | 显示全部楼层

    回复:手把手学会官方例程<三>:Kinetis 100MHz I2C

    谢谢分享,楼主辛苦!
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-2 10:41 , Processed in 0.181220 second(s), 34 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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