Getting started with gpio overlay

Hi

I am really struggling to get started with overlay files. I have read through a lot of documentation, watched a few hours of YouTube tutorials, and yet I can’t even get going with one gpio.


I have an existing project for the nRF5340_DK, based I think on Nordic’s BLE UART Peripheral example.
I had to change the pins used for the i2c bus, so I managed to hack an overlay fiel for that, which works – but probably isn’t correct.
So now I want to try using one of the GPIO, as an output.


The examples I found were here and here.

I couldn't get either to build.

Any help / guidance / pointers would be appreciated, thank you.

DETAILS

I decided to pick gpio0.25, and then gpio0.26, since they seem to be free.

Here is my overlay file – you will see both attempts at the end of the file – one commented out:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*
* Copyright (c) 2022 Nordic Semiconductor ASA
*
* SPDX-License-Identifier: LicenseRef-Nordic-5-Clause
*/
/ {
chosen {
nordic,nus-uart = &uart0;
};
};
&pinctrl {
i2c2_default: i2c2_default {
group1 {
psels = <NRF_PSEL(TWIM_SCL, 0, 6)>, <NRF_PSEL(TWIM_SDA, 0, 7)>;
};
};
i2c2_sleep: i2c2_sleep {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

And in main.c, again – two attempts, one commented out:

Fullscreen
1
2
3
4
5
6
// !gpio! - start
//#define GPIO025_NODE DT_ALIAS(mycusgpio)
//#define GPIO025 DT_GPIO_LABEL(GPIO025_NODE, gpios)
#define GPIO025_NODE DT_ALIAS(gpiocus0)
#define GPIO025 DT_GPIO_LABEL(GPIO025_NODE, gpios)
// !gpio! - end
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

And in main():

Fullscreen
1
2
3
const struct device *dev_gpio0; // !gpio!
dev_gpio0 = device_get_binding(GPIO025); // !gpio!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Here are the warnings and errors I get for the first build (for gpio0.25 only – which is the attempt commented out above):

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
src\main.c:213:13: warning: Macro is deprecated
213 | dev_gpio0 = device_get_binding(GPIO025);
| ^~~~~~~~~~~~~~~~~~~~~
build\zephyr\include\generated\devicetree_unfixed.h:1749:58: error: 'DT_N_S_soc_S_peripheral_40000000_S_gpio_842500_P_label' undeclared (first use in this function); did you mean 'DT_N_S_soc_S_peripheral_40000000_S_gpio_842500_P_reg'?
1749 | #define DT_N_S_custom_gpios_S_cusgpio_0_P_gpios_IDX_0_PH DT_N_S_soc_S_peripheral_40000000_S_gpio_842500
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree.h:3068:24: note: in definition of macro 'DT_CAT'
3068 | #define DT_CAT(a1, a2) a1 ## a2
| ^~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree\gpio.h:106:2: note: in expansion of macro 'DT_PROP'
106 | DT_PROP(DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, idx), label) __DEPRECATED_MACRO
| ^~~~~~~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree.h:3076:41: note: in expansion of macro 'DT_N_S_custom_gpios_S_cusgpio_0_P_gpios_IDX_0_PH'
3076 | #define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
| ^~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree.h:1247:2: note: in expansion of macro 'DT_CAT6'
1247 | DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
| ^~~~~~~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree\gpio.h:54:2: note: in expansion of macro 'DT_PHANDLE_BY_IDX'
54 | DT_PHANDLE_BY_IDX(node_id, gpio_pha, idx)
| ^~~~~~~~~~~~~~~~~
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

And the error and warning for my second attempt:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
../src/main.c: In function 'main':
src\main.c:215:13: warning: Macro is deprecated
215 | dev_gpio0 = device_get_binding(GPIO025); // !gpio!
| ^~~~~~~~~~~~~~~~~~~~~
build\zephyr\include\generated\devicetree_unfixed.h:1752:56: error: 'DT_N_S_soc_S_peripheral_40000000_S_gpio_842500_P_label' undeclared (first use in this function); did you mean 'DT_N_S_soc_S_peripheral_40000000_S_gpio_842500_P_reg'?
1752 | #define DT_N_S_gpiocustom_S_gpiocus_0_P_gpios_IDX_0_PH DT_N_S_soc_S_peripheral_40000000_S_gpio_842500
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree.h:3068:24: note: in definition of macro 'DT_CAT'
3068 | #define DT_CAT(a1, a2) a1 ## a2
| ^~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree\gpio.h:106:2: note: in expansion of macro 'DT_PROP'
106 | DT_PROP(DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, idx), label) __DEPRECATED_MACRO
| ^~~~~~~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree.h:3076:41: note: in expansion of macro 'DT_N_S_gpiocustom_S_gpiocus_0_P_gpios_IDX_0_PH'
3076 | #define DT_CAT6(a1, a2, a3, a4, a5, a6) a1 ## a2 ## a3 ## a4 ## a5 ## a6
| ^~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree.h:1247:2: note: in expansion of macro 'DT_CAT6'
1247 | DT_CAT6(node_id, _P_, prop, _IDX_, idx, _PH)
| ^~~~~~~
C:\Users\me\ncs\v2.1.0\zephyr\include\zephyr\devicetree\gpio.h:54:2: note: in expansion of macro 'DT_PHANDLE_BY_IDX'
54 | DT_PHANDLE_BY_IDX(node_id, gpio_pha, idx)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

By the way, I don’t know where this came from, in the overlay file – I suspect is was from when I was playing with the Device Tree GUI:

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
&uart0_default {
group2 {
psels = <NRF_PSEL(UART_RX, 0, 22)>, <NRF_PSEL(UART_CTS, 0, 21)>;
};
};
&uart0_default {
group1 {
psels = <NRF_PSEL(UART_RTS, 0, 19)>;
};
};
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX