SWRZ134E April   2023  – October 2024 CC2340R5

PRODUCTION DATA  

  1.   1
  2.   Abstract
  3. 1Advisories Matrix
  4. 2Nomenclature, Package Symbolization, and Revision Identification
    1. 2.1 Device Nomenclature
    2. 2.2 Devices Supported
    3. 2.3 Package Symbolization and Revision Identification
  5. 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
  6. 4Trademarks
  7. 5Revision History

GPIO_01

Open-Drain Configuration Can Drive a Short High Pulse

Revisions Affected

See Table 1-1

Description

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

However, an internal device timing issue can 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 the contention applies stress to both devices and results in a brief intermediate voltage level on the signal. This intermediate voltage level can 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 the 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);
    }