Skip to content

Commit cfc484a

Browse files
committed
docs: Describe the different shield interfaces
Add descriptions of the most popular shield interfaces. I moved the section on shield activation to the top of the page. Signed-off-by: Jonas Berg <[email protected]>
1 parent 4ef1163 commit cfc484a

File tree

1 file changed

+263
-18
lines changed

1 file changed

+263
-18
lines changed

doc/hardware/porting/shields.rst

Lines changed: 263 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,265 @@ to extend its features and services for easier and modularized prototyping.
88
In Zephyr, the shield feature provides Zephyr-formatted shield
99
descriptions for easier compatibility with applications.
1010

11+
Shield activation
12+
*****************
13+
14+
Activate support for one or more shields by adding the matching ``--shield`` arguments
15+
to the west command:
16+
17+
.. zephyr-app-commands::
18+
:app: your_app
19+
:board: your_board
20+
:shield: x_nucleo_idb05a1,x_nucleo_iks01a1
21+
:goals: build
22+
23+
24+
Alternatively, it could be set by default in a project's CMakeLists.txt:
25+
26+
.. code-block:: cmake
27+
28+
set(SHIELD x_nucleo_iks01a1)
29+
30+
31+
Shield hardware interfaces (form factors)
32+
*****************************************
33+
34+
Zephyr supports a number of shield interfaces, for example the well-known Arduino
35+
form factor.
36+
37+
Note that some boards and shields only support a subset of the features of a shield
38+
hardware interface.
39+
40+
41+
Arduino Uno R3
42+
--------------
43+
44+
This is the form factor of the Arduino Uno R3 board.
45+
46+
.. figure:: ../../../boards/shields/mcp2515/doc/keyestudio_can_bus_ks0411.jpg
47+
:align: center
48+
:width: 300px
49+
:alt: Keyestudio CAN-BUS Shield (KS0411)
50+
51+
Keyestudio CAN-BUS, an example of an Arduino shield (Credit: Keyestudio)
52+
53+
Relevant devicetree node labels:
54+
55+
- ``arduino_header`` See :dtcompatible:`arduino-header-r3` for details on GPIO pin definitions
56+
and includes for use in devicetree files.
57+
- ``arduino_adc`` See :dtcompatible:`arduino,uno-adc`
58+
- ``arduino_pwm`` See :dtcompatible:`arduino-header-pwm`
59+
- ``arduino_serial``
60+
- ``arduino_i2c``
61+
- ``arduino_spi``
62+
63+
For technical details, see `Arduino Uno R3 pinout`_.
64+
65+
66+
Arduino MKR
67+
-----------
68+
69+
This is the form factor of the Arduino MKR boards.
70+
71+
.. figure:: ../../../boards/arduino/mkrzero/doc/img/arduino_mkrzero.jpg
72+
:align: center
73+
:width: 200px
74+
:alt: Arduino MKR Zero
75+
76+
Arduino MKR Zero, an example of a board with the Arduino MKR shield interface
77+
78+
Relevant devicetree node labels:
79+
80+
- ``arduino_mkr_header`` See :dtcompatible:`arduino-mkr-header` for details on GPIO pin definitions
81+
and includes for use in devicetree files.
82+
- ``arduino_mkr_i2c``
83+
- ``arduino_mkr_spi``
84+
- ``arduino_mkr_serial``
85+
86+
87+
Arduino Nano
88+
------------
89+
90+
This is the form factor of the Arduino Nano boards.
91+
92+
.. figure:: ../../../boards/arduino/nano_33_iot/doc/img/nano_33_iot.jpg
93+
:align: center
94+
:width: 300px
95+
:alt: Arduino Nano 33 IOT
96+
97+
Arduino Nano 33 IOT, an example of a board with the Arduino Nano shield interface
98+
99+
Relevant devicetree node labels:
100+
101+
- ``arduino_nano_header`` See :dtcompatible:`arduino-nano-header` for details on GPIO pin definitions
102+
and includes for use in devicetree files.
103+
- ``arduino_nano_i2c``
104+
- ``arduino_nano_spi``
105+
- ``arduino_nano_serial``
106+
107+
108+
mikroBUS |trade|
109+
----------------
110+
111+
This is an interface standard for add-on boards, developed by Mikroe.
112+
113+
.. figure:: ../../../boards/shields/mikroe_3d_hall_3_click/doc/images/mikroe_3d_hall_3_click.webp
114+
:align: center
115+
:alt: 3D Hall 3 Click
116+
:height: 300px
117+
118+
3D Hall 3 Click, an example of a mikroBUS |trade| shield
119+
120+
Relevant devicetree node labels:
121+
122+
- ``mikrobus_header`` See :dtcompatible:`mikro-bus` for GPIO pin definitions and links to
123+
technical specifications.
124+
- ``mikrobus_adc``
125+
- ``mikrobus_i2c``
126+
- ``mikrobus_spi``
127+
- ``mikrobus_serial``
128+
129+
Note that boards with several mikroBUS |trade| connectors might define for
130+
example ``mikrobus_2_spi``.
131+
132+
133+
Pico
134+
----
135+
136+
This is the form factor of the Raspberry Pi Pico boards.
137+
138+
.. figure:: ../../../boards/shields/waveshare_ups/doc/waveshare_pico_ups_b.jpg
139+
:align: center
140+
:width: 300px
141+
:alt: Waveshare Pico UPS-B shield
142+
143+
Waveshare Pico UPS-B, an example of a Pico shield
144+
145+
Relevant devicetree node labels:
146+
147+
- ``pico_header`` See :dtcompatible:`raspberrypi,pico-header` for GPIO pin definitions.
148+
- ``pico_i2c0``
149+
- ``pico_i2c1``
150+
- ``pico_serial``
151+
- ``pico_spi``
152+
153+
154+
Feather
155+
-------
156+
157+
This is the formfactor of the Adafruit Feather series of boards.
158+
Shields intended for Feather boards are called Featherwings.
159+
160+
.. figure:: ../../../boards/shields/adafruit_adalogger_featherwing/doc/adafruit_adalogger_featherwing.webp
161+
:align: center
162+
:width: 300px
163+
:alt: Adafruit Adalogger Featherwing Shield
164+
165+
Adafruit Adalogger, an example of a Featherwing (Credit: Adafruit)
166+
167+
Relevant devicetree node labels:
168+
169+
- ``feather_header`` See :dtcompatible:`adafruit-feather-header` for GPIO pin definitions.
170+
- ``feather_adc``
171+
- ``feather_i2c``
172+
- ``feather_serial``
173+
- ``feather_spi``
174+
175+
176+
Stemma QT / Quiic / zephyr_i2c
177+
------------------------------
178+
179+
These are four-pin I2C connectors. Sparkfun calls these connectors "Qwiic", and Adafruit
180+
calls them "Stemma QT". The I2C connectors have four pins; GND, +3.3 Volt, I2C data and I2C
181+
clock. The most common physical connector is the 1.0 mm pitch JST-SH.
182+
183+
Due to the different brand names, the interface is labeled "zephyr_i2c".
184+
185+
.. figure:: ../../../boards/shields/adafruit_vcnl4040/doc/adafruit_vcnl4040.webp
186+
:align: center
187+
:width: 200px
188+
:alt: Adafruit VCNL4040 Shield
189+
190+
Adafruit VCNL4040, an example of a zephyr_i2c shield (Credit: Adafruit)
191+
192+
See :dtcompatible:`stemma-qt-connector` and :dtcompatible:`grove-header` for descriptions
193+
and links to further details.
194+
195+
Relevant devicetree node labels:
196+
197+
- ``zephyr_i2c`` Introduced in Zephyr 4.2
198+
199+
200+
ST Morpho
201+
---------
202+
203+
Development boards from ST Microelectronics often uses the ST Morpho shield interface.
204+
205+
.. figure:: ../../../boards/shields/x_nucleo_gfx01m2/doc/x_nucleo_gfx01m2.webp
206+
:align: center
207+
:width: 300px
208+
:alt: X-NUCLEO-GFX01M2
209+
210+
X-NUCLEO-GFX01M2, an example of an ST Morpho shield
211+
212+
Relevant devicetree node labels:
213+
214+
- ``st_morpho_header`` See :dtcompatible:`st-morpho-header` for details on GPIO pin definitions
215+
and includes for use in devicetree files.
216+
- ``st_morpho_lcd_spi``
217+
- ``st_morpho_flash_spi``
218+
219+
220+
Xiao
221+
----
222+
223+
This is the formfactor of the Seeeduino XIAO boards.
224+
225+
.. figure:: ../../../boards/shields/seeed_xiao_expansion_board/doc/img/seeed_xiao_expansion_board.webp
226+
:align: center
227+
:width: 300px
228+
:alt: Seeed Studio XIAO Expansion Board
229+
230+
Seeed Studio XIAO Expansion Board, an example of a Xiao shield (Credit: Seeed Studio)
231+
232+
Relevant devicetree node labels:
233+
234+
- ``xiao_d`` See :dtcompatible:`seeed,xiao-gpio` for GPIO pin definitions.
235+
- ``xiao_spi``
236+
- ``xiao_i2c``
237+
- ``xiao_serial``
238+
- ``xiao_adc``
239+
- ``xiao_dac``
240+
241+
242+
Microbit
243+
--------
244+
245+
This is for the edge connector of the Microbit boards.
246+
247+
.. figure:: ../../../boards/bbc/microbit_v2/doc/img/bbc_microbit2.jpg
248+
:align: center
249+
:width: 500px
250+
:alt: Microbit V2 board
251+
252+
Microbit V2 board uses the Microbit shield interface
253+
254+
See :dtcompatible:`microbit,edge-connector` for GPIO pin definitions and
255+
links to technical requirements.
256+
257+
258+
Camera and display connectors
259+
-----------------------------
260+
261+
These describes connections to cameras and displays (strictly speaking not shields).
262+
263+
- :dtcompatible:`arducam,dvp-20pin-connector`
264+
- :dtcompatible:`nxp,cam-44pins-connector`
265+
- :dtcompatible:`nxp,parallel-lcd-connector`
266+
- :dtcompatible:`raspberrypi,csi-connector`
267+
- :dtcompatible:`weact,dcmi-camera-connector`
268+
269+
11270
.. _shield_porting_guide:
12271

13272
Shield porting and configuration
@@ -134,24 +393,6 @@ board or board revision overriding files to a shield, as follows:
134393
└── <board>.conf
135394
136395
137-
Shield activation
138-
*****************
139-
140-
Activate support for one or more shields by adding the matching ``--shield`` arguments
141-
to the west command:
142-
143-
.. zephyr-app-commands::
144-
:app: your_app
145-
:shield: x_nucleo_idb05a1,x_nucleo_iks01a1
146-
:goals: build
147-
148-
149-
Alternatively, it could be set by default in a project's CMakeLists.txt:
150-
151-
.. code-block:: cmake
152-
153-
set(SHIELD x_nucleo_iks01a1)
154-
155396
Shield variants
156397
***************
157398

@@ -254,3 +495,7 @@ bits of the flags are copied over, so the SOC GPIO reference becomes
254495
``<&gpiob 4 1>`` as intended.
255496

256497
See `nexus node`_ for more information about this capability.
498+
499+
500+
.. _Arduino Uno R3 pinout:
501+
https://docs.arduino.cc/resources/pinouts/A000066-full-pinout.pdf

0 commit comments

Comments
 (0)