GPIO API

Logicrom provide access to complete GPIO available on wireless modules which are generally not available with standard vendor SDK.

Example Usage

#include <hw/gpio.h>

/* GPIO Configure as output */
int handle = gpio_request(GPIO_0, GPIO_FLAG_OUTPUT | GPIO_FLAG_DEFHIGH);

/* GPIO Write */
gpio_write(handle, GPIO_LEVEL_HIGH);

/* Fast GPIO access */
gpio_writefast(handle, GPIO_LEVEL_LOW);

/* Change direction */
gpio_setdir(handle, GPIO_FLAG_INPUT | GPIO_FLAG_PULLUP);

/* GPIO Read */
level = gpio_read(handle);

/* Fast GPIO read */
level = gpio_readfast(handle);

/* GPIO input trigger */
gpio_trigger_enable(handle, gpio_trigger_callback, 500, GPIO_TRIG_BOTH);

Application Example

waybyte/example-gpio

4G LTE Module GPIO Mapping

GPIO Name

EC600U

EC200U

N58

N716

L610

EG915U

GPIO_0

Pin 61

Pin 27

Pin 50

Pin 99

Pin 27

Pin 4

GPIO_1

Pin 58

Pin 26

Pin 90

Pin 100

Pin 26

Pin 5

GPIO_2

Pin 59

Pin 24

Pin 80

Pin 101

Pin 24

Pin 6

GPIO_3

Pin 60

Pin 25

Pin 78

Pin 102

Pin 25

Pin 7

GPIO_4

Pin 69

Pin 13

Pin 96

Pin 54

Pin 13

Pin 1

GPIO_5

Pin 70

Pin 135

Pin 39

Pin 38

Pin 135

Pin 20

GPIO_6

GPIO_7

Pin 118

Pin 133

Pin 25

Pin 89

Pin 133

Pin 65

GPIO_8

Pin 99

Pin 134

Pin 134

Pin 104

GPIO_9

Pin 98

Pin 132

Pin 2

Pin 45

Pin 132

Pin 11

GPIO_10

Pin 95

Pin 131

Pin 79

Pin 32

Pin 131

Pin 12

GPIO_11

Pin 119

Pin 130

Pin 83

Pin 21

Pin 130

Pin 13

GPIO_12

Pin 100

Pin 129

Pin 13

Pin 22

Pin 129

Pin 14

GPIO_13

Pin 54

Pin 5

Pin 67

Pin 5

Pin 21

GPIO_14

Pin 57

Pin 141

Pin 82

Pin 71

Pin 141

Pin 40

GPIO_15

Pin 56

Pin 142

Pin 81

Pin 70

Pin 142

Pin 41

GPIO_16

Pin 11

Pin 41

Pin 59

Pin 122

Pin 41

Pin 103

GPIO_17

Pin 12

Pin 42

Pin 58

Pin 121

Pin 42

Pin 114

GPIO_18

Pin 120

Pin 61

Pin 54

Pin 115

Pin 61

Pin 111

GPIO_19

Pin 16

Pin 62

Pin 60

Pin 65

Pin 62

Pin 115

GPIO_20

Pin 10

Pin 63

Pin 61

Pin 106

Pin 63

Pin 95

GPIO_21

Pin 14

Pin 66

Pin 55

Pin 116

Pin 66

Pin 97

GPIO_22

Pin 15

Pin 6

Pin 56

Pin 114

Pin 6

Pin 98

GPIO_23

Pin 13

Pin 23

Pin 57

Pin 117

Pin 23

Pin 78

GPIO_24

Pin 48

Pin 33

Pin 5

Pin 52

Pin 33

Pin 38

GPIO_25

Pin 39

Pin 31

Pin 7

Pin 47

Pin 31

Pin 30

GPIO_26

Pin 40

Pin 30

Pin 8

Pin 48

Pin 30

Pin 39

GPIO_27

Pin 49

Pin 29

Pin 3

Pin 50

Pin 29

Pin 18

GPIO_28

Pin 50

Pin 28

Pin 4

Pin 51

Pin 28

Pin 19

GPIO_29

Pin 53

Pin 1

Pin 23

Pin 87

Pin 1

Pin 84

GPIO_30

Pin 52

Pin 2

Pin 22

Pin 86

Pin 2

Pin 86

GPIO_31

Pin 51

Pin 4

Pin 24

Pin 88

Pin 4

Pin 85

GPIO_0_ALT

Pin 66

Pin 125

Pin 68

Pin 92

Pin 125

Pin 116

GPIO_1_ALT

Pin 63

Pin 124

Pin 67

Pin 90

Pin 124

Pin 106

GPIO_2_ALT

Pin 67

Pin 123

Pin 66

Pin 93

Pin 123

Pin 105

GPIO_3_ALT

Pin 65

Pin 122

Pin 65

Pin 91

Pin 122

Pin 16

GPIO_4_ALT

Pin 137

Pin 121

Pin 73

Pin 94

Pin 121

Pin 108

GPIO_5_ALT

Pin 62

Pin 119

Pin 64

Pin 96

Pin 119

Pin 92

GPIO_9_ALT

Pin 1

Pin 40

Pin 84

Pin 6

Pin 40

Pin 26

GPIO_10_ALT

Pin 4

Pin 37

Pin 87

Pin 7

Pin 37

Pin 25

GPIO_11_ALT

Pin 3

Pin 38

Pin 86

Pin 5

Pin 38

Pin 64

GPIO_12_ALT

Pin 2

Pin 39

Pin 85

Pin 4

Pin 39

Pin 88

GPIO_18_ALT

Pin 34

Pin 65

Pin 51

Pin 56

Pin 65

Pin 37

GPIO_19_ALT

Pin 33

Pin 64

Pin 52

Pin 57

Pin 64

Pin 36

GPIO_20_ALT

Pin 123

Pin 136

Pin 70

Pin 12

Pin 136

Pin 28

GPIO_21_ALT

Pin 124

Pin 139

Pin 69

Pin 11

Pin 139

Pin 27

GPIO_22_ALT

Pin 122

Pin 126

Pin 71

Pin 13

Pin 126

Pin 83

GPIO_23_ALT

Pin 121

Pin 127

Pin 72

Pin 14

Pin 127

Pin 42

Note

Only one pin can be configured at a time for GPIO function between GPIO_x and GPIO_x_ALT. For example, if GPIO_0_ALT is configured as GPIO, GPIO_1 pin cannot be used as GPIO.

GSM/NB-IoT Module GPIO Mapping

RDA8955 based modules

GPIO Name

M590 Pin

MC65 Pin

A9 Pin

GPIO_0

Pin 7

Pin 33

Pin 53

GPIO_1

Pin 8

Pin 34

Pin 54

GPIO_2

Pin 41

Pin 38

Pin 52

GPIO_3

Pin 42

Pin 39

Pin 51

GPIO_4

Pin 59

Pin 24

Pin 49

GPIO_5

Pin 58

Pin 25

Pin 50

GPIO_6

Pin 60

Pin 35

Pin 48

GPIO_7

Pin 61

Pin 36

Pin 47

GPIO_8

Pin 35

Pin 8

Pin 8

GPIO_9

Pin 34

Pin 7

Pin 7

GPIO_10

Pin 33

Pin 9

Pin 6

GPIO_11

Pin 32

Pin 10

Pin 5

GPIO_12

Pin 31

Pin 11

Pin 4

GPIO_13

Pin 30

Pin 12

Pin 3

GPIO_14

Pin 56

Pin 59

Pin 20

GPIO_15

Pin 55

Pin 61

Pin 19

GPIO_16

Pin 53

Pin 62

Pin 23

GPIO_17

Pin 54

Pin 60

Pin 21

GPIO_18

Pin 57

Pin 22

GPIO_19

