![]() |
RT-Thread RTOS
An open source embedded real-time operating system
|
**RT_USING_NVMEM** builds **nvmem.c** only. Provider drivers register **struct rt_nvmem_device** and set **rt_ofw_data(provider_np)**. Consumers parse **nvmem-cells** phandles.
API: NVMEM subsystem. Sources: **nvmem.c**, **nvmem.h**.
| Option | Role |
|---|---|
**RT_USING_DM** | Required |
**RT_USING_OFW** | Required |
**RT_USING_PIN** | Optional **wp** GPIO |
**RT_USING_NVMEM** | Core; selects **RT_USING_ADT_REF** |
**SOC_DM_NVMEM_DIR** | BSP OTP/eFuse/EEPROM drivers |
No **rt_bus** — provider **reg_read/reg_write** + OFW lookup only.
| Property | Role |
|---|---|
**#nvmem-cell-cells** | Usually 1 — phandle arg = cell index |
**read-only** | Forces read-only at register |
**wp** | Write-protect GPIO (unless **ignore_wp**) |
**ofw_nvmem_get_cell** order:
rt_ofw_data(cell_np)** if cachedappend_cell** static list by index/idreg** (**offset**, **bytes**)Dynamic cells are **free_able** and removed on last **put_cell**.
reg_read**; **reg_write** only if programmable.size**, **parent.ofw_node**, callbacks.rt_nvmem_device_register**.append_cell** for fixed index/id layouts.remove**: all **put_cell**, then **unregister** when ref is 1.SOC_DM_NVMEM_DIR**.**bit_offset** / **nbits** on **struct rt_nvmem_cell**: core masks after byte read; write merges into existing bytes. Prefer byte-aligned **reg = <offset length>**; validate parsing in **nvmem.c** or use **append_cell**.
| Issue | Mitigation |
|---|---|
| Provider not probed | **rt_platform_ofw_request** first |
**#nvmem-cell-cells mismatch** | Match provider binding |
| Concurrent OTP | Serialize in **reg_read/reg_write** |
**unregister EBUSY** | Release all cell refs |