This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123GH6PGE:I2C5 SDA 在引脚配置后被拉低

Guru**** 2535150 points
Other Parts Discussed in Thread: TM4C123GH6PGE

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1008642/tm4c123gh6pge-i2c5-sda-pulled-low-after-pin-configuration

器件型号:TM4C123GH6PGE

您好!  

我们在 TM4C123GH6PGE 上使用 I2C5时遇到一些问题。 当引脚配置为 I2C 时、SDA 线被拉低、随后保持低电平... 从而导致总线始终处于繁忙状态。 我们已将相同的 Tiva 器件与其他 I2C 外设成功配合使用、而且我们以前从未见过这个问题。 I2C5 (与 I2C0..4相比)是否存在我缺失的怪异情况? 或特定于 GPIOG_7的内容?

这是 TivaWare 代码中的引脚配置序列:

    SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C5);                              //Enable I2C5

     while( !SysCtlPeripheralReady(SYSCTL_PERIPH_I2C5)){                    //Wait until peripheral Ready
     }

     SysCtlPeripheralReset(SYSCTL_PERIPH_I2C5);                              //Reset I2C0 Peripheral

     GPIOPinConfigure( GPIO_PCTL_PG6_I2C5SCL );               //I2C 5
     GPIOPinConfigure( GPIO_PCTL_PG7_I2C5SDA );
     GPIOPinTypeI2CSCL( GPIO_PORTG_BASE, GPIO_PIN_6 );

     I2CMasterGlitchFilterConfigSet( I2C5_BASE, I2C_MASTER_GLITCH_FILTER_16 );

//   Configure SDA
     GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_7, GPIO_DIR_MODE_HW);                                // Make the pin(s) be peripheral controlled.
     GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_7 , GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD);           // Set the pad(s) for open-drain operation with a weak pull-up.
     //SDA Line pulled low after GPIOPadConfigSet!

     I2C_WaitBusy(I2C5_BASE);

非常感谢、

Tom

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还应该注意、我们安装了4K7外部上拉电阻器。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Thomas:

    由于上拉电阻、我没有硬件设置来快速进行测试、因此我一开始没有注意到这一点、但我认为您的配置有问题。

    您有以下内容:

         GPIOPinConfigure( GPIO_PCTL_PG6_I2C5SCL );               //I2C 5
         GPIOPinConfigure( GPIO_PCTL_PG7_I2C5SDA );

    但 PCTL 值不是应用于 GPIOPinConfigure 的值。

    请将其更改为以下内容:

         GPIOPinConfigure( GPIO_PG6_I2C5SCL );
         GPIOPinConfigure( GPIO_PG7_I2C5SDA );

    GPIOPinConfigure 函数仅接受 GPIO_P?????? 值。 这两个值的定义非常不同。 我认为这是您问题的根本原因。

    此致、
    Ralph

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这就是原因。 非常感谢!