Skip to content

Commit 0494913

Browse files
Merge pull request #3477 from anupras-mohapatra-arm/embedded-and-microcontrollers
Summaries and FAQs for first 20 embedded and microcontrollers LPs
2 parents 420ab2e + 6d59d27 commit 0494913

20 files changed

Lines changed: 961 additions & 33 deletions

File tree

content/learning-paths/embedded-and-microcontrollers/advanced_soc/_index.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,56 @@ learning_objectives:
1515
prerequisites:
1616
- Some familiarity with Verilog
1717
- Basic understanding of System on Chip design
18-
- A 'Zybo Z7-10' development board
18+
- A 'Zybo Z7-10' development board
19+
20+
# START generated_summary_faq
21+
generated_summary_faq:
22+
template_version: summary-faq-v3
23+
generated_at: '2026-07-08T15:18:26Z'
24+
generator: ai
25+
ai_assisted: true
26+
ai_review_required: true
27+
model: gpt-5
28+
prompt_template: summary-faq-v3
29+
source_hash: d8c48c293b2d316d5e68e18ab9e81157ad114a64cf2efa6951374a55d25238d6
30+
summary_generated_at: '2026-07-08T15:18:26Z'
31+
summary_source_hash: d8c48c293b2d316d5e68e18ab9e81157ad114a64cf2efa6951374a55d25238d6
32+
faq_generated_at: '2026-07-08T15:18:26Z'
33+
faq_source_hash: d8c48c293b2d316d5e68e18ab9e81157ad114a64cf2efa6951374a55d25238d6
34+
summary: >-
35+
You'll design and integrate a custom AXI4-Lite peripheral
36+
with the ZYNQ Processing System on a Zybo Z7-10 board. First, you'll create a clean Vivado workspace. Then, you'll follow the **Create and Package New IP** flow to build the peripheral, and add external ports for LEDs and
37+
switches with the shown bit widths. You'll create a block design that connects the peripheral to
38+
the Cortex-A9–based processing system, followed by generating an HDL wrapper and a bitstream.
39+
Using Vitis IDE, you'll write a bare-metal C program that reads switch inputs over AXI-Lite and drives LED outputs.
40+
You'll see LEDs responding to switch states through the custom IP.
41+
faqs:
42+
- question: What should I check about the Vivado workspace path before creating the project?
43+
answer: >-
44+
Use a path with no spaces. A simple top-level directory such as `C:/Workspace` avoids path
45+
issues.
46+
- question: Which option should I select in the **Create and Package New IP** wizard?
47+
answer: >-
48+
Select **Create a new AXI4 peripheral**. This generates the template files for an AXI-compliant
49+
custom IP block.
50+
- question: How do I know the `led` and `sw` ports are configured correctly?
51+
answer: >-
52+
Confirm `led` is an output and `sw` is an input, each with the width shown in the steps (four
53+
bits). They should appear as external ports in the block design and connect to your custom
54+
peripheral.
55+
- question: What should I do before generating the bitstream?
56+
answer: >-
57+
Create the HDL wrapper for `design1.bd` using the default options and save all changes. Then
58+
proceed to generate the bitstream.
59+
- question: What result should I expect when I run the C application in Vitis?
60+
answer: >-
61+
The LEDs change based on the state of the switches. Toggling a switch updates the corresponding
62+
LED as defined by your application.
63+
# END generated_summary_faq
1964

2065
author: Pareena Verma
2166

22-
generate_summary_faq: true
67+
generate_summary_faq: false
2368
rerun_summary: false
2469
rerun_faqs: false
2570

content/learning-paths/embedded-and-microcontrollers/alif-image-classification/_index.md

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,57 @@ prerequisites:
2020
- A development machine running macOS on Apple Silicon with Visual Studio Code installed
2121
- An AWS account or access to an Arm-based cloud instance for native Arm compilation
2222

