Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more

Memory-mapped input/output (MMIO) lets a processor access a device by reading or writing addresses in a designated region of its memory address space. Those addresses reach device registers or device memory—not ordinary RAM.

How memory-mapped I/O works

Think of an address as selecting a destination. For ordinary memory, an address selects RAM. For MMIO, hardware recognizes an assigned address range and routes accesses to a device. The processor may use instructions that look like normal memory operations, but the device interprets those reads and writes according to its own register and hardware rules. Linux kernel documentation describes device I/O addresses as part of the CPU address space.

The operating system and platform establish the mapping. In Linux driver code, a physical device address should not simply be treated as an ordinary pointer. The documented pattern is to map the resource with ioremap(), access it using I/O-aware functions such as readl() and writel(), and unmap it when it is no longer needed.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

MMIO versus port-mapped I/O

Both methods let software communicate with devices, but they use different address spaces and access mechanisms.

#1 Best Overall
ESP-WROOM-32 ESP32 ESP-32S Development Board 2.4GHz Dual-Mode WiFi + Bluetooth Dual Cores Microcontroller Processor Integrated with Antenna RF AMP Filter AP STA Compatible with Arduino IDE (3PCS)
  • 2.4GHz Dual Mode WiFi + Bluetooth Development Board
  • Support LWIP protocol, Freertos
  • SupportThree Modes: AP, STA, and AP+STA
  • Ultra-Low power consumption, Compatible with Arduino IDE
  • ESP32 is a safe, reliable, and scalable to a variety of applications
Aspect Memory-mapped I/O Port-mapped I/O
Address space A device resource occupies a region of the CPU memory address space. Device ports occupy a separate I/O address space.
Example access Linux drivers can use accessors such as readl() and writel() after mapping. Memory-reference instructions are an example on x86. Linux drivers can use helpers such as inb() and outb(). On x86, dedicated IN and OUT instructions access ports.
Key concern Map the resource correctly and follow its access-width, ordering, and completion rules. Use the separate port-access mechanism supported by the platform.

The Linux device-I/O documentation says port space may be smaller and often slower than memory-mapped addresses, and that its Linux port-space access does not require preparation like ioremap(). That is Linux documentation’s general comparison, not a performance guarantee for every computer. The Intel 80386 programmer reference illustrates the x86 distinction between memory-reference instructions and the dedicated port instructions; it is a historical example, not a description of every current processor.

Why MMIO is not ordinary RAM

A device register can trigger an action, return changing status, or have other side effects. Consequently, ordinary memory assumptions do not necessarily apply. Linux warns that generic memcpy() and memset() are not guaranteed to perform I/O-address operations in order; for applicable I/O memory operations, it provides functions such as memcpy_toio(), memcpy_fromio(), and memset_io().

Rank #2
ESP-WROOM-32 ESP32 ESP-32S Development Board 2.4GHz Dual-Mode WiFi + Bluetooth Dual Cores Microcontroller Processor Integrated with Antenna RF AMP Filter AP STA Compatible with Arduino IDE (1 PCS)
  • 2.4GHz Dual Mode WiFi + Bluetooth Development Board
  • Support LWIP protocol, Freertos;ESP32 is a safe, reliable, and scalable to a variety of applications
  • SupportThree Modes: AP, STA, and AP+STA
  • Ultra-Low power consumption, Compatible with Arduino IDE
  • 1PCS 30Pin ESP32 Development Board 2.4GHz WiFi Dual Cores Microcontroller Integrated with Antenna RF Low Noise Amplifiers Filters
  • Ordering: Use the platform’s documented I/O accessors and ordering rules rather than assuming the compiler or hardware will treat a device access exactly like a RAM access.
  • Completion: A write can be posted and complete asynchronously. Linux documentation notes that PCI writes may be posted; when a driver must know that a write has reached the device, a read from that same device may be needed.
  • Alignment and width: Requirements vary by platform and device. Misaligned accesses can cause exceptions or unpredictable results, so follow the resource and accessor requirements.
  • Caching: Do not assume every device mapping has the same caching behavior as RAM. Use the mapping and access rules for the specific platform and device.

These are Linux driver guidance points, not a universal API prescription for every operating system. Consult the relevant platform and device documentation before writing hardware-facing code. See the Linux guide to bus-independent device accesses for its mapping and accessor details.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

MMIO is different from memory-mapped files

