查看: 2580|回复: 3

[已解决] K10的I2C多BYTE的連績READ問題(已解决)

[复制链接]

该用户从未签到

1

主题

8

帖子

0

新手上路

Rank: 1

积分
29
最后登录
1970-1-1
发表于 2013-11-11 11:58:37 | 显示全部楼层 |阅读模式
 
在拉普兰德,超核,野火,蘇卅大學,
的固件庫都沒有I2C 多BYTE的寫入程式, 現將其改寫, 己可write多byte
但read 1 byte是ok, 多byte read 時前3byte可以, 以後即為0xff,0xff…
, 甚至於stop後SDA pin 為low電位, 掛住了,
是否有高手給個程序, 謝謝!
 
改了試不行,不行又改己很亂了
void I2C2A8DRD(unsigned char I2C_DEVICE,unsigned char I2C_REGH,unsigned char I2C_REGL)
{
    I2C_GenerateSTART(I2C0);
    I2C_Send7bitAddress(I2C0,I2C_DEVICE,I2C_MASTER_WRITE);
    I2C_WaitAck(I2C0);
    I2C_SendData(I2C0,I2C_REGH);
    I2C_WaitAck(I2C0);
    I2C_SendData(I2C0, I2C_REGL);
    I2C_WaitAck(I2C0);
    I2C_GenerateRESTART(I2C0);
    I2C_Send7bitAddress(I2C0,I2C_DEVICE,I2C_MASTER_READ);
    I2C_WaitAck(I2C0);
    I2C_SetMasterMode(I2C0,I2C_MASTER_READ);
    I2C_GenerateAck(I2C0);//I2C0->C1 &= ~I2C_C1_TXAK_MASK; //I2C_GenerateAck(I2C0);
    I2CRBUF[0] = I2C0->D;    // DUMMY READ
    I2C_WaitAck(I2C0);
    I2CRBUF[0] = I2C0->D;   
    I2C_WaitAck(I2C0);
    //I2C0->C1 |= I2C_C1_TXAK_MASK;   /* Turn off ACK since this is second to last read*/
    I2CRBUF[1]= I2C0->D;   
    I2C_WaitAck(I2C0);
    I2CRBUF[2] = I2C0->D;   
    I2C_WaitAck(I2C0);
    I2CRBUF[3] = I2C0->D;   
    I2C_WaitAck(I2C0);
    I2CRBUF[4] = I2C0->D;   
    I2C_WaitAck(I2C0);
    I2CRBUF[5] = I2C0->D;   
    I2C_WaitAck(I2C0);
    I2CRBUF[6] = I2C0->D;   
    I2C_WaitAck(I2C0);
    I2C_GenerateSTOP(I2C0);
    I2CRBUF[7] = I2C0->D;
    DelayMs(5);
 }
 
我知道答案 目前已有2人回答
readFail.jpg
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2013-11-11 14:28:59 | 显示全部楼层

    RE:K10的I2C多BYTE的連績READ問題

    能否把你的读取代码发出来看看。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    59

    主题

    2888

    帖子

    10

    金牌会员

    Rank: 6Rank: 6

    积分
    6020
    最后登录
    2020-9-28
    发表于 2013-11-11 17:02:38 | 显示全部楼层

    回复:K10的I2C多BYTE的連績READ問題

    你尝试过每次读数据前都DUMMY READ吗?
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    10

    主题

    459

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    303
    最后登录
    2024-10-24
    发表于 2013-11-12 09:37:02 | 显示全部楼层

    回复:K10的I2C多BYTE的連績READ問題

    同意楼上,最好在每一次Read之前dummy read一下,下面有一个同时调过的代码,用于芯片上两个I2C接口通讯的代码,当时也是SDA被钳制为低了,你需要严格按照RM手册 I2C 章节最后的流程图写代码。你可以参考一下。
        uint8_t test_sendData2 = 0x12,test_sendData3= 0x15,test_sendData4 = 0x18;
        uint8_t test_temporaryData;
        uint32_t master_instance = i;
        uint32_t slave_instance = (i == HW_I2C0? HW_I2C1: HW_I2C0);
        uint8_t slaveAddress = (0x55+i) ;
        uint32_t test_baudrate = 200;
        //init master 1
        clock_manager_set_gate(kClockModuleI2C, master_instance, true);
        i2c_hal_reset(master_instance);
        i2c_hal_enable(master_instance);
        i2c_hal_set_baud(master_instance,test_baudrate,0);
        //init slave 0
        clock_manager_set_gate(kClockModuleI2C, slave_instance, true);
        i2c_hal_reset(slave_instance);
        i2c_hal_enable(slave_instance);
        i2c_hal_set_independent_slave_baud(slave_instance, true);
        i2c_hal_set_slave_address_7bit(slave_instance,(slaveAddress
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-19 09:19 , Processed in 0.098452 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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