SWRZ135A December   2023  – August 2024 CC2340R2

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Advisories Matrix
  5. 2Nomenclature, Package Symbolization, and Revision Identification
    1. 2.1 Device and Development Support-Tool Nomenclature
    2. 2.2 Devices Supported
    3. 2.3 Package Symbolization and Revision Identification
  6. 3Advisories
    1. 3.1 SPI_04
    2. 3.2 ADC_08
    3. 3.3 ADC_09
    4. 3.4 BATMON_01
    5. 3.5 CLK_01
    6. 3.6 I2C_01
    7. 3.7 GPIO_01
  7. 4Revision History

GPIO_01

Open-Drain Configuration Can Drive a Short High Pulse

Revisions Affected

A

Description

Each DIO can be configured to an open-drain mode using the IOCx register.

However, an internal device timing issue may cause the GPIO to drive a logic-high for approximately 1ns–2ns during the transition into or out of the high-impedance state. This undesired high-level can cause the GPIO to be in contention with another open-drain driver on the line if the other driver is simultaneously driving low. The contention is undesirable because it applies stress to both devices and results in a brief intermediate voltage level on the signal. This intermediate voltage level may be incorrectly interpreted as a high level if there is not sufficient logic filtering present in the receiver logic to filter this brief pulse.

Workaround

If contention is a concern, do not use the open-drain functionality of the GPIOs; instead, emulate open-drain mode in software. Open-drain emulation can be achieved by setting the GPIO data (DOUT31_0.DIOx) to a static 0 and driving the GPIO output enable (DOE31_0.DIOx) to enable or disable the drive low. For an example implementation, see the code below.

#include <ti/devices/cc23x0r5/driverlib/gpio.h>
    /* Call driver init functions */
    GPIO_init();

    //Set GPIO data (DOUT31_0.DIOx) to static 0
    GPIOClearDio(CONFIG_GPIO_LED_0);
    while(1) //loop below toggles the LED on and off every 1 second
    {
    GPIOSetOutputEnableDio(CONFIG_GPIO_LED_0, 1);
    sleep(1);
    GPIOSetOutputEnableDio(CONFIG_GPIO_LED_0, 0);
    sleep(1);
    }