hpdell 发表于 2023-5-2 13:31:05

请教下,使用rt1176 硬件 i2c1 死活都不行 ?

请教下,使用rt1176 硬件 i2c1 死活都不行 ?

硬件 i2c1 使用管脚 R15, R16 编号

i2c1-sda 管脚始终都是出于高电平状态,

/*
lpi2c_polling_b2b_master_cm4 / lpi2c_polling_b2b_master_cm7 例程
方向:没有配置
software input on: enabled
pull up/down config: pull down
pull/keeper select: keeper
开漏:enable
驱动强度:normal
转换速度:slow
*/
IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_08_LPI2C1_SCL,         /* GPIO_AD_08 is configured as LPI2C1_SCL */
      1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_08 */
IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_09_LPI2C1_SDA,         /* GPIO_AD_09 is configured as LPI2C1_SDA */
      1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_09 */

IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_08_LPI2C1_SCL,         /* GPIO_AD_08 PAD functional properties : */
      0x22U);                                 /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: normal drive strength
                                                 Pull / Keep Select Field: Pull Disable, Highz
                                                 Pull Up / Down Config. Field: Weak pull down
                                                 Open Drain Field: Enabled
                                                 Domain write protection: Both cores are allowed
                                                 Domain write protection lock: Neither of DWP bits is locked */
IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_09_LPI2C1_SDA,         /* GPIO_AD_09 PAD functional properties : */
      0x22U);                                 /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: normal drive strength
                                                 Pull / Keep Select Field: Pull Disable, Highz
                                                 Pull Up / Down Config. Field: Weak pull down
                                                 Open Drain Field: Enabled
                                                 Domain write protection: Both cores are allowed
                                                 Domain write protection lock: Neither of DWP bits is locked */

       
    /*
   * masterConfig.debugEnable = false;
   * masterConfig.ignoreAck = false;
   * masterConfig.pinConfig = kLPI2C_2PinOpenDrain;
   * masterConfig.baudRate_Hz = 100000U;
   * masterConfig.busIdleTimeout_ns = 0;
   * masterConfig.pinLowTimeout_ns = 0;
   * masterConfig.sdaGlitchFilterWidth_ns = 0;
   * masterConfig.sclGlitchFilterWidth_ns = 0;
   */
    LPI2C_MasterGetDefaultConfig(&masterConfig);
       
    /* Change the default baudrate configuration */
    masterConfig.baudRate_Hz = LPI2C_BAUDRATE;

    /* Initialize the LPI2C master peripheral */       
    LPI2C_MasterInit(iic_index, &masterConfig, LPI2C_CLOCK_FREQUENCY);   // 第一次初始化便于打开时钟


我单独吧 sda 管脚配置为普通的io 输出高低电平也不行,不知道是不是这个 i2c-sda 的管脚坏了还是这么回事呀 ??




lb0857 发表于 2023-5-2 14:52:14

论逻辑分析仪解决问题的好处

hpdell 发表于 2023-5-6 12:23:59

lb0857 发表于 2023-5-2 14:52
论逻辑分析仪解决问题的好处
(引用自2楼)

现在的问题是 这个 i2c1 的 sda 管脚始终都没有输出呀,一直都是高电平状态

我把他设置为普通的 io 口 进行测试输出 高低电平也是没有反应,也是一直都是高电平的,

nxp的 sdk 里面的例程下载进去也不行,管脚配置都是一样的,估计是不是这个芯片的 sda 口已经坏了 呀 ?

但是我测量 此脚的 对地电阻与正常的 管脚的 对地地址也基本一致,所以现在是有些迷糊了呀

其他 的 i2c5, i2c6 随便配置一下就可以正常工作,就唯独这个 i2c1 不行

hpdell 发表于 2023-5-7 15:00:26

lb0857 发表于 2023-5-2 14:52
论逻辑分析仪解决问题的好处
(引用自2楼)

我测量这个 sda 管脚对地 的电阻值,与 scl 的基本一致,应该可以确定焊接是没有问题的吧

当测量 sda(r16) 对低电压时貌似发现了问题, 电压只有 1.8v, 而 scl 是 3.3v, sda 电平 怎么会低那么多呀 ?

我看例程使用 i2c1 的配置也没有什么特别的地方啊,而且 sdk 例程使用的也是这 r15, r16 这 2个管脚,

