94 lines
3.2 KiB
ReStructuredText
94 lines
3.2 KiB
ReStructuredText
.. zephyr:code-sample:: nrf_dynamic_pinctrl
|
|
:name: Dynamic Pin Control
|
|
|
|
Dynamically change pin configuration at boot time.
|
|
|
|
The Dynamic Pin Control (nRF) sample demonstrates how to change ``uart0`` at
|
|
early boot stages, depending on the input level on a pin connected to a
|
|
push-button.
|
|
|
|
Overview
|
|
********
|
|
|
|
Slightly different board revisions that implement just small changes (like
|
|
improving the PCB layout or changing components to new equivalents) do not
|
|
necessarily require changes to the firmware. As such, one firmware image can be
|
|
able to boot onto multiple board revisions.
|
|
|
|
However, if a certain peripheral is routed to different sets of pins between
|
|
revisions, the firmware needs to select the appropriate routing when the
|
|
system is initialized.
|
|
|
|
The Dynamic Pin Control (nRF) sample allows you to select the appropriate routing.
|
|
|
|
If the push button is not pressed, the system does nothing and continues with
|
|
the default configuration. If the button is pressed, the alternative
|
|
configuration is applied.
|
|
|
|
Alternative configurations can only be applied if the device driver using the
|
|
associated pins has not been initialized yet. Therefore, pay attention to the
|
|
initialization priorities set in the :file:`prj.conf` file.
|
|
|
|
nRF52840 DK
|
|
===========
|
|
|
|
The diagram below shows the pins assigned to the default and alternative
|
|
configurations.
|
|
|
|
.. figure:: images/nrf52840dk-dynamic-pinctrl.webp
|
|
|
|
Configuration for nRF52840 DK
|
|
|
|
If you power on the board, the ``uart0`` peripheral is routed to the default
|
|
set of pins. The default set of pins is also exposed through the left USB
|
|
connector as a virtual COM port.
|
|
|
|
If you power on the board while holding Button 1, the ``uart0`` peripheral is
|
|
routed to the alternative set of pins.
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
You can build this application for the nRF52840 DK as follows:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/boards/nordic/dynamic_pinctrl
|
|
:board: nrf52840dk/nrf52840
|
|
:goals: build
|
|
:compact:
|
|
|
|
The sample can also support other nRF based boards if you provide a Devicetree
|
|
overlay file with an alternative configuration for ``uart0``. Select ``uart0``
|
|
for ``zephyr,console`` to make the sample work as expected.
|
|
|
|
Sample Output
|
|
=============
|
|
|
|
Follow these steps to test the two configurations :
|
|
|
|
1. Connect a USB-to-UART adapter to both sets of pins. If the board routes the
|
|
default configuration to a virtual COM port (as in the nRF52840 DK), you can
|
|
directly use that port.
|
|
|
|
#. Open two serial terminals, one connected to the default set of pins and the
|
|
other connected to the alternative set of pins.
|
|
|
|
.. figure:: images/terminals-empty.png
|
|
|
|
Two serial terminals (left: default, right: alternative).
|
|
|
|
#. Turn on the board. You should see a ``Hello World!`` message printed on
|
|
the first terminal.
|
|
|
|
.. figure:: images/terminals-default.png
|
|
|
|
``Hello World!`` printed on the default set of pins.
|
|
|
|
#. Press and hold the configuration-selection push-button (button 1 on the
|
|
nRF52840 DK) and press the board reset button. You now should see a
|
|
``Hello World!`` message on the second terminal.
|
|
|
|
.. figure:: images/terminals-alt.png
|
|
|
|
``Hello World!`` printed on the alternative set of pins.
|