Pin 23

Pin 56

Pin 1

GPIO_20

Pin 24

Pin 65

Pin 2

GPIO_21

Pin 25

Pin 64

GPIO_22

Pin 26

Pin 57

GPIO_23

Pin 27

Pin 58

GPIO_24

Pin 28

Pin 63

GPIO_25

Pin 10

Pin 32

GPIO_26

Pin 25

GPIO_27

Pin 26

GPIO_28

Pin 30

GPIO_29

Pin 9

Pin 24

GPIO_30

Pin 5

Pin 28

Pin 31

GPIO_31

Pin 17

Pin 47

Pin 16

GPIO_32

Pin 50

Pin 37

GPIO_33

Pin 66

GPIO_34

Pin 64

Pin 46

GPIO_35

Pin 63

Pin 30

Pin 38

GPIO_36

Pin 62

Pin 29

Pin 37

MT2503/MT6261/MT2625 based modules

GPIO Name

MC20U Pin

M56 Pin

MC60 Pin
MC20 Pin

M66 Pin

BC20 Pin

SIM868 Pin

GPIO_0

Pin 47

Pin 12

Pin 47

Pin 16

Pin 2

Pin 1

GPIO_1

Pin 37

Pin 17

Pin 37

Pin 19

Pin 3

Pin 2

GPIO_2

Pin 35

Pin 24

Pin 35

Pin 20

Pin 4

Pin 3

GPIO_3

Pin 36

Pin 23

Pin 36

Pin 21

Pin 6

Pin 4

GPIO_4

Pin 38

Pin 26

Pin 38

Pin 22

Pin 7

Pin 5

GPIO_5

Pin 39

Pin 59

Pin 39

Pin 23

Pin 8

Pin 6

GPIO_6

Pin 59

Pin 4

Pin 59

Pin 28

Pin 9

Pin 7

GPIO_7

Pin 61

Pin 15

Pin 61

Pin 29

Pin 10

Pin 14

GPIO_8

Pin 62

Pin 27

Pin 62

Pin 30

Pin 24

Pin 15

GPIO_9

Pin 60

Pin 16

Pin 60

Pin 31

Pin 25

Pin 16

GPIO_10

Pin 3

Pin 78

Pin 7

Pin 32

Pin 28

Pin 17

GPIO_11

Pin 4

Pin 86

Pin 8

Pin 33

Pin 29

Pin 22

GPIO_12

Pin 7

Pin 87

Pin 9

Pin 15

Pin 30

Pin 23

GPIO_13

Pin 8

Pin 76

Pin 11

Pin 17

Pin 33

Pin 29

GPIO_14

Pin 9

Pin 77

Pin 12

Pin 18

Pin 34

Pin 41

GPIO_15

Pin 10

Pin 75

Pin 10

Pin 25

Pin 35

Pin 42

GPIO_16

Pin 13

Pin 44

Pin 57

Pin 38

Pin 36

Pin 46

GPIO_17

Pin 46

Pin 49

Pin 58

Pin 39

Pin 38

Pin 47

GPIO_18

Pin 55

Pin 88

Pin 63

Pin 39

Pin 48

GPIO_19

Pin 63

Pin 45

Pin 64

Pin 47

Pin 49

GPIO_20

Pin 66

Pin 3

Pin 65

Pin 54

Pin 50

GPIO_21

Pin 56

Pin 1

Pin 46

Pin 57

Pin 51

GPIO_22

Pin 57

Pin 53

Pin 34*

Pin 58

Pin 52

GPIO_23

Pin 58

Pin 48

Pin 33*

Pin 59

Pin 53

GPIO_24

Pin 64

Pin 28

Pin 24

Pin 60

Pin 54

GPIO_25

Pin 65

Pin 89

Pin 25

Pin 61

Pin 55

GPIO_26

Pin 33

Pin 36

Pin 30

Pin 62

Pin 57

GPIO_27

Pin 34

Pin 25

