GPIO with custom Devicetree binding
Overview
In Zephyr, all hardware-specific configuration is described in the devicetree.
Consequently, also GPIO pins are configured in the devicetree and assigned to a specific purpose using a compatible.
This is in contrast to other embedded environments like Arduino, where e.g. the direction (input / output) of a GPIO pin is configured in the application firmware.
For typical use cases like LEDs or buttons, the existing gpio-leds
or
gpio-keys
compatibles can be used.
This sample demonstrates how to use a GPIO pin for other purposes with a custom devicetree binding.
We assume that a load with high current demands should be switched on or off via a MOSFET. The
custom devicetree binding for the power output controlled via a GPIO pin is specified in the file
samples/basic/custom_dts_binding/dts/bindings/power-switch.yaml. The gate driver for
the MOSFET would be connected to the pin as specified in the .overlay
file in the boards
folder.
Building and Running
For each board that should be supported, a .overlay
file has to be defined
in the boards
subfolder.
Afterwards, the sample can be built and executed for the <board>
as follows:
west build -b <board> samples/basic/custom_dts_binding
west flash
For demonstration purposes, some boards use the GPIO pin of the built-in LED.
Sample output
The GPIO pin should be switched to active level after one second.
The following output is printed:
Initializing pin with inactive level.
Waiting one second.
Setting pin to active level.