16 IoT SoC Architecture: Blocks and Data Paths
16.1 Overview
This first route reads a SoC as owned blocks and traces data and power across their boundaries.
This is part 1 of 2. Continue with IoT SoC Architecture: Accelerators and Security for the second focused route.
16.2 Start With the Work Inside the Chip
Firmware is the software stored on a device. Picture a small chip in a vibration monitor. It reads a sensor, moves samples, checks a limit, protects a key, sends a message, and spends most of its life asleep.
Assign each job to a block first. Name the processor, memory, radio, timer, security block, data mover, and power control that owns it. Then trace one sample from the pin to the final message.
Check the crossings. A fast special block may wait on memory. A built-in radio saves board space but can make layout and power harder. Turning off one area saves energy, yet needed state or wake signals may be lost.
This monitor story cannot choose a chip from a block diagram. It does not prove pin fit, memory space, safe updates, heat, radio range, or sleep current. Those need board and device tests.
Use the Practitioner sections to build the block and data-path record. Use Under the Hood for buses, memory maps, power areas, and special blocks. The deeper work tests ownership while keeping the same trace.
Walk one sample through the chip. Start at the pin. Name the input block. Name the clock. Name the data width. Name the memory area. Name the data mover. Name the work core. Name the safety check. Name the key store. Name the radio path. Name the sleep owner.
Now follow power. Wake the input. Wake the needed clock. Keep other clocks off. Move one block of data. Run the check. Save the result. Send the message. Wait for the send result. Store any needed state. Turn blocks off in order. Measure the full cycle.
Check memory. Fill the sample space. Fill the message queue. Start an update. Keep a safe old image. Lose power. Start again. Check the right image boots. Check saved data. Check the key area. Check that one block cannot read what it should not.
Check a special block. Run the work on the main core. Measure time. Measure energy. Run it on the special block. Measure again. Add data moves. Add wake cost. Add idle loss. Add tool work. Add test work. Keep the simpler path if the gain is small.
Check the radio block. Use the real board. Use the real case. Use the final antenna place. Start other clocks. Start memory traffic. Send at low power. Send at high power. Receive a weak message. Watch supply noise. Watch heat. A built-in radio still needs a sound board.
Check pins and buses. List every sensor. List every control. List every wake line. List every fast link. List each pull resistor. List each voltage. List each shared pin. Try the boot state. Try the sleep state. Try the update state. A feature list cannot repair a pin clash.
Check failure. Stop one clock. Block one bus. Corrupt one message. Fill one queue. Lose one power area. Hold reset. Release reset. Watch the safe state. Keep the watchdog path. Keep the repair path. Log enough to find the cause.
Close the chip record. Keep the block map. Keep the power map. Keep the memory map. Keep the data trace. Keep the key boundary. Keep the update plan. Keep the measured cycle. Keep the open risk. Review it when code, board, radio, or load changes.
A system-on-chip is easier to reason about when you assign the work inside it. Sensing, radio, security, signal processing, memory movement, power management, and application code may share one package but still need clear ownership.
Start with those internal boundaries. The SoC architecture matters because it decides which block wakes up, which block protects keys, which block moves data, and which evidence proves the chip can support the larger IoT architecture.
16.3 Overview
IoT designs often use an SoC because integration reduces board complexity and lets firmware coordinate sensing, compute, radio, security, and power behavior inside one hardware boundary. That integration also hides important design choices. A device may fail because a sensor path cannot use DMA, a radio shares pins with a service port, a security key leaves protected storage, or a peripheral remains awake in a state that was supposed to save energy.
This chapter treats SoC architecture as a boundary-proof problem. It avoids product lists and short-lived device assertions. The goal is to help you read an SoC block diagram, map the data paths, identify the boundaries, and write a selection record that can survive firmware, board, and deployment changes.
16.4 Learning Objectives
By the end of this chapter, you should be able to:
- read an IoT SoC block diagram as a set of owned hardware responsibilities;
- trace sensor, actuator, radio, service, and update data paths through buses, DMA, memory, and accelerators;
- connect power islands and clock domains to the device states from the power-management decision;
- decide when hardware accelerators prove workload fit rather than decorate a block diagram;
- identify security roots, protected storage, debug boundaries, and update paths inside the SoC;
- document SoC fit, rejected options, validation tests, and reopen triggers.
16.5 SoC Selection Route
Start with the device role and work inward. Do not approve an SoC because it has many blocks; approve it because the right blocks own the right paths with testable proof.
Walk the route as a narrowing proof. Define the external role and failure behavior first, assign each responsibility to a block, and trace real data paths before claiming help from DMA or accelerators. Only then check memory, security, clocks, and power islands, because those shared resources can invalidate an otherwise attractive block map. The final validation record preserves both the selected ownership and the change that would reopen it.
Use this route:
- Define the device role, signal boundaries, and failure behavior.
- Mark the SoC blocks that must own sensing, control, radio, service, update, and recovery.
- Trace data paths from input to decision to output or report.
- Identify which paths can use DMA, accelerators, or autonomous peripherals.
- Check memory, protected storage, debug access, and update recovery.
- Link clocks and power islands to boot, active, sleep, fault, service, and update states.
- Record validation tests and the proof that would reopen the selection.
The first review question is not simply whether the chip lists a block. Ask whether that block can sit on the real path without breaking another obligation. An accelerometer path may need a timer, SPI peripheral, DMA engine, accessible buffer, filter, timestamp, interrupt, and fault flag. Radio and security paths add packet buffers, cryptography, wake sources, protected storage, debug control, boot verification, rollback, and service rules. Draw one path per responsibility and mark every shared memory, pin, clock, and power domain; those shared blocks become the first lab tests.
The route in Figure 16.1 connects the device role to block ownership, data paths, memory and security boundaries, power islands, radio integration, and the validation record. Follow Role through memory security to tests reopen rather than treating any block as an isolated feature.
In Figure 16.1, Role fixes the external obligation before Blocks assigns internal owners. The middle path then forces data paths, memory security, power islands, and radio boundary into the same review; tests reopen prevents the final record from becoming permanent after those assumptions change.
Mobile summary: Approve an SoC only when the device role, internal block owners, data paths, memory and security boundaries, power and radio behavior, and validation record line up.
Sensor path
Show how the sensor reaches a timer, bus, DMA buffer, filter, timestamp, and error flag without unnecessary core polling.
Radio path
Show packet buffer, encryption point, baseband, antenna boundary, retry policy, wake behavior, and recovery after join failure.
Security path
Show secure boot, identity storage, debug lock, protected operations, rollback, and service unlock proof.
16.6 Block Ownership
An SoC block diagram is useful only when each block has a clear responsibility. Treat ambiguous ownership as a design risk.
16.6.1 Application Core
Runs firmware that coordinates the product behavior. It should not poll every sensor or move every byte when a peripheral can handle that work directly.
16.6.2 Always-Ready Controller
Handles low-rate sensing, wake decisions, timers, watchdogs, or safe outputs while the main core sleeps.
16.6.3 Memory System
Includes flash, RAM, cache, retention memory, update slots, logs, and buffers. Its capacity matters only when mapped to simultaneous workload needs.
16.6.4 Peripheral Fabric
Connects GPIO, ADC, timers, PWM, I2C, SPI, UART, I2S, USB, storage, and service ports through multiplexed pins and bus bridges.
16.6.5 Radio and Baseband
Owns modulation, packet timing, filtering, antenna interface, coexistence signals, and wake or receive behavior.
16.6.6 Security Root
Stores identity, verifies boot, protects keys, controls debug access, and supports update rollback or recovery.
For security root, inspect Figure 16.2 at Peripheral Fabric. Its visible premise is: SoC block ownership map showing application core, always-ready controller, memory, peripheral fabric, radio and baseband, security root, and power manager with clear responsibilities. Then compare Memory System.
Three concrete diagram labels organize Figure 16.2: Peripheral Fabric, Memory System, and islands clocks states. Between them, the security root relationship becomes visible: SoC block ownership map showing application core, always-ready controller, memory, peripheral fabric, radio and baseband, security root, and power manager with clear responsibilities.
16.7 Data Path Trace
The most important question is not “what blocks exist?” but “what path does each byte take?” A clean path keeps the main core asleep or focused while hardware moves samples, checks thresholds, encrypts messages, or schedules radio work.
Trace these paths:
- Sensor path: sensor interface, timing source, DMA option, buffer, filter, threshold, timestamp, and error flag.
- Control path: input condition, safety decision, output driver command, feedback, and fault fallback.
- Radio path: packet buffer, encryption, baseband, coexistence signal, antenna boundary, and retry policy.
- Service path: debug or diagnostic interface, access control, timeout, and safe output rule.
- Update path: image storage, verification, rollback, recovery, and failure logging.
At data path trace, Sensor makes the architecture testable. In Figure 16.3, Accelerator frames this claim: SoC data path trace showing sensor input through peripheral fabric, DMA, memory, accelerator, security block, radio buffer, and output decision while the main core only handles bounded coordination. Read it against Sensor.
Figure 16.3 becomes useful when Sensor is read alongside Accelerator. secure report adds the remaining acceptance cue. This supports data path trace. The visual summarizes: SoC data path trace showing sensor input through peripheral fabric, DMA, memory, accelerator, security block, radio buffer, and output decision while the main core only handles bounded coordination.
16.8 Power Islands and Clock Domains
An SoC can include several power islands and clock domains. The architecture decision record must show which island remains available in each device state.
| Island or Domain | Typical Responsibility | Boundary Proof |
|---|---|---|
| Always-ready domain | wake pins, slow timer, watchdog, small retained state | wake source works in the selected sleep state |
| Main compute domain | application firmware and burst processing | shuts off or idles when not needed |
| Peripheral domain | ADC, timers, buses, DMA, PWM, capture units | only required interfaces remain enabled |
| Radio domain | packet timing, baseband, transmit, receive, coexistence | radio state matches the reporting and wake plan |
| Security domain | secure boot, key storage, protected operations | keys remain protected during boot, update, and debug |
| Memory retention domain | retained RAM, logs, counters, calibration | retained data is defined and bounded |
Inspect Figure 16.4 before judging power islands and clock domains; it depicts: SoC power island map showing always-ready, main compute, peripheral, radio, security, and memory-retention domains connected to boot, active, sleep, fault, service, and update states. Focus first on Always-Ready, then on boot keys debug.
The diagram Figure 16.4 first names Always-Ready, then separates boot keys debug from Update. Carry checkpoints boot keys debug and Update into power islands and clock domains with Always-Ready. Their combined proposition is: SoC power island map showing always-ready, main compute, peripheral, radio, security, and memory-retention domains connected to boot, active, sleep, fault, service, and update states.
16.9 Cortex-M Address Map and the Vendor Boundary
A 32-bit Cortex-M core can name byte addresses, from 0x00000000 through 0xFFFFFFFF. The architecture divides that space into broad default regions. On ARMv6-M the high-level map below gives software and bus designers a shared vocabulary; it does not promise that every address contains implemented memory.
| Inclusive range | Size | Default role |
|---|---|---|
0x00000000–0x1FFFFFFF | 512 MiB | Code region; boot aliases, flash, or executable memory are commonly mapped here |
0x20000000–0x3FFFFFFF | 512 MiB | SRAM region |
0x40000000–0x5FFFFFFF | 512 MiB | On-chip peripheral region; device registers normally live here |
0x60000000–0x7FFFFFFF | 512 MiB | External RAM region, with default normal-memory attributes |
0x80000000–0x9FFFFFFF | 512 MiB | Additional external RAM region |
0xA0000000–0xBFFFFFFF | 512 MiB | External device region, commonly used for shared device mappings |
0xC0000000–0xDFFFFFFF | 512 MiB | Additional external device region |
0xE0000000–0xFFFFFFFF | 512 MiB | System region, including core system-control and debug space |
The arithmetic is worth doing once. The top three address bits select one of eight equal regions because
For address 0x40021018, the 0x4... prefix places it in the peripheral region. That tells you the access should behave like device I/O, but it does not tell you which peripheral, whether the address is implemented, or which bit starts an operation. Those facts come from the vendor memory map and reference manual.
The portable boundary is therefore precise: toolchains can share instruction generation, exception entry, vector-table concepts, and core-control definitions. Vendors can map different clock controllers, GPIO ports, DMA engines, and ADCs into the peripheral region, with different offsets and bit meanings even across one vendor’s families. A linker script, startup file, and board-support package must pin the actual flash/RAM layout. A portable driver interface can hide those details from application code, but the implementation and its register tests remain chip-specific.
The architectural map identifies the broad region an address belongs to; the vendor reference manual still defines the individual peripheral registers inside it. Figure 16.5 places CODE, SRAM, and PERIPHERALS in distinct 512 MiB bands. Its ADDRESS CHECK maps 0x4001_2000 to the peripheral region while keeping the architecture’s region assignment separate from vendor-specific register layout.
Read Figure 16.5 from CODE and SRAM into PERIPHERALS, then use the ADDRESS CHECK only to identify the architectural region. The final vendor-manual cue is the boundary: it supplies the implemented register and bit meaning that the broad address band cannot prove.
16.10 Continue to Part 2
Continue with IoT SoC Architecture: Accelerators and Security.
