硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1436|回复: 2
收起左侧

[RT1020] 硬件I2c无法工作

[复制链接]

26

主题

70

回帖

148

积分

初级会员

积分
148
发表于 2022-8-5 16:49:03 | 显示全部楼层 |阅读模式
void BspI2cInit(void)
{
    uint32_t i2cclk=0;

    lpi2c_master_config_t  tMasterConfig;


    CLOCK_SetMux(kCLOCK_Lpi2cMux,0);   //LPI2C时钟源为PLL3=60Mhz
    CLOCK_SetDiv(kCLOCK_Lpi2cDiv,5);   //分频设置,分频值为5+1,所以LPI2C CLK=10Mhz

    //配置IO作为I2C
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_08_LPI2C2_SCL,1);
    IOMUXC_SetPinMux(IOMUXC_GPIO_AD_B1_09_LPI2C2_SDA,1);

    //配置I2C引脚功能,
    //低转换速度,驱动能力为R0/6,速度为100Mhz,开路输出,使能pull/keepr
        //选择keeper功能,上拉22K Ohm,关闭Hyst
    IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_08_LPI2C2_SCL, 0xD8B0);
    IOMUXC_SetPinConfig(IOMUXC_GPIO_AD_B1_09_LPI2C2_SDA, 0xD8B0);


    i2cclk=((CLOCK_GetFreq(kCLOCK_Usb1PllClk)/8)/(5+1));

    LPI2C_MasterGetDefaultConfig(&tMasterConfig);

    tMasterConfig.baudRate_Hz = 100000;

    LPI2C_MasterInit(LPI2C2, &tMasterConfig, i2cclk);





    uint8_t  ucTouchDat[8];
    lpi2c_master_transfer_t  tMasterXfer = {0};


    tMasterXfer.slaveAddress   = (0x20 >> 1);
    tMasterXfer.direction      = kLPI2C_Read;
    tMasterXfer.subaddress     = 0;
    tMasterXfer.subaddressSize = 0;
    tMasterXfer.data           = ucTouchDat;
    tMasterXfer.dataSize       = 8;
    tMasterXfer.flags          = kLPI2C_TransferDefaultFlag;

    while (1)
    {
        LPI2C_MasterTransferBlocking(LPI2C2, &tMasterXfer);
    }
}


配置如上, 时钟引脚一直未能测到时钟, 感觉NXP的硬件I2C好难用啊.


回复

使用道具 举报

24

主题

365

回帖

437

积分

高级会员

积分
437
发表于 2022-8-5 16:59:03 | 显示全部楼层
回复

使用道具 举报

26

主题

70

回帖

148

积分

初级会员

积分
148
 楼主| 发表于 2022-8-9 14:00:00 | 显示全部楼层
问题解决了, Pin要配置为Input才行, 默认是InputOutput, 无法工作.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 08:56 , Processed in 0.039262 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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