23+
# START generated_summary_faq
24+
generated_summary_faq:
25+
template_version: summary-faq-v3
26+
generated_at: '2026-07-08T15:19:18Z'
27+
generator: ai
28+
ai_assisted: true
29+
ai_review_required: true
30+
model: gpt-5
31+
prompt_template: summary-faq-v3
32+
source_hash: 8585bb59efa67b3a92314e4382339fc5c0a14bb458931c0d98f2748379003857
33+
summary_generated_at: '2026-07-08T15:19:18Z'
34+
summary_source_hash: 8585bb59efa67b3a92314e4382339fc5c0a14bb458931c0d98f2748379003857
35+
faq_generated_at: '2026-07-08T15:19:18Z'
36+
faq_source_hash: 8585bb59efa67b3a92314e4382339fc5c0a14bb458931c0d98f2748379003857
37+
summary: >-
38+
You'll deploy a MobileNetV2 image classifier on the Alif Ensemble
39+
E8 DevKit by compiling the model and runtime for the Ethos-U85 NPU, building a CMSIS project,
40+
and running inference with SEGGER RTT output. First, you'll validate the board, debug probe, and flashing
41+
workflow, then use an Arm-based cloud instance to produce ExecuTorch static libraries and
42+
an Ethos-U85–targeted model. Next, you'll create an `mv2_runner` firmware project from the Blinky
43+
template, add the provided application code that initializes the NPU and executes inference
44+
on a test image, and integrate RTT for result reporting. Finally, you'll make memory layout
45+
and linker updates so the model, runtime, and SRAM working set fit, enabling real-time classification
46+
on the device.
47+
faqs:
48+
- question: Which core should I target when flashing and debugging the firmware?
49+
answer: >-
50+
Use the Cortex-M55 High-Performance (HP) core to orchestrate inference on the Ethos-U85.
51+
The steps assume this core for building, flashing, and running the application.
52+
- question: What artifacts should I expect after compiling on the Arm cloud instance?
53+
answer: >-
54+
You'll have ExecuTorch static libraries and a compiled MobileNetV2 model targeted for
55+
the Ethos-U85. These outputs are linked into the `mv2_runner` firmware project.
56+
- question: After duplicating the Blinky example, which project files need to be updated?
57+
answer: >-
58+
Rename `blinky.cproject.yml` to `mv2_runner.cproject.yml` and replace internal references from
59+
`blinky` to `mv2_runner`. This establishes a new CMSIS project for the application.
60+
- question: Where do I place the provided `main.cpp` and how do I verify it works?
61+
answer: >-
62+
Place `main.cpp` in the `mv2_runner` project directory as instructed. When you flash and run
63+
the firmware, check the SEGGER RTT console for the printed classification result.
64+
- question: What memory changes are required for the model and runtime to fit?
65+
answer: >-
66+
Increase MRAM allocation for the embedded model (about 3.7 MB) and code (around 800 KB),
67+
and provision approximately 7.6 MB of SRAM for inference buffers. Update stack and heap sizes,
68+
and the linker script in the CMSIS project accordingly.
69+
# END generated_summary_faq
70+
2371
author: Gabriel Peterson
2472

25-
generate_summary_faq: true
73+
generate_summary_faq: false
2674
rerun_summary: false
2775
rerun_faqs: false
2876

content/learning-paths/embedded-and-microcontrollers/arduino-pico/_index.md

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,57 @@ prerequisites:
1919
- A [PIR sensor](https://www.amazon.com/HiLetgo-HC-SR501-Infrared-Sensor-Arduino/dp/B07KZW86YR/ref=sr_1_3?keywords=pir+sensor&qid=1698432931&sr=8-3) for detecting motion
2020
- A [peizo-electric buzzer](https://www.amazon.com/mxuteuk-Electronic-Computers-Printers-Components/dp/B07VK1GJ9X/ref=sr_1_4?crid=2FAXYI17HZKDB&keywords=piezo+buzzer&qid=1698432968&sprefix=peizo%2Caps%2C148&sr=8-4) for signaling motion
2121

22+
# START generated_summary_faq
23+
generated_summary_faq:
24+
template_version: summary-faq-v3
25+
generated_at: '2026-07-08T15:19:51Z'
26+
generator: ai
27+
ai_assisted: true
28+
ai_review_required: true
29+
model: gpt-5
30+
prompt_template: summary-faq-v3
31+
source_hash: 3ddb97eb97a4c7ede7951410086198ee793a9d452a79b607f211873971bd375d
32+
summary_generated_at: '2026-07-08T15:19:51Z'
33+
summary_source_hash: 3ddb97eb97a4c7ede7951410086198ee793a9d452a79b607f211873971bd375d
34+
faq_generated_at: '2026-07-08T15:19:51Z'
35+
faq_source_hash: 3ddb97eb97a4c7ede7951410086198ee793a9d452a79b607f211873971bd375d
36+
summary: >-
37+
You'll learn about embedded programming and build a motion detector with a Raspberry Pi Pico (RP2040, Cortex-M0+). First, you'll
38+
compare application and embedded software stacks, then apply those differences by wiring a
39+
passive infrared (PIR) sensor and a piezo buzzer to the Pico. Using the Arduino IDE, you'll
40+
write a simple sketch that configures GPIO, registers an interrupt handler, and reacts to
41+
external changes without polling. Finally, you'll deploy to bare metal on the Pico
42+
and validate that motion events trigger the buzzer immediately, demonstrating how hardware
43+
interrupts drive responsive behavior on a small Arm microcontroller.
44+
faqs:
45+
- question: Which board and port should I select in the Arduino IDE before uploading?
46+
answer: >-
47+
Select an RP2040-based board from the installed package and choose the USB/serial port associated
48+
with the Raspberry Pi Pico. If the upload fails, recheck both the board and port selections.
49+
- question: How should I wire the PIR sensor and buzzer to match the sketch?
50+
answer: >-
51+
Connect the PIR output to a digital input pin and the buzzer to a digital output pin with
52+
a common ground. Make sure the pin numbers in your wiring match the pin definitions used
53+
in the sketch.
54+
- question: How do I know the interrupt is working instead of polling?
55+
answer: >-
56+
When motion occurs, the buzzer responds immediately without waiting for a timed loop. If
57+
you see an instant reaction when the PIR output changes, the interrupt handler is being
58+
invoked.
59+
- question: What should I check if the buzzer never reacts to motion?
60+
answer: >-
61+
Verify power and common ground, confirm the selected GPIO pins match the sketch, and ensure
62+
the input is configured for the PIR signal and the output drives the buzzer. Also recheck
63+
that the correct RP2040 board and port are selected and that the upload completed successfully.
64+
- question: Does this project use an RTOS?
65+
answer: >-
66+
No. The example runs on bare metal using Arduino tooling on the RP2040. Any RTOS stack references
67+
are for context about typical Arm embedded architectures, not for this build.
68+
# END generated_summary_faq
69+
2270
author: Michael Hall
2371

24-
generate_summary_faq: true
72+
generate_summary_faq: false
2573
rerun_summary: false
2674
rerun_faqs: false
2775

content/learning-paths/embedded-and-microcontrollers/armds/_index.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,55 @@ learning_objectives:
1414
prerequisites:
1515
- Some familiarity with embedded programming is assumed
1616

17+
# START generated_summary_faq
18+
generated_summary_faq:
19+
template_version: summary-faq-v3
20+
generated_at: '2026-07-08T15:20:26Z'
21+
generator: ai
22+
ai_assisted: true
23+
ai_review_required: true
24+
model: gpt-5
25+
prompt_template: summary-faq-v3
26+
source_hash: 0103f51d42c230dbe75ff5b78ac15a33dfd2f2c0f4906fb665a8dd681512d2e1
27+
summary_generated_at: '2026-07-08T15:20:26Z'
28+
summary_source_hash: 0103f51d42c230dbe75ff5b78ac15a33dfd2f2c0f4906fb665a8dd681512d2e1
29+
faq_generated_at: '2026-07-08T15:20:26Z'
30+
faq_source_hash: 0103f51d42c230dbe75ff5b78ac15a33dfd2f2c0f4906fb665a8dd681512d2e1
31+
summary: >-
32+
You'll launch Arm Development Studio, import and
33+
build a supplied example, and debug it on a Cortex-M Fixed Virtual Platform (FVP) or
34+
on hardware via a DSTREAM probe. Using the ready-to-use `startup_Cortex-M3_AC6_FVP.launch` configuration,
35+
you'll inspect the debug settings and start a session that runs without target hardware
36+
on an MPS2+-based Cortex-M3 (AN385) model. You'll also see where to adjust the project
37+
to use a different Arm Compiler for Embedded version when required. By the end, you'll
38+
build and execute under the IDE with a working debug connection on either an FVP or a supported
39+
board.
40+
faqs:
41+
- question: How do I launch Arm Development Studio from the command line?
42+
answer: >-
43+
Run `armds_ide` from a terminal to open the IDE.
44+
- question: What should I do when the workspace configuration pane appears?
45+
answer: >-
46+
Click **Finish** to accept the default setup. The workspace is the base directory where the
47+
IDE stores your projects and build output.
48+
- question: Do I need target hardware to run the example?
49+
answer: >-
50+
No. Use the provided Fixed Virtual Platforms to execute and debug the example without hardware.
51+
If hardware is available, you can run it on a board using a DSTREAM debug probe.
52+
- question: Where is the FVP debug configuration for the example?
53+
answer: >-
54+
Open `startup_Cortex-M3_AC6_FVP.launch` in the project folder. Double-click the file to inspect
55+
the predefined settings before starting a debug session.
56+
- question: How do I select a different Arm Compiler for Embedded version for the project?
57+
answer: >-
58+
Install the required compiler version using the Arm Compiler for Embedded install guide.
59+
Then open **Project > Properties** and change the compiler used by the project in the build
60+
settings.
61+
# END generated_summary_faq
62+
1763
author: Ronan Synnott
1864

19-
generate_summary_faq: true
65+
generate_summary_faq: false
2066
rerun_summary: false
2167
rerun_faqs: false
2268

@@ -56,4 +102,3 @@ weight: 1 # _index.md always has weight of 1 to order corr
56102
layout: "learningpathall" # All files under learning paths have this same wrapper
57103
learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content.
58104
---
59-

content/learning-paths/embedded-and-microcontrollers/asm/_index.md

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,55 @@ title: Write Arm Assembler functions
44
minutes_to_complete: 60
55
description: Learn how to write mixed C and assembly programs for Cortex-M microcontrollers using Keil MDK, following Arm Procedure Call Standard conventions.
66

7+
# START generated_summary_faq
8+
generated_summary_faq:
9+
template_version: summary-faq-v3
10+
generated_at: '2026-07-08T15:21:04Z'
11+
generator: ai
12+
ai_assisted: true
13+
ai_review_required: true
14+
model: gpt-5
15+
prompt_template: summary-faq-v3
16+
source_hash: 24245102b7b6cefd0d4f67fbfaff1fb27c913de33665929ec3cb15293a1b3b51
17+
summary_generated_at: '2026-07-08T15:21:04Z'
18+
summary_source_hash: 24245102b7b6cefd0d4f67fbfaff1fb27c913de33665929ec3cb15293a1b3b51
19+
faq_generated_at: '2026-07-08T15:21:04Z'
20+
faq_source_hash: 24245102b7b6cefd0d4f67fbfaff1fb27c913de33665929ec3cb15293a1b3b51
21+
summary: >-
22+
You'll build a small mixed C and assembly program for
23+
Cortex-M using Keil MDK. First, you'll set up a project in either Keil Studio (VS Code) or μVision for
24+
the `ARMCM4` target, add CMSIS core and startup components where required, and configure the
25+
Cortex-M4 Fixed Virtual Platform as the debug target. Then, you'll write
26+
two assembly subroutines for string copy and capitalization, called from a C `main()` function,
27+
while following the Arm Procedure Call Standard. By stepping through the program in the debugger,
28+
you'll observe register use and memory updates and verify that the destination buffer reflects
29+
the copied and capitalized string.
30+
faqs:
31+
- question: Do I need a physical board to run the examples?
32+
answer: >-
33+
No. The steps use the Cortex-M4 Fixed Virtual Platform provided with MDK, so you can run
34+
and debug without hardware.
35+
- question: Which target device should I select when creating the project?
36+
answer: >-
37+
Select **ARMCM4** as the target device. This applies to both Keil Studio (VS Code) and μVision.
38+
- question: How do I configure debugging to use the Fixed Virtual Platform in μVision?
39+
answer: >-
40+
Open **Options for Target**, go to the **Debug** tab, and select **Models Cortex-M Debugger**. Use this
41+
configuration to run on the Cortex-M4 FVP.
42+
- question: Which components do I add when setting up the μVision project?
43+
answer: >-
44+
Add **CMSIS > Core and Device > Startup** when prompted for software components. This prepares
45+
the project for the ARMCM4 device and startup sequence.
46+
- question: What result should I expect when the C and assembly functions run correctly?
47+
answer: >-
48+
The destination buffer contains a copy of the source string, and the capitalization routine
49+
updates characters as intended. Step through the code to observe register usage and memory
50+
changes that match these operations.
51+
# END generated_summary_faq
52+
753
author: Ronan Synnott
854

9-
generate_summary_faq: true
55+
generate_summary_faq: false
1056
rerun_summary: false
1157
rerun_faqs: false
1258

@@ -46,4 +92,3 @@ layout: "learningpathall" # All files under learning paths have this same
4692
learning_path_main_page: "yes" # Indicates this should be surfaced when looking for related content. Only set for _index.md of learning path content.
4793
# ================================================================================
4894
---
49-

content/learning-paths/embedded-and-microcontrollers/avh_balena/_index.md

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,51 @@ prerequisites:
1818
- A Linux machine with root access
1919
- Some familiarity with embedded Linux
2020

21+
# START generated_summary_faq
22+
generated_summary_faq:
23+
template_version: summary-faq-v3
24+
generated_at: '2026-07-08T15:21:56Z'
25+
generator: ai
26+
ai_assisted: true
27+
ai_review_required: true
28+
model: gpt-5
29+
prompt_template: summary-faq-v3
30+
source_hash: 983afd3fcc565266c8f12588086e36d736540e23d0e748c94b5d2a45ab53d6ab
31+
summary_generated_at: '2026-07-08T15:21:56Z'
32+
summary_source_hash: 983afd3fcc565266c8f12588086e36d736540e23d0e748c94b5d2a45ab53d6ab
33+
faq_generated_at: '2026-07-08T15:21:56Z'
34+
faq_source_hash: 983afd3fcc565266c8f12588086e36d736540e23d0e748c94b5d2a45ab53d6ab
35+
summary: >-
36+
You'll prepare a BalenaOS image for Arm Virtual Hardware,
37+
provisioning a virtual Raspberry Pi 4, and deploy a pre-built application from Balena Hub.
38+
First, you'll create a Balena Cloud account and fleet to organize deployments. Then, you'll start an Arm Virtual
39+
Hardware device and upload the custom BalenaOS firmware. With the device running, you'll navigate
40+
from the Balena Cloud dashboard to Balena Hub and select a ready-made application to deploy.
41+
You'll then deploy an example app that uses the `balena-app` Grafana dashboard to visualize the device state, providing
42+
a quick way to validate that the virtual Raspberry Pi 4 is up, connected, and receiving an
43+
application from Balena Cloud.
44+
faqs:
45+
- question: What device type should I select in Arm Virtual Hardware?
46+
answer: >-
47+
Choose **Raspberry Pi 4** when creating the device in Arm Virtual Hardware.
48+
- question: Which firmware option and file do I use when creating the AVH device?
49+
answer: >-
50+
Use the **Upload your own firmware** option and select the `balenaos_rpi4b.zip` file.
51+
- question: How do I access Balena Hub from the Balena Cloud dashboard?
52+
answer: >-
53+
Click the **Balena Hub** button in the top right corner of the Balena Cloud dashboard.
54+
- question: Which example application should I deploy from Balena Hub?
55+
answer: >-
56+
Open **Apps** on Balena Hub and search for `balena-app`. This example provides a Grafana dashboard.
57+
- question: What result should I expect after deploying the Grafana example?
58+
answer: >-
59+
The Grafana dashboard displays the state of your BalenaOS device, confirming that the application
60+
deployed to the virtual Raspberry Pi 4.
61+
# END generated_summary_faq
62+
2163
author: Michael Hall
2264

23-
generate_summary_faq: true
65+
generate_summary_faq: false
2466
rerun_summary: false
2567
rerun_faqs: false
2668

0 commit comments

Comments
 (0)