c737cde947
Anywhere a module is mentioned, use its "non-u" name for consistency. The "import module" vs "import umodule" is something of a FAQ, and this commit intends to help clear that up. As a first approximation MicroPython is Python, and so imports should work the same as Python and use the same name, to a first approximation. The u-version of a module is a detail that can be learned later on, when the user wants to understand more and have finer control over importing. Existing Python code should just work, as much as it is possible to do that within the constraints of embedded systems, and the MicroPython documentation should match the idiomatic way to write Python code. With universal weak links for modules (via MICROPY_MODULE_WEAK_LINKS) users can consistently use "import foo" across all ports (with the exception of the minimal ports). And the ability to override/extend via "foo.py" continues to work well. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
57 lines
2.8 KiB
ReStructuredText
57 lines
2.8 KiB
ReStructuredText
.. _storage_zephyr:
|
|
|
|
Filesystems and Storage
|
|
=======================
|
|
|
|
Storage modules support virtual filesystem with FAT and littlefs formats, backed by either
|
|
Zephyr DiskAccess or FlashArea (flash map) APIs depending on which the board supports.
|
|
|
|
See `os Filesystem Mounting <https://docs.micropython.org/en/latest/library/os.html?highlight=os#filesystem-mounting>`_.
|
|
|
|
Disk Access
|
|
-----------
|
|
|
|
The :ref:`zephyr.DiskAccess <zephyr.DiskAccess>` class can be used to access storage devices, such as SD cards.
|
|
This class uses `Zephyr Disk Access API <https://docs.zephyrproject.org/latest/reference/storage/disk/access.html>`_ and
|
|
implements the `os.AbstractBlockDev` protocol.
|
|
|
|
For use with SD card controllers, SD cards must be present at boot & not removed; they will
|
|
be auto detected and initialized by filesystem at boot. Use the disk driver interface and a
|
|
file system to access SD cards via disk access (see below).
|
|
|
|
Example usage of FatFS with an SD card on the mimxrt1050_evk board::
|
|
|
|
import os
|
|
from zephyr import DiskAccess
|
|
bdev = zephyr.DiskAccess('SDHC') # create block device object using DiskAccess
|
|
os.VfsFat.mkfs(bdev) # create FAT filesystem object using the disk storage block
|
|
os.mount(bdev, '/sd') # mount the filesystem at the SD card subdirectory
|
|
with open('/sd/hello.txt','w') as f: # open a new file in the directory
|
|
f.write('Hello world') # write to the file
|
|
print(open('/sd/hello.txt').read()) # print contents of the file
|
|
|
|
|
|
Flash Area
|
|
----------
|
|
|
|
The :ref:`zephyr.FlashArea <zephyr.FlashArea>` class can be used to implement a low-level storage system or
|
|
customize filesystem configurations. To store persistent data on the device, using a higher-level filesystem
|
|
API is recommended (see below).
|
|
|
|
This class uses `Zephyr Flash map API <https://docs.zephyrproject.org/latest/reference/storage/flash_map/flash_map.html#>`_ and
|
|
implements the `os.AbstractBlockDev` protocol.
|
|
|
|
Example usage with the internal flash on the reel_board or the rv32m1_vega_ri5cy board::
|
|
|
|
import os
|
|
from zephyr import FlashArea
|
|
bdev = FlashArea(FlashArea.STORAGE, 4096) # create block device object using FlashArea
|
|
os.VfsLfs2.mkfs(bdev) # create Little filesystem object using the flash area block
|
|
os.mount(bdev, '/flash') # mount the filesystem at the flash storage subdirectory
|
|
with open('/flash/hello.txt','w') as f: # open a new file in the directory
|
|
f.write('Hello world') # write to the file
|
|
print(open('/flash/hello.txt').read()) # print contents of the file
|
|
|
|
For boards such as the frdm_k64f in which the MicroPython application spills into the default flash storage
|
|
partition, use the scratch partition by replacing ``FlashArea.STORAGE`` with the integer value 4.
|