2024-02-15 21:47:46 +08:00
|
|
|
.. zephyr:code-sample:: esp32-flash-memory-mapped
|
|
|
|
:name: ESP32 Flash Memory-Mapped
|
|
|
|
:relevant-api: flash_interface
|
2023-10-19 20:06:53 +08:00
|
|
|
|
2024-02-15 21:47:46 +08:00
|
|
|
Write data into scratch area and read it using flash API and memory-mapped pointer.
|
2023-10-19 20:06:53 +08:00
|
|
|
|
|
|
|
Overview
|
|
|
|
********
|
|
|
|
|
|
|
|
ESP32 features memory hardware which allows regions of flash memory to be mapped into instruction
|
|
|
|
and data address spaces. This mapping works only for read operations. It is not possible to modify
|
|
|
|
contents of flash memory by writing to a mapped memory region.
|
|
|
|
|
|
|
|
Mapping happens in 64 KB pages. Memory mapping hardware can map flash into the data address space
|
|
|
|
and the instruction address space. See the technical reference manual for more details and
|
|
|
|
limitations about memory mapping hardware. For more information, check `_ESP32 Flash Memory-Mapping`.
|
|
|
|
|
|
|
|
Supported SoCs
|
|
|
|
**************
|
|
|
|
|
|
|
|
All ESP32 SoCs support flash memory-mapped feature.
|
|
|
|
|
|
|
|
Building and Running
|
|
|
|
********************
|
|
|
|
|
|
|
|
Make sure you have your board connected over USB port.
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
west build -b esp32s3_devkitm samples/boards/esp32/flash_memory_mapped
|
|
|
|
west flash
|
|
|
|
|
|
|
|
Sample Output
|
|
|
|
=============
|
|
|
|
|
|
|
|
To check the output of this sample, run ``west espressif monitor`` or any other serial
|
|
|
|
console program (e.g., minicom, putty, screen, etc).
|
|
|
|
This example uses ``west espressif monitor``, which automatically detects the serial
|
|
|
|
port at ``/dev/ttyUSB0``:
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
$ west espressif monitor
|
|
|
|
|
|
|
|
The sample code erases the scratch area defined in DTS file and writes a 32-bytes data buffer in it.
|
|
|
|
Next, it prints that region content using flash API read and also using memory-mapped pointer.
|
|
|
|
Both readings should return the same value. Important to notice that writing using memory-mapped pointer
|
|
|
|
is not allowed.
|
|
|
|
|
|
|
|
|
|
|
|
.. code-block:: console
|
|
|
|
|
|
|
|
*** Booting Zephyr OS build v3.5.0-rc3-10-g3118724fa268 ***
|
|
|
|
[00:00:00.255,000] <inf> flash_memory_mapped: memory-mapped pointer address: 0x3c040000
|
|
|
|
[00:00:01.122,000] <inf> flash_memory_mapped: flash read using memory-mapped pointer
|
|
|
|
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |........ ........
|
|
|
|
ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |........ ........
|
|
|
|
[00:00:01.122,000] <inf> flash_memory_mapped: writing 32-bytes data using flash API
|
|
|
|
[00:00:01.122,000] <inf> flash_memory_mapped: flash read using flash API
|
|
|
|
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |........ ........
|
|
|
|
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |........ ........
|
|
|
|
[00:00:01.122,000] <inf> flash_memory_mapped: flash read using memory-mapped pointer
|
|
|
|
00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |........ ........
|
|
|
|
10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f |........ ........
|
|
|
|
|
|
|
|
.. _ESP32 Flash Memory-Mapping:
|
|
|
|
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/spi_flash/index.html#memory-mapping-api
|