Pin 29

Pin 63

Pin 58

GPIO_28

Pin 24

Pin 40

Pin 19

Pin 67

Pin 64

GPIO_29

Pin 25

Pin 41

Pin 21

Pin 68

Pin 65

GPIO_30

Pin 30

Pin 2

Pin 20

GPIO_31

Pin 29

Pin 13

Pin 28

GPIO_32

Pin 19

Pin 62

GPIO_33

Pin 21

Pin 65

GPIO_34

Pin 20

Pin 64

GPIO_35

Pin 28

Pin 27

GPIO_36

Pin 67#

Pin 66#

GPIO_37

Pin 60#

GPIO_38

Pin 19

GPIO_39

Pin 29

GPIO_40

Pin 30

GPIO_41

Pin 34

GPIO_42

Pin 35

GPIO_43

Pin 52

GPIO_44

Pin 58

GPIO_45

Pin 69

GPIO_46

Pin 70

GPIO_47

Pin 71

GPIO_48

Pin 80

GPIO_49

Pin 81

GPIO_50

Pin 82

GPIO_51

Pin 31

API Reference

Header File

Source: include/hw/gpio.h

#include <hw/gpio.h>

Functions

int gpio_request(unsigned int ioname, int flags)

Request a GPIO

Parameters:
Returns:

On success returns gpio handle, on failure (when no memory/already used) 0 is returned

int gpio_free(int handle)

Free a previously requested gpio

Parameters:

handle – Handle to gpio object returned by gpio_request

Returns:

0 on success, negative error code on failure

int gpio_read(int handle)

Read input GPIO value

Parameters:

handle – Handle to gpio object returned by gpio_request

Returns:

input gpio level gpio_level_e

int gpio_write(int handle, int value)

Write output GPIO pin

Parameters:
Returns:

0 on success, negative value on failure

int gpio_setdir(int handle, int dir)

Set or change gpio direction

Parameters:
  • handle – Handle to gpio object returned by gpio_request

  • dir – New gpio configuration, ORed list of GPIO flags gpio_conf_e

Returns:

0 on success, negative value on failure

int gpio_trigger_enable(int handle, gpio_callback_f fn, int trigger_time, int flags)

Enable GPIO trigger

GPIO driver provide slow trigger option without debounce support to check and confirm active trigger. On active trigger, callback function is called with state of gpio. Triggers are only possible on gpio configured as inputs.

If input level changes after first transition is detected and debounce time, internal debounce timer is reset for resampling of IO state.

Parameters:
  • handle – Handle to gpio object returned by gpio_request

  • fn – Callback function of type gpio_callback_f

  • trigger_time – Debounce time or trigger delay in milliseconds

  • flags – Type of trigger requested gpio_trigger_e

Returns:

0 on success, negative error code on failure

int gpio_trigger_disable(int handle)

Disable GPIO trigger

Parameters:

handle – Handle to gpio object returned by gpio_request

Returns:

0 on success, negative error code on failure

int gpio_setuserdata(int handle, void *arg)

Assign user specific data or application context to GPIO object

Parameters:
  • handle – Handle to gpio object returned by gpio_request

  • arg – pointer to user data

Returns:

0 on success, negative value on failure

void *gpio_getuserdata(int handle)

Get user specific data or application context assigned to gpio object by gpio_setuserdata function

Parameters:

handle – Handle to gpio object returned by gpio_request

Returns:

pointer to user data if data is assigned, NULL otherwise

int gpio_readfast(int handle)

GPIO Fast read Use with valid IO handle only

Parameters:

handle – Handle to gpio object returned by gpio_request

Returns:

input gpio level gpio_level_e

int gpio_writefast(int handle, int value)

GPIO Fast write Use with valid IO handle only

Parameters:
Returns:

0 on success, negative value on failure

Type Definitions

typedef void (*gpio_callback_f)(int handle, int pin, int level)

GPIO Callback function prototype

Param handle:

Param pin:

Param level:

Enumerations

enum gpio_level_e

GPIO Level

Values:

enumerator GPIO_LEVEL_LOW

GPIO Low level

enumerator GPIO_LEVEL_HIGH

GPIO High level

enum gpio_conf_e

GPIO Configuration Flags

Flags can be ORed together to configure a GPIO.

Values:

enumerator GPIO_FLAG_INPUT

Configure gpio as input

enumerator GPIO_FLAG_OUTPUT

Configure gpio as Output

enumerator GPIO_FLAG_DEFHIGH

Set default state to high during gpio_request

enumerator GPIO_FLAG_DEFLOW

Set default state to low during gpio_request

enumerator GPIO_FLAG_PULLUP

Enable weak pullup

enumerator GPIO_FLAG_PULLDOWN

Enable weak pulldown

enumerator GPIO_FLAG_PULLSTRG

This flag when combined with GPIO_FLAG_PULLUP or GPIO_FLAG_PULLDOWN enables strong pull-up/pull-down respectively.

enum gpio_trigger_e

GPIO Trigger Levels

Values:

enumerator GPIO_TRIG_LOW

Trigger High -> Low level transition

enumerator GPIO_TRIG_HIGH

Trigger Low -> High level transition

enumerator GPIO_TRIG_BOTH

Trigger on change of either level

Note

Please refer header file for actual number of GPIOs available for respective board.

Header File

Source: include/plat/def_gpio.h

#include <plat/def_gpio.h>

Enumerations

enum gpioname_e

GPIO List Each GPIO can be configured for alternate function via Pinmux APIs, Check “See Also” section for more information

Values:

enumerator GPIO_0

Pin 12

enumerator GPIO_1

Pin 17

enumerator GPIO_2

Pin 24

enumerator GPIO_3

Pin 23

enumerator GPIO_4

Pin 26

enumerator GPIO_5

Pin 59

enumerator GPIO_6

Pin 4

enumerator GPIO_7

Pin 15

enumerator GPIO_8

Pin 27

enumerator GPIO_9

Pin 16

enumerator GPIO_10

Pin 78

enumerator GPIO_11

Pin 86

enumerator GPIO_12

Pin 87

enumerator GPIO_13

Pin 76

enumerator GPIO_14

Pin 77

enumerator GPIO_15

Pin 75

enumerator GPIO_16

Pin 44

enumerator GPIO_17

Pin 49

enumerator GPIO_18

Pin 88

enumerator GPIO_19

Pin 45

enumerator GPIO_20

Pin 3

enumerator GPIO_21

Pin 1

enumerator GPIO_22

Pin 53

enumerator GPIO_23

Pin 48

enumerator GPIO_24

Pin 28

enumerator GPIO_25

Pin 89

enumerator GPIO_26

Pin 36

enumerator GPIO_27

Pin 25

enumerator GPIO_28

Pin 40

enumerator GPIO_29

Pin 41

enumerator GPIO_30

Pin 2

enumerator GPIO_31

Pin 13

enumerator GPIO_32

Pin 62

enumerator GPIO_33

Pin 65

enumerator GPIO_34

Pin 64

enumerator GPIO_35

Pin 27

enumerator GPIO_36

Pin 66 - Input Only

enumerator GPIO_37

Pin 60 - Input Only

enumerator GPIO_38

Pin 19

enumerator GPIO_39

Pin 29

enumerator GPIO_40

Pin 30

enumerator GPIO_41

Pin 34

enumerator GPIO_42

Pin 35

enumerator GPIO_43

Pin 52

enumerator GPIO_44

Pin 58

enumerator GPIO_45

Pin 69

enumerator GPIO_46

Pin 70

enumerator GPIO_47

Pin 71

enumerator GPIO_48

Pin 80

enumerator GPIO_49

Pin 81

enumerator GPIO_50

Pin 82

enumerator GPIO_51

Pin 31

enumerator GPIO_PIN_MAX