@@ -8,6 +8,293 @@ to extend its features and services for easier and modularized prototyping.
88In Zephyr, the shield feature provides Zephyr-formatted shield
99descriptions 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 interfaces
32+ ***************** 
33+ 
34+ A shield is defined by two key characteristics:
35+ 
36+ #. **Physical connectors ** - the mechanical interface
37+ #. **Electrical signals ** - what each pin actually does
38+ 
39+ The connection between a shield and a board happens through Devicetree files:
40+ 
41+ - Board side: The board's devicetree file uses a :ref: `GPIO nexus node  <gpio-nexus-node >` to map
42+   connector pins to the microcontroller's actual GPIO pins. It also defines labels for buses exposed
43+   through the connector (like ``arduino_i2c ``, ``arduino_spi ``, ``arduino_uart ``).
44+ 
45+ - Shield side: The shield's .overlay file references these same labels to describe how its
46+   components connect to the board.
47+ 
48+ At build time, the board's devicetree and the shield's overlay are combined to create a complete
49+ picture of the hardware setup.
50+ 
51+ For example, let's say you have a board with an Arduino connector but no built-in accelerometer.
52+ You can add one using an Arduino shield:
53+ 
54+ #. The board's Devicetree defines an ``arduino_i2c `` label: it is the I2C bus made available on the
55+    Arduino connector
56+ 
57+ #. The accelerometer shield's overlay file also references ``arduino_i2c `` to indicate it uses that
58+    same I2C bus. If it needs to use GPIO pins from the connector, it references the GPIO nexus node
59+    defined by the board's Devicetree (e.g. ``arduino_header ``).
60+ 
61+ When you then build for this board with this shield, Zephyr automatically "wires them" together.
62+ 
63+ .. note ::
64+ 
65+    Some boards and shields may only support a limited set of features of a shield hardware
66+    interface. Refer to their documentation for more details.
67+ 
68+ 
69+ Arduino MKR
70+ ----------- 
71+ 
72+ This is the form factor of the Arduino MKR boards.
73+ 
74+ .. figure :: ../../../boards/arduino/mkrzero/doc/img/arduino_mkrzero.jpg 
75+    :align:  center 
76+    :width:  200px  
77+    :alt:  Arduino MKR Zero 
78+ 
79+    Arduino MKR Zero, an example of a board with the Arduino MKR shield interface
80+ 
81+ Relevant devicetree node labels:
82+ 
83+ - ``arduino_mkr_header `` See :dtcompatible: `arduino-mkr-header ` for details on GPIO pin definitions
84+   and includes for use in devicetree files.
85+ - ``arduino_mkr_i2c ``
86+ - ``arduino_mkr_spi ``
87+ - ``arduino_mkr_serial ``
88+ 
89+ 
90+ Arduino Nano
91+ ------------ 
92+ 
93+ This is the form factor of the Arduino Nano boards.
94+ 
95+ .. figure :: ../../../boards/arduino/nano_33_iot/doc/img/nano_33_iot.jpg 
96+    :align:  center 
97+    :width:  300px  
98+    :alt:  Arduino Nano 33 IOT 
99+ 
100+    Arduino Nano 33 IOT, an example of a board with the Arduino Nano shield interface
101+ 
102+ Relevant devicetree node labels:
103+ 
104+ - ``arduino_nano_header `` See :dtcompatible: `arduino-nano-header ` for details on GPIO pin definitions
105+   and includes for use in devicetree files.
106+ - ``arduino_nano_i2c ``
107+ - ``arduino_nano_spi ``
108+ - ``arduino_nano_serial ``
109+ 
110+ 
111+ Arduino Uno R3
112+ -------------- 
113+ 
114+ This is the form factor of the Arduino Uno R3 board.
115+ 
116+ .. figure :: ../../../boards/shields/mcp2515/doc/keyestudio_can_bus_ks0411.jpg 
117+    :align:  center 
118+    :width:  300px  
119+    :alt:  Keyestudio CAN-BUS Shield (KS0411) 
120+ 
121+    Keyestudio CAN-BUS, an example of an Arduino shield (Credit: Keyestudio)
122+ 
123+ Relevant devicetree node labels:
124+ 
125+ - ``arduino_header `` See :dtcompatible: `arduino-header-r3 ` for details on GPIO pin definitions
126+   and includes for use in devicetree files.
127+ - ``arduino_adc `` See :dtcompatible: `arduino,uno-adc `
128+ - ``arduino_pwm `` See :dtcompatible: `arduino-header-pwm `
129+ - ``arduino_serial ``
130+ - ``arduino_i2c ``
131+ - ``arduino_spi ``
132+ 
133+ For technical details, see `Arduino Uno R3 pinout `_.
134+ 
135+ 
136+ Camera and display connectors
137+ ----------------------------- 
138+ 
139+ These describe connections to cameras and displays (strictly speaking not shields).
140+ 
141+ - :dtcompatible: `arducam,dvp-20pin-connector `
142+ - :dtcompatible: `nxp,cam-44pins-connector `
143+ - :dtcompatible: `nxp,parallel-lcd-connector `
144+ - :dtcompatible: `raspberrypi,csi-connector `
145+ - :dtcompatible: `weact,dcmi-camera-connector `
146+ 
147+ 
148+ Feather
149+ ------- 
150+ 
151+ This is the form factor of the Adafruit Feather series of boards.
152+ Shields intended for Feather boards are called Featherwings.
153+ 
154+ .. figure :: ../../../boards/shields/adafruit_adalogger_featherwing/doc/adafruit_adalogger_featherwing.webp 
155+    :align:  center 
156+    :width:  300px  
157+    :alt:  Adafruit Adalogger Featherwing Shield 
158+ 
159+    Adafruit Adalogger, an example of a Featherwing (Credit: Adafruit)
160+ 
161+ Relevant devicetree node labels:
162+ 
163+ - ``feather_header `` See :dtcompatible: `adafruit-feather-header ` for GPIO pin definitions.
164+ - ``feather_adc ``
165+ - ``feather_i2c ``
166+ - ``feather_serial ``
167+ - ``feather_spi ``
168+ 
169+ 
170+ Microbit
171+ -------- 
172+ 
173+ This is for the edge connector of the Microbit boards.
174+ 
175+ .. figure ::  ../../../boards/bbc/microbit_v2/doc/img/bbc_microbit2.jpg 
176+    :align:  center 
177+    :width:  500px  
178+    :alt:  Microbit V2 board 
179+ 
180+    Microbit V2 board uses the Microbit shield interface
181+ 
182+ See :dtcompatible: `microbit,edge-connector ` for GPIO pin definitions and
183+ links to technical requirements.
184+ 
185+ 
186+ mikroBUS |trade |
187+ ---------------- 
188+ 
189+ This is an interface standard for add-on boards, developed by Mikroe.
190+ 
191+ .. figure :: ../../../boards/shields/mikroe_3d_hall_3_click/doc/images/mikroe_3d_hall_3_click.webp 
192+    :align:  center 
193+    :alt:  3D Hall 3 Click 
194+    :height:  300px  
195+ 
196+    3D Hall 3 Click, an example of a mikroBUS |trade | shield
197+ 
198+ Relevant devicetree node labels:
199+ 
200+ - ``mikrobus_header `` See :dtcompatible: `mikro-bus ` for GPIO pin definitions and links to
201+   technical specifications.
202+ - ``mikrobus_adc ``
203+ - ``mikrobus_i2c ``
204+ - ``mikrobus_spi ``
205+ - ``mikrobus_serial ``
206+ 
207+ Note that boards with several mikroBUS |trade | connectors might define for
208+ example ``mikrobus_2_spi ``.
209+ 
210+ 
211+ Pico
212+ ---- 
213+ 
214+ This is the form factor of the Raspberry Pi Pico boards.
215+ 
216+ .. figure ::  ../../../boards/shields/waveshare_ups/doc/waveshare_pico_ups_b.jpg 
217+    :align:  center 
218+    :width:  300px  
219+    :alt:  Waveshare Pico UPS-B shield 
220+ 
221+    Waveshare Pico UPS-B, an example of a Pico shield
222+ 
223+ Relevant devicetree node labels:
224+ 
225+ - ``pico_header `` See :dtcompatible: `raspberrypi,pico-header ` for GPIO pin definitions.
226+ - ``pico_i2c0 ``
227+ - ``pico_i2c1 ``
228+ - ``pico_serial ``
229+ - ``pico_spi ``
230+ 
231+ 
232+ ST Morpho
233+ --------- 
234+ 
235+ Development boards from ST Microelectronics often uses the ST Morpho shield interface.
236+ 
237+ .. figure :: ../../../boards/shields/x_nucleo_gfx01m2/doc/x_nucleo_gfx01m2.webp 
238+    :align:  center 
239+    :width:  300px  
240+    :alt:  X-NUCLEO-GFX01M2 
241+ 
242+    X-NUCLEO-GFX01M2, an example of an ST Morpho shield
243+ 
244+ Relevant devicetree node labels:
245+ 
246+ - ``st_morpho_header ``  See :dtcompatible: `st-morpho-header ` for details on GPIO pin definitions
247+   and includes for use in devicetree files.
248+ - ``st_morpho_lcd_spi ``
249+ - ``st_morpho_flash_spi ``
250+ 
251+ 
252+ Xiao
253+ ---- 
254+ 
255+ This is the form factor of the Seeeduino XIAO boards.
256+ 
257+ .. figure :: ../../../boards/shields/seeed_xiao_expansion_board/doc/img/seeed_xiao_expansion_board.webp 
258+      :align:  center 
259+      :width:  300px  
260+      :alt:  Seeed Studio XIAO Expansion Board 
261+ 
262+      Seeed Studio XIAO Expansion Board, an example of a Xiao shield (Credit: Seeed Studio)
263+ 
264+ Relevant devicetree node labels:
265+ 
266+ - ``xiao_d `` See :dtcompatible: `seeed,xiao-gpio ` for GPIO pin definitions.
267+ - ``xiao_spi ``
268+ - ``xiao_i2c ``
269+ - ``xiao_serial ``
270+ - ``xiao_adc ``
271+ - ``xiao_dac ``
272+ 
273+ 
274+ zephyr_i2c / Stemma QT / Quiic
275+ ------------------------------ 
276+ 
277+ These are four-pin I2C connectors. SparkFun calls these connectors "Qwiic", and Adafruit
278+ calls them "Stemma QT". The I2C connectors have four pins; GND, +3.3 Volt, I2C data and I2C
279+ clock. The most common physical connector is the 1.0 mm pitch JST-SH.
280+ 
281+ Due to the different brand names, the interface is labeled "zephyr_i2c".
282+ 
283+ .. figure ::  ../../../boards/shields/adafruit_vcnl4040/doc/adafruit_vcnl4040.webp 
284+    :align:  center 
285+    :width:  200px  
286+    :alt:  Adafruit VCNL4040 Shield 
287+ 
288+    Adafruit VCNL4040, an example of a zephyr_i2c shield (Credit: Adafruit)
289+ 
290+ See :dtcompatible: `stemma-qt-connector ` and :dtcompatible: `grove-header ` for descriptions
291+ and links to further details.
292+ 
293+ Relevant devicetree node labels:
294+ 
295+ - ``zephyr_i2c ``
296+ 
297+ 
11298.. _shield_porting_guide :
12299
13300Shield porting and configuration
@@ -134,24 +421,6 @@ board or board revision overriding files to a shield, as follows:
134421       └── <board>.conf 
135422
136423
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- 
155424 Shield variants
156425*************** 
157426
@@ -188,6 +457,8 @@ revision:
188457           ├── <board>.overlay 
189458           └── <board>.defconfig 
190459
460+  .. _gpio-nexus-node :
461+ 
191462GPIO nexus nodes
192463**************** 
193464
@@ -254,3 +525,7 @@ bits of the flags are copied over, so the SOC GPIO reference becomes
254525``<&gpiob 4 1> `` as intended.
255526
256527See `nexus node `_ for more information about this capability.
528+ 
529+ 
530+ .. _Arduino Uno R3 pinout :
531+   https://docs.arduino.cc/resources/pinouts/A000066-full-pinout.pdf 
0 commit comments