caffeine-hal 0.6.6
A Header-Defined Interface c library, it provides the hal layer for the Caffeine framework
Loading...
Searching...
No Matches
cfn_hal_nvm.h
Go to the documentation of this file.
1
26#ifndef CAFFEINE_HAL_HAL_NVM_H
27#define CAFFEINE_HAL_HAL_NVM_H
28
29#ifdef __cplusplus
30extern "C"
31{
32#endif
33
34/* Includes ---------------------------------------------------------*/
35#include "cfn_hal.h"
36#include "cfn_hal_base.h"
37#include "cfn_hal_types.h"
38
39/* Defines ----------------------------------------------------------*/
40
41/* Types Enums ------------------------------------------------------*/
42
52
63
64/* Types Structs ----------------------------------------------------*/
65
69typedef struct
70{
71 size_t total_size;
72 size_t sector_size;
73 size_t page_size;
74 uint32_t write_cycles;
76
80typedef struct
81{
84
88typedef struct
89{
90 void *instance;
91 void *user_arg;
93
94typedef struct cfn_hal_nvm_s cfn_hal_nvm_t;
96
104typedef void (*cfn_hal_nvm_callback_t)(cfn_hal_nvm_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg);
105
110{
112
113 /* NVM Specific Extensions */
114 cfn_hal_error_code_t (*read)(cfn_hal_nvm_t *driver, uint32_t addr, uint8_t *buffer, size_t size, uint32_t timeout);
116 cfn_hal_nvm_t *driver, uint32_t addr, const uint8_t *data, size_t size, uint32_t timeout);
117 cfn_hal_error_code_t (*erase_sector)(cfn_hal_nvm_t *driver, uint32_t sector_addr, uint32_t timeout);
118 cfn_hal_error_code_t (*erase_chip)(cfn_hal_nvm_t *driver, uint32_t timeout);
120};
121
123
125/* Functions inline ------------------------------------------------- */
127 uint32_t peripheral_id,
128 struct cfn_hal_clock_s *clock,
129 void *dependency,
130 const cfn_hal_nvm_api_t *api,
131 const cfn_hal_nvm_phy_t *phy,
132 const cfn_hal_nvm_config_t *config,
133 cfn_hal_nvm_callback_t callback,
134 void *user_arg)
135{
137 driver, CFN_HAL_PERIPHERAL_TYPE_NVM, peripheral_id, clock, dependency, api, phy, config, callback, user_arg);
138}
139
147 const cfn_hal_nvm_config_t *config)
148{
149 if (driver == NULL || config == NULL)
150 {
152 }
153
154 return cfn_hal_base_config_validate(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, config);
155}
156
163{
164 if (!driver)
165 {
167 }
168 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
169 cfn_hal_error_code_t error = cfn_hal_nvm_config_validate(driver, driver->config);
170 if (error != CFN_HAL_ERROR_OK)
171 {
172 return error;
173 }
174 return cfn_hal_base_init(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM);
175}
176
183{
184 if (!driver)
185 {
187 }
189}
190
198{
199 if (!driver)
200 {
202 }
204 if (error != CFN_HAL_ERROR_OK)
205 {
206 return error;
207 }
208 {
209 driver->config = config;
210 }
211 return cfn_hal_base_config_set(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, (const void *) config);
212}
213
221{
222 if (!driver || !config || !driver->config)
223 {
225 }
226 *config = *(driver->config);
227 return CFN_HAL_ERROR_OK;
228}
229
238 const cfn_hal_nvm_callback_t callback,
239 void *user_arg)
240{
241 if (!driver)
242 {
244 }
245 {
246 driver->cb = callback;
247 driver->cb_user_arg = user_arg;
248 }
250 &driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, (cfn_hal_callback_t) callback, user_arg);
251}
252
267
275{
276 if (!driver)
277 {
279 }
280 return cfn_hal_base_event_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, event_mask);
281}
282
290{
291 if (!driver)
292 {
294 }
295 return cfn_hal_base_event_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, event_mask);
296}
297
305{
306 if (!driver)
307 {
309 }
310 return cfn_hal_base_event_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, event_mask);
311}
312
320{
321 if (!driver)
322 {
324 }
325 return cfn_hal_base_error_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, error_mask);
326}
327
335{
336 if (!driver)
337 {
339 }
340 return cfn_hal_base_error_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, error_mask);
341}
342
350{
351 if (!driver)
352 {
354 }
355 return cfn_hal_base_error_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_NVM, error_mask);
356}
357
358/* NVM Specific Functions ------------------------------------------- */
359
370cfn_hal_nvm_read(cfn_hal_nvm_t *driver, uint32_t addr, uint8_t *buffer, size_t size, uint32_t timeout)
371{
373 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_NVM, read, driver, error, addr, buffer, size, timeout);
374 return error;
375}
376
387cfn_hal_nvm_write(cfn_hal_nvm_t *driver, uint32_t addr, const uint8_t *data, size_t size, uint32_t timeout)
388{
390 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_NVM, write, driver, error, addr, data, size, timeout);
391 return error;
392}
393
402 uint32_t sector_addr,
403 uint32_t timeout)
404{
406 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_NVM, erase_sector, driver, error, sector_addr, timeout);
407 return error;
408}
409
417{
419 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_NVM, erase_chip, driver, error, timeout);
420 return error;
421}
422
431{
433 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_NVM, get_info, driver, error, addr, info);
434 return error;
435}
437 const cfn_hal_nvm_config_t *config,
438 const cfn_hal_nvm_phy_t *phy,
439 struct cfn_hal_clock_s *clock,
440 void *dependency,
441 cfn_hal_nvm_callback_t callback,
442 void *user_arg);
444#ifdef __cplusplus
445}
446#endif
447
448#endif // CAFFEINE_HAL_HAL_NVM_H
Core Hardware Abstraction Layer definitions and macros.
#define CFN_HAL_CHECK_AND_CALL_FUNC_VARG(expected_peripheral_type, func, driver, result,...)
Definition cfn_hal.h:134
#define CFN_HAL_INLINE
Macro for inlining HAL wrapper functions. Can be overridden with attribute((always_inline)) for perfo...
Definition cfn_hal.h:61
#define CFN_HAL_BIT(x)
Definition cfn_hal.h:79
#define CFN_HAL_CREATE_DRIVER_TYPE(prefix, config_type, api_type, phy_type, cb_type)
Definition cfn_hal.h:102
Base driver Hardware Abstraction Layer declarations.
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error disable for any driver. Deactivates exception-flow hardware triggers based on the provi...
Definition cfn_hal_base_impl.h:436
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_callback_register(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_callback_t callback, void *user_arg)
Generic callback registration for any driver.
Definition cfn_hal_base_impl.h:254
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t error_mask)
Generic error enable for any driver. Activates exception-flow hardware triggers based on the provided...
Definition cfn_hal_base_impl.h:411
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_enable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event enable for any driver. Activates nominal hardware triggers based on the provided mask.
Definition cfn_hal_base_impl.h:331
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *event_mask)
Generic event status getter for any driver. Retrieves the current nominal hardware triggers/flags.
Definition cfn_hal_base_impl.h:386
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_error_get(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t *error_mask)
Generic error status getter for any driver. Retrieves current exception-flow hardware flags/errors.
Definition cfn_hal_base_impl.h:461
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic configuration setter for any driver.
Definition cfn_hal_base_impl.h:196
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_power_state_set(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, cfn_hal_power_state_t state)
Generic power state transition for any driver.
Definition cfn_hal_base_impl.h:279
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_deinit(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic deinitialization for any driver. Returns the driver to the CONSTRUCTED state and releases boa...
Definition cfn_hal_base_impl.h:144
#define CFN_HAL_VMT_CHECK(api_struct_type)
Compile-time check to ensure a peripheral API struct is compatible with the base layer....
Definition cfn_hal_base.h:91
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_init(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type)
Generic initialization for any driver. Handles board-level hooks, type validation,...
Definition cfn_hal_base_impl.h:85
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_config_validate(const cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, const void *config)
Generic validation for a configuration.
Definition cfn_hal_base_impl.h:234
CFN_HAL_BASE_API cfn_hal_error_code_t cfn_hal_base_event_disable(cfn_hal_driver_t *base, cfn_hal_peripheral_type_t expected_type, uint32_t event_mask)
Generic event disable for any driver. Deactivates nominal hardware triggers based on the provided mas...
Definition cfn_hal_base_impl.h:361
#define CFN_HAL_POPULATE_DRIVER( driver_ptr, periph_type, periph_id, clock_ptr, dep_ptr, api_ptr, phy_ptr, cfg_ptr, cb_func, cb_arg)
Standardizes the population of a peripheral driver structure. This macro ensures that the base driver...
Definition cfn_hal_base_impl.h:45
void(* cfn_hal_nvm_callback_t)(cfn_hal_nvm_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg)
NVM callback signature.
Definition cfn_hal_nvm.h:104
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_error_disable(cfn_hal_nvm_t *driver, uint32_t error_mask)
Disables one or more NVM exception errors.
Definition cfn_hal_nvm.h:334
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_init(cfn_hal_nvm_t *driver)
Initializes the NVM controller driver.
Definition cfn_hal_nvm.h:162
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_read(cfn_hal_nvm_t *driver, uint32_t addr, uint8_t *buffer, size_t size, uint32_t timeout)
Reads data from non-volatile memory.
Definition cfn_hal_nvm.h:370
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_config_get(cfn_hal_nvm_t *driver, cfn_hal_nvm_config_t *config)
Gets the current NVM configuration.
Definition cfn_hal_nvm.h:220
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_event_get(cfn_hal_nvm_t *driver, uint32_t *event_mask)
Retrieves the current NVM nominal event status.
Definition cfn_hal_nvm.h:304
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_power_state_set(cfn_hal_nvm_t *driver, cfn_hal_power_state_t state)
Sets the NVM power state.
Definition cfn_hal_nvm.h:259
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_erase_chip(cfn_hal_nvm_t *driver, uint32_t timeout)
Erases the entire non-volatile memory (Bulk Erase).
Definition cfn_hal_nvm.h:416
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_callback_register(cfn_hal_nvm_t *driver, const cfn_hal_nvm_callback_t callback, void *user_arg)
Registers a callback for NVM events and errors.
Definition cfn_hal_nvm.h:237
cfn_hal_error_code_t cfn_hal_nvm_construct(cfn_hal_nvm_t *driver, const cfn_hal_nvm_config_t *config, const cfn_hal_nvm_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_nvm_callback_t callback, void *user_arg)
Definition cfn_hal_nvm_port.c:118
struct cfn_hal_nvm_s cfn_hal_nvm_t
Definition cfn_hal_nvm.h:94
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_event_enable(cfn_hal_nvm_t *driver, uint32_t event_mask)
Enables one or more NVM nominal events.
Definition cfn_hal_nvm.h:274
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_config_validate(const cfn_hal_nvm_t *driver, const cfn_hal_nvm_config_t *config)
Validates the NVM configuration.
Definition cfn_hal_nvm.h:146
CFN_HAL_INLINE void cfn_hal_nvm_populate(cfn_hal_nvm_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_nvm_api_t *api, const cfn_hal_nvm_phy_t *phy, const cfn_hal_nvm_config_t *config, cfn_hal_nvm_callback_t callback, void *user_arg)
Definition cfn_hal_nvm.h:126
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_erase_sector(cfn_hal_nvm_t *driver, uint32_t sector_addr, uint32_t timeout)
Erases a specific sector or page of memory.
Definition cfn_hal_nvm.h:401
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_write(cfn_hal_nvm_t *driver, uint32_t addr, const uint8_t *data, size_t size, uint32_t timeout)
Programs data into non-volatile memory.
Definition cfn_hal_nvm.h:387
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_error_enable(cfn_hal_nvm_t *driver, uint32_t error_mask)
Enables one or more NVM exception errors.
Definition cfn_hal_nvm.h:319
cfn_hal_nvm_error_t
NVM exception error flags.
Definition cfn_hal_nvm.h:57
@ CFN_HAL_NVM_ERROR_PROTECTED
Definition cfn_hal_nvm.h:59
@ CFN_HAL_NVM_ERROR_NONE
Definition cfn_hal_nvm.h:58
@ CFN_HAL_NVM_ERROR_ALIGNMENT
Definition cfn_hal_nvm.h:60
@ CFN_HAL_NVM_ERROR_GENERAL
Definition cfn_hal_nvm.h:61
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_event_disable(cfn_hal_nvm_t *driver, uint32_t event_mask)
Disables one or more NVM nominal events.
Definition cfn_hal_nvm.h:289
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_error_get(cfn_hal_nvm_t *driver, uint32_t *error_mask)
Retrieves the current NVM exception error status.
Definition cfn_hal_nvm.h:349
cfn_hal_error_code_t cfn_hal_nvm_destruct(cfn_hal_nvm_t *driver)
Definition cfn_hal_nvm_port.c:134
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_get_info(cfn_hal_nvm_t *driver, uint32_t addr, cfn_hal_nvm_info_t *info)
Retrieves information about memory organization and endurance for a specific address.
Definition cfn_hal_nvm.h:430
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_config_set(cfn_hal_nvm_t *driver, const cfn_hal_nvm_config_t *config)
Sets the NVM configuration.
Definition cfn_hal_nvm.h:197
cfn_hal_nvm_event_t
NVM nominal event flags.
Definition cfn_hal_nvm.h:47
@ CFN_HAL_NVM_EVENT_WRITE_COMPLETE
Definition cfn_hal_nvm.h:49
@ CFN_HAL_NVM_EVENT_NONE
Definition cfn_hal_nvm.h:48
@ CFN_HAL_NVM_EVENT_ERASE_COMPLETE
Definition cfn_hal_nvm.h:50
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_nvm_deinit(cfn_hal_nvm_t *driver)
Deinitializes the NVM controller driver.
Definition cfn_hal_nvm.h:182
Common type definitions and enums for the HAL.
void(* cfn_hal_callback_t)(void)
Generic function pointer for HAL callbacks. Used as a standard-compliant carrier in the base layer.
Definition cfn_hal_types.h:98
#define CFN_HAL_PERIPHERAL_TYPE_NVM
Definition cfn_hal_types.h:134
enum cfn_hal_error_codes cfn_hal_error_code_t
cfn_hal_power_state_t
Definition cfn_hal_types.h:156
@ CFN_HAL_ERROR_OK
Definition cfn_hal_types.h:50
@ CFN_HAL_ERROR_BAD_PARAM
Definition cfn_hal_types.h:53
Base API structure for all peripheral drivers. Every peripheral-specific API struct MUST have this as...
Definition cfn_hal_base.h:63
NVM Virtual Method Table (VMT).
Definition cfn_hal_nvm.h:110
cfn_hal_error_code_t(* get_info)(cfn_hal_nvm_t *driver, uint32_t addr, cfn_hal_nvm_info_t *info)
Definition cfn_hal_nvm.h:119
cfn_hal_error_code_t(* erase_chip)(cfn_hal_nvm_t *driver, uint32_t timeout)
Definition cfn_hal_nvm.h:118
cfn_hal_error_code_t(* write)(cfn_hal_nvm_t *driver, uint32_t addr, const uint8_t *data, size_t size, uint32_t timeout)
Definition cfn_hal_nvm.h:115
cfn_hal_error_code_t(* erase_sector)(cfn_hal_nvm_t *driver, uint32_t sector_addr, uint32_t timeout)
Definition cfn_hal_nvm.h:117
cfn_hal_api_base_t base
Definition cfn_hal_nvm.h:111
cfn_hal_error_code_t(* read)(cfn_hal_nvm_t *driver, uint32_t addr, uint8_t *buffer, size_t size, uint32_t timeout)
Definition cfn_hal_nvm.h:114
NVM configuration structure.
Definition cfn_hal_nvm.h:81
void * user_config
Definition cfn_hal_nvm.h:82
NVM memory organization information.
Definition cfn_hal_nvm.h:70
size_t page_size
Definition cfn_hal_nvm.h:73
size_t sector_size
Definition cfn_hal_nvm.h:72
size_t total_size
Definition cfn_hal_nvm.h:71
uint32_t write_cycles
Definition cfn_hal_nvm.h:74
NVM hardware physical mapping.
Definition cfn_hal_nvm.h:89
void * user_arg
Definition cfn_hal_nvm.h:91
void * instance
Definition cfn_hal_nvm.h:90