我吧 sdk 里的 i2c1 例程直接下载到板子,貌似 i2c1 也不工作,有些犯迷糊了呀

lb0857 发表于 2023-5-7 15:05:25

上原理图吧
嵌入式走得远 走的深
硬件少不了滴{:lol:}

hpdell 发表于 2023-5-17 16:27:05

lb0857 发表于 2023-5-7 15:05
上原理图吧
嵌入式走得远 走的深
硬件少不了滴
(引用自5楼)



请笑纳帮忙分析分析看看




Arm2048 发表于 2023-5-17 17:01:51

I2C单元总时钟有没有使能?
SDA引脚有没有配置为I2C功能?
SDA引脚有没有上拉/电阻?
I2C的时钟分频、占空比、转换速度等参数有没有配置好?

I2C总线初始化完毕后运行:
while(1){
向 I2C总线写一个字节;
延时100ms;
}

然后用示波器或者逻辑分析仪看SCL、SDA有没有正确波形与数据;

ICman-晶尊芯 发表于 2023-5-18 16:45:20

hpdell 发表于 2023-5-19 11:15:27

本帖最后由 hpdell 于 2023-5-19 11:36 编辑

Arm2048 发表于 2023-5-17 17:01
I2C单元总时钟有没有使能?
SDA引脚有没有配置为I2C功能?
SDA引脚有没有上拉/电阻?
(引用自7楼)

i2c1 外设有上啦电阻 4.7k, 使能了 i2c1, i2c 总时钟启用了

i2c1 的 sda 管脚我配置为普通的 io 口模式,仅输出高低电平测试时,这个 sda 管脚的电平也是保持高电平不变的??

而 scl 管脚配置为 普通 io 口模式测试输出 高低电平 是可以正常 变化的,

/*
* TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
BOARD_InitPins:
- options: {callFromInitBoot: 'true', coreID: cm7, enableClock: 'true'}
- pin_list:
- {pin_num: M15, peripheral: LPUART1, signal: RXD, pin_signal: GPIO_AD_25, software_input_on: Disable, pull_up_down_config: Pull_Down, pull_keeper_select: Keeper,
    open_drain: Disable, drive_strength: High, slew_rate: Slow}
- {pin_num: L13, peripheral: LPUART1, signal: TXD, pin_signal: GPIO_AD_24, software_input_on: Disable, pull_up_down_config: Pull_Down, pull_keeper_select: Keeper,
    open_drain: Disable, drive_strength: High, slew_rate: Slow}
- {pin_num: R15, peripheral: LPI2C1, signal: SCL, pin_signal: GPIO_AD_08, software_input_on: Enable, pull_up_down_config: Pull_Down, pull_keeper_select: Keeper,
    open_drain: Enable, drive_strength: Normal, slew_rate: Slow}
- {pin_num: R16, peripheral: LPI2C1, signal: SDA, pin_signal: GPIO_AD_09, software_input_on: Enable, pull_up_down_config: Pull_Down, pull_keeper_select: Keeper,
    open_drain: Enable, drive_strength: Normal, slew_rate: Slow}
* BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
*/

/* FUNCTION ************************************************************************************************************
*
* Function Name : BOARD_InitPins, assigned for the Cortex-M7F core.
* Description   : Configures pin routing and optionally pin electrical features.
*
* END ****************************************************************************************************************/
void BOARD_InitPins(void) {
CLOCK_EnableClock(kCLOCK_Iomuxc);         /* LPCG on: LPCG is ON. */

IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_08_LPI2C1_SCL,         /* GPIO_AD_08 is configured as LPI2C1_SCL */
      1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_08 */

IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_09_LPI2C1_SDA,         /* GPIO_AD_09 is configured as LPI2C1_SDA */
      1U);                                    /* Software Input On Field: Force input path of pad GPIO_AD_09 */

IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_24_LPUART1_TXD,          /* GPIO_AD_24 is configured as LPUART1_TXD */
      0U);                                    /* Software Input On Field: Input Path is determined by functionality */

IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_25_LPUART1_RXD,          /* GPIO_AD_25 is configured as LPUART1_RXD */
      0U);                                    /* Software Input On Field: Input Path is determined by functionality */

IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_08_LPI2C1_SCL,         /* GPIO_AD_08 PAD functional properties : */
      0x10U);                                 /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: normal drive strength
                                                 Pull / Keep Select Field: Pull Disable, Highz
                                                 Pull Up / Down Config. Field: Weak pull down
                                                 Open Drain Field: Enabled
                                                 Domain write protection: Both cores are allowed
                                                 Domain write protection lock: Neither of DWP bits is locked */

IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_09_LPI2C1_SDA,         /* GPIO_AD_09 PAD functional properties : */
      0x10U);                                 /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: normal drive strength
                                                 Pull / Keep Select Field: Pull Disable, Highz
                                                 Pull Up / Down Config. Field: Weak pull down
                                                 Open Drain Field: Enabled
                                                 Domain write protection: Both cores are allowed
                                                 Domain write protection lock: Neither of DWP bits is locked */
IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_24_LPUART1_TXD,          /* GPIO_AD_24 PAD functional properties : */
      0x02U);                                 /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: high drive strength
                                                 Pull / Keep Select Field: Pull Disable, Highz
                                                 Pull Up / Down Config. Field: Weak pull down
                                                 Open Drain Field: Disabled
                                                 Domain write protection: Both cores are allowed
                                                 Domain write protection lock: Neither of DWP bits is locked */

IOMUXC_SetPinConfig(
      IOMUXC_GPIO_AD_25_LPUART1_RXD,          /* GPIO_AD_25 PAD functional properties : */
      0x02U);                                 /* Slew Rate Field: Slow Slew Rate
                                                 Drive Strength Field: high drive strength
                                                 Pull / Keep Select Field: Pull Disable, Highz
                                                 Pull Up / Down Config. Field: Weak pull down
                                                 Open Drain Field: Disabled
                                                 Domain write protection: Both cores are allowed
                                                 Domain write protection lock: Neither of DWP bits is locked */
}



/****************************************************************************************************

****************************************************************************************************/

#define LPI2C_CLOCK_FREQUENCY (CLOCK_GetRootClockFreq(kCLOCK_Root_Lpi2c1))                                       

#define LPI2C_BAUDRATE       (uint32_t)(400 * 1000U)   // 400KHz

void bsp_init_bus_i2c1(void)
{
        CLOCK_EnableClock(kCLOCK_Iomuxc);         /* LPCG on: LPCG is ON. */
       
        uint32_tclockHz = LPI2C_CLOCK_FREQUENCY;
        lpi2c_master_config_t masterConfig;

//        clock_root_config_t rootCfg = {0};
//        rootCfg.mux =kCLOCK_LPI2C1_ClockRoot_MuxOsc24MOut;
//        rootCfg.div = 1;
//        CLOCK_SetRootClock(kCLOCK_Root_Lpi2c1, &rootCfg);
       
        BOARD_InitPinsI2C1();

    /*
   * masterConfig.debugEnable = false;
   * masterConfig.ignoreAck = false;
   * masterConfig.pinConfig = kLPI2C_2PinOpenDrain;
   * masterConfig.baudRate_Hz = 100000U;
   * masterConfig.busIdleTimeout_ns = 0;
   * masterConfig.pinLowTimeout_ns = 0;
   * masterConfig.sdaGlitchFilterWidth_ns = 0;
   * masterConfig.sclGlitchFilterWidth_ns = 0;
   */
    LPI2C_MasterGetDefaultConfig(&masterConfig);
       
    /* Change the default baudrate configuration */
    masterConfig.baudRate_Hz = LPI2C_BAUDRATE;

    /* Initialize the LPI2C master peripheral */       
    LPI2C_MasterInit(iic_index, &masterConfig, LPI2C_CLOCK_FREQUENCY);   // 第一次初始化便于打开时钟

        EEPROM_INFO("bsp_init_bus_i2c1 clockHz = %d\r\n", clockHz);
}





















honami520 发表于 2023-5-19 13:00:30

这个板子国内没有厂家做,所以也没法玩

hpdell 发表于 2023-5-20 15:03:21

honami520 发表于 2023-5-19 13:00
这个板子国内没有厂家做,所以也没法玩
(引用自10楼)

我也是无意间在闲鱼购得的, 刚开始我以为有很多,后来才发现也只有一片而已,

{:cry:} {:lol:}
页: [1]
查看完整版本: 请教下,使用rt1176 硬件 i2c1 死活都不行 ?