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.

[参考译文] RTOS/TM4C1294NCPDT:更改 TM4C129x 器件上的 I2C 引脚驱动强度。

Guru**** 2477885 points
Other Parts Discussed in Thread: TM4C1294NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/687883/rtos-tm4c1294ncpdt-change-i2c-pins-drive-strength-on-tm4c129x-devices

器件型号:TM4C1294NCPDT
主题中讨论的其他器件: TM4C123

工具/软件:TI-RTOS

我需要更改 I2C 总线引脚的电流强度。

我尝试这样做:

ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C8);

ROM_GPIOPinConfigure (GPIO_PA2_I2C8SCL);

GPIOPadConfigSet (GPIO_Porta_base、2、GPIO_Strength _12mA、PIO_PIN_TYPE_STD);

ROM_GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_2);

ROM_GPIOPinConfigure (GPIO_PA3_I2C8SDA);

GPIOPadConfigSet (GPIO_Porta_base、3、GPIO_Strength _12mA、GPIO_PIN_TYPE_OD);

ROM_GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_3);

 

然后、我检查了焊盘配置:

GPIOPadConfigGet (GPIO_Porta_base、2、&A2Struth、&A2PinType);

GPIOPadConfigGet (GPIO_Porta_base、3、&A3Struth、&A3PinType);

 

引脚的"强度"始终为1、当更改 GPIO_Strength _xMA 参数时不会改变。

此外、我检查了是否有范围变化、没有变化(上升时间和低电平)。

 

是否可以更改 I2C 引脚的驱动强度?

提前感谢。

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

    根据数据表10.2、只有高速 GPIO 焊盘才能产生>2mA 的驱动强度、但随后仅声明焊盘 PJ1是慢速焊盘(APB)。 问题就变成了为什么10.2通常不将 FAST 焊盘与 FAST AHB_GPIO 引脚关联。

    总之、这就是我认为引脚强度相对于 GPIO 总线速度的意义所在。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    GPIOPadConfigSet()函数必须在 GPIOPinTypexxx()函数之后调用。

    GPIOPinTypeI2CSCL (GPIO_Porta_base、GPIO_PIN_2);
    GPIOPinTypeI2C (GPIO_Porta_base、GPIO_PIN_3);
    
    GPIOPadConfigSet (GPIO_Porta_base、2、GPIO_Strength _12mA、GPIO_PIN_TYPE_STD);
    GPIOPadConfigSet (GPIO_Porta_base、3、GPIO_Strength _12mA、GPIO_PIN_TYPE_OD);
    

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

    你(们)好 Bob。

    感谢您的建议。 但我还发现 GPIOPadConfigSet 函数中的第二个参数(引脚编号)应为引脚的"define"- GPIO_PIN_x

    奇怪的是、在 GPIOPadConfigGet 函数中、它应该只是引脚编号、但在 GPIOPadConfigSet 函数中、它应该是引脚的"define"。

     

    现在它可以正常工作、如下所示:

    设置参数:

    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_I2C2);

    ROM_GPIOPinConfigure (GPIO_PL1_I2C2SCL);

    ROM_GPIOPinConfigure (GPIO_PL0_I2C2SDA);

    ROM_GPIOPinTypeI2C (GPIO_PORTL_base、GPIO_PIN_0);

    ROM_GPIOPinTypeI2CSCL (GPIO_PORTL_BASE、GPIO_PIN_1);

    GPIOPadConfigSet (GPIO_PORTL_base、GPIO_PIN_1、GPIO_Strength _12mA、GPIO_PIN_TYPE_STD);

    GPIOPadConfigSet (GPIO_PORTL_base、GPIO_PIN_0、GPIO_Strength _12mA、GPIO_PIN_TYPE_OD);

     

    获取参数:

    GPIOPadConfigGet (GPIO_PORTL_base、0、&L0weet、&L0PinType);

    GPIOPadConfigGet (GPIO_PORTL_base、1、&L1Struth、&L1PinType);

     

    另一个奇怪的是、不同引脚的 geted 强度参数不同。 例如、如果您设置 GPIO_Strength _12mA、然后将其用于引脚的一部分、则为119、而对于其他部分、则为23。

     

    此致。

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

    另一个奇怪的问题是数据表建议>2mA 的驱动强度只由快速 AHB_GPIO 引脚产生、而不是由慢速 GPIO_APB 引脚产生。

    表27-35. 慢速 GPIO 模块特性仅列出2mA 驱动强度、不更高。 也就是说、标准 GPIO 引脚如何产生>2mA 的驱动强度?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    TM4C1294NCPDT 只有一个慢速 GPIO 焊盘- PJ1、其他是快速 GPIO 焊盘。
    请参阅。 10.2数据表的焊盘功能。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    海报 IgDor 确实注意到了"Parameter treatment"- API 的'GPIOPadConfigGet()与'GPIOPadConfigSet()'之间存在"异常"不一致。    这是"高度"的意外-(几乎)肯定-许多人"跳闸"。    (也许可以添加到"要做的事情"的扩展列表中(但在(适当的)恢复类似的事情之后!)

    IgDor 报告的"强度参数"也是"范围" -证明是正确的-但这些值(非常)非常详细-如此处所示: (通过文件'GPIO.h')

    //
    //
    //可以作为 ui32Strugth 参数传递给 GPIOPadConfigSet 的值,
    //并由 GPIOPadConfigGet 在*pui32Strh 参数中返回。
    //
    //
    #define GPIO_Strength _2mA 0x00000001 // 2mA 驱动强度
    #define GPIO_Strength _4mA 0x00000002 // 4mA 驱动强度
    #define GPIO_Strength _6mA 0x00000065 // 6mA 驱动强度
    #define GPIO_Strength _8mA 0x00000066 // 8mA 驱动强度
    #define GPIO_Strength _8mA_SC 0x0000006E //带有转换率控制的8mA 驱动器
    #define GPIO_Strength _10mA 0x00000075 // 10mA 驱动强度
    #define GPIO_Strength _12mA 0x00000077 // 12mA 驱动强度

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已检查所有7条 I2C 总线的强度。 对于2mA 和4mA、这是正常的。所有引脚的强度分别为1和2、但对于6mA 和更高的电流、存在差异。 例如、对于12mA、5个引脚具有0x77、其他引脚9 - 0x17
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你们的"勤政"再次受到赞扬。   即使永远是"在这里"-我不能忘记另一个-讨论这个主题-当然不是你展示的技巧和深度。

    请注意(始终)单板(在这里)单芯片-异常!   我会在3-5个附加 MCU 上重复此测试、以查看您的结果是否(几乎)"通用"。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    与最初的声音不同、请慢慢阅读几次。 也就是说、PJ1根据设计只能是2mA 的慢速电流。 您必须在调用中添加(GPIO_PORT#_AHB_BASE)以选择 AHB 数据总线槽和 GPIOSLR 压摆率寄存器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据表27-34,高于2mA 的驱动强度(压摆率)仅适用于表27-34中 AHB 定义的引脚。

    上周我的问题是 Tivaware GPIOPinConfigure()似乎没有为外设 GPIO(x)正确选择 AHB 总线,默认情况下似乎设置了 APB 槽。 根据存在寄存器的数据表搜索、假设是针对 TM4C123器件、TM4C129x 中不存在 SYSCTL_GPIOHBCTL 寄存器(0x400FE06C)。

    即使 AHB_BASE 被添加到调用 GPIOPinConfigure()中,所选的光圈也会结束 APB。 根据数据表、表27-34/35中的说明实际上是正确的。