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
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
|
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:
ioname – name of GPIO from gpioname_e
flags – ORed list of gpio initialization flags gpio_conf_e
- 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:
handle – Handle to gpio object returned by gpio_request
value – gpio level to set gpio_level_e
- 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:
handle – Handle to gpio object returned by gpio_request
value – gpio level to set gpio_level_e
- 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
-
enumerator GPIO_LEVEL_LOW
-
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.
-
enumerator GPIO_FLAG_INPUT
-
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
-
enumerator GPIO_TRIG_LOW
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
-
enumerator GPIO_0