Memory-mapped device I/O concerns addresses used to communicate with hardware. Memory-mapped file I/O instead associates file contents with part of a process’s virtual address space so software can work with the file through that view. The shared word “mapped” does not make the mechanisms equivalent.

Quick Recap

Bestseller No. 1
ESP-WROOM-32 ESP32 ESP-32S Development Board 2.4GHz Dual-Mode WiFi + Bluetooth Dual Cores Microcontroller Processor Integrated with Antenna RF AMP Filter AP STA Compatible with Arduino IDE (3PCS)
ESP-WROOM-32 ESP32 ESP-32S Development Board 2.4GHz Dual-Mode WiFi + Bluetooth Dual Cores Microcontroller Processor Integrated with Antenna RF AMP Filter AP STA Compatible with Arduino IDE (3PCS)
2.4GHz Dual Mode WiFi + Bluetooth Development Board; Support LWIP protocol, Freertos; SupportThree Modes: AP, STA, and AP+STA
$16.99
Bestseller No. 4
STM32 Nucleo Development Board with STM32F446RE MCU NUCLEO-F446RE
STM32 Nucleo Development Board with STM32F446RE MCU NUCLEO-F446RE
On-board ST-LINK/V2-1 debugger/programmer with SWD connector; Can be powered from USB; Three LEDs, Two Push-buttons
$33.11
Best Value
With Pre-Soldered Header Raspberry Pi Pico Microcontroller Development Board Based on Raspberry Pi RP2040 Chip,Dual-Core ARM Cortex M0+ Processor
  • with pre-soldered header Raspberry Pi Pico. RP2040 microcontroller chip designed by Raspberry Pi in the United Kingdom
  • Dual-core Arm Cortex M0+ processor, flexible clock running up to 133 MHz. 264KB of SRAM, and 2MB of on-board Flash memory.
  • Castellated module allows soldering direct to carrier boards. USB 1.1 with device and host support. Low-power sleep and dormant modes. Drag-and-drop programming using mass storage over USB. 26 × multi-function GPIO pins.
  • 2 × SPI, 2 × I2C, 2 × UART, 3 × 12-bit ADC, 16 × controllable PWM channels.Accurate clock and timer on-chip.Temperature sensor.
  • Accelerated floating-point libraries on-chip.8 × Programmable I/O (PIO) state machines for custom peripheral support
Rank #4
STM32 Nucleo Development Board with STM32F446RE MCU NUCLEO-F446RE
  • High-performance foundation line, ARM Cortex-M4 core with DSP and FPU, 512 Kbytes Flash, 180 MHz CPU, ART Accelerator, Dual QSPI
  • On-board ST-LINK/V2-1 debugger/programmer with SWD connector
  • Can be powered from USB
  • Three LEDs, Two Push-buttons
  • Support of wide choice of Integrated Development Environments (IDEs) including IAR, ARM Keil, GCC-based IDEs
Rank #3
ELEGOO ESP-32 Super Starter Kit with Tutorial Compatible with Arduino IDE
  • Powerful ESP-32 Board: Unlock the world of Internet of Things (IoT) and advanced electronics with the heart of this kit: the ESP-32 board. It features a powerful dual-core processor, integrated Wi-Fi and Bluetooth 4.2, making it perfect for building connected, smart devices that communicate with your phone or the cloud. It's fully compatible with the Arduino IDE for easy programming.
  • Super Starter Kit: This kit contains over 35 different modules and electronic components, including sensors, displays, motors, and input devices. From LEDs and buttons to an OLED screen, servo motor, and keypad, you have everything needed to explore a vast range of projects in one box.
  • Step by Step Online Tutorial: Jump right in with our detailed, beginner-friendly tutorial. Access 30+ projects with complete code, clear circuit diagrams, and step-by-step instructions. Learn the fundamentals of electronics, coding, and how to utilize the ESP-32's unique capabilities without any prior experience.
  • Hands-on Learning for All Skill Levels: Perfect for students, makers, engineers, and hobbyists. Start with basic circuits and coding, then progress to intermediate and advanced IoT applications. Build practical projects like weather stations, smart home controllers, remote-controlled devices, and interactive gadgets. The skills you learn are the foundation for real-world innovation.
  • Quality & Great Support: Elegoo is committed to quality. We provide a clear, detailed tutorial guide, refined code, and a well-organized component kit. All modules are carefully selected for reliability and ease of use. Our dedicated technical support team and active online community are ready to help you succeed in your learning journey.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.