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_sdio.h
Go to the documentation of this file.
1
26#ifndef CAFFEINE_HAL_HAL_SDIO_H
27#define CAFFEINE_HAL_HAL_SDIO_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_gpio.h"
38#include "cfn_hal_types.h"
39
40/* Defines ----------------------------------------------------------*/
41
42/* Types Enums ------------------------------------------------------*/
43
54
65
66/* Types Structs ----------------------------------------------------*/
67
71typedef struct
72{
73 uint32_t arg;
74 uint32_t cmd_index;
75 uint32_t response_type;
76 uint32_t wait_type;
78
82typedef struct
83{
84 uint32_t card_type;
85 uint32_t card_version;
86 uint32_t speed_class;
87 uint32_t rel_card_addr;
88 uint32_t block_count;
89 uint32_t block_size;
93
97typedef struct
98{
99 uint32_t bus_wide;
100 uint32_t clock_freq;
101 void *custom;
103
118
119typedef struct cfn_hal_sdio_s cfn_hal_sdio_t;
121
130 uint32_t event_mask,
131 uint32_t error_mask,
132 void *user_arg);
133
138{
140
141 /* SDIO Specific Extensions */
142 cfn_hal_error_code_t (*send_command)(cfn_hal_sdio_t *driver, const cfn_hal_sdio_cmd_t *cmd, uint32_t *response);
144 cfn_hal_sdio_t *driver, uint8_t *buffer, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout);
146 cfn_hal_sdio_t *driver, const uint8_t *data, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout);
149};
151
154
155/* Functions inline ------------------------------------------------- */
157 uint32_t peripheral_id,
158 struct cfn_hal_clock_s *clock,
159 void *dependency,
160 const cfn_hal_sdio_api_t *api,
161 const cfn_hal_sdio_phy_t *phy,
162 const cfn_hal_sdio_config_t *config,
164 void *user_arg)
165{
167 driver, CFN_HAL_PERIPHERAL_TYPE_SDIO, peripheral_id, clock, dependency, api, phy, config, callback, user_arg);
168}
169
177 const cfn_hal_sdio_config_t *config)
178{
179 if (driver == NULL || config == NULL)
180 {
182 }
183
184 return cfn_hal_base_config_validate(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, config);
185}
186
193{
194 if (!driver)
195 {
197 }
198 driver->base.vmt = (const struct cfn_hal_api_base_s *) driver->api;
199 cfn_hal_error_code_t error = cfn_hal_sdio_config_validate(driver, driver->config);
200 if (error != CFN_HAL_ERROR_OK)
201 {
202 return error;
203 }
204 return cfn_hal_base_init(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO);
205}
206
213{
214 if (!driver)
215 {
217 }
219}
220
228{
229 if (!driver)
230 {
232 }
234 if (error != CFN_HAL_ERROR_OK)
235 {
236 return error;
237 }
238 {
239 driver->config = config;
240 }
241 return cfn_hal_base_config_set(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, (const void *) config);
242}
243
251{
252 if (!driver || !config || !driver->config)
253 {
255 }
256 *config = *(driver->config);
257 return CFN_HAL_ERROR_OK;
258}
259
268 const cfn_hal_sdio_callback_t callback,
269 void *user_arg)
270{
271 if (!driver)
272 {
274 }
275 {
276 driver->cb = callback;
277 driver->cb_user_arg = user_arg;
278 }
280 &driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, (cfn_hal_callback_t) callback, user_arg);
281}
282
297
305{
306 if (!driver)
307 {
309 }
310 return cfn_hal_base_event_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, event_mask);
311}
312
320{
321 if (!driver)
322 {
324 }
325 return cfn_hal_base_event_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, event_mask);
326}
327
335{
336 if (!driver)
337 {
339 }
340 return cfn_hal_base_event_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, event_mask);
341}
342
350{
351 if (!driver)
352 {
354 }
355 return cfn_hal_base_error_enable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, error_mask);
356}
357
365{
366 if (!driver)
367 {
369 }
370 return cfn_hal_base_error_disable(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, error_mask);
371}
372
380{
381 if (!driver)
382 {
384 }
385 return cfn_hal_base_error_get(&driver->base, CFN_HAL_PERIPHERAL_TYPE_SDIO, error_mask);
386}
387
388/* SDIO Specific Functions ------------------------------------------ */
389
398 const cfn_hal_sdio_cmd_t *cmd,
399 uint32_t *response)
400{
402 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_SDIO, send_command, driver, error, cmd, response);
403 return error;
404}
405
416 cfn_hal_sdio_t *driver, uint8_t *buffer, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout)
417{
420 CFN_HAL_PERIPHERAL_TYPE_SDIO, read_blocks, driver, error, buffer, block_addr, nbr_of_blocks, timeout);
421 return error;
422}
423
434 cfn_hal_sdio_t *driver, const uint8_t *data, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout)
435{
438 CFN_HAL_PERIPHERAL_TYPE_SDIO, write_blocks, driver, error, data, block_addr, nbr_of_blocks, timeout);
439 return error;
440}
441
454
462{
464 CFN_HAL_CHECK_AND_CALL_FUNC_VARG(CFN_HAL_PERIPHERAL_TYPE_SDIO, wait_card_ready, driver, error, timeout);
465 return error;
466}
468 const cfn_hal_sdio_config_t *config,
469 const cfn_hal_sdio_phy_t *phy,
470 struct cfn_hal_clock_s *clock,
471 void *dependency,
473 void *user_arg);
475#ifdef __cplusplus
476}
477#endif
478
479#endif // CAFFEINE_HAL_HAL_SDIO_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
General Purpose Input/Output (GPIO) HAL API.
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_callback_register(cfn_hal_sdio_t *driver, const cfn_hal_sdio_callback_t callback, void *user_arg)
Registers a callback for SDIO events and errors.
Definition cfn_hal_sdio.h:267
cfn_hal_error_code_t cfn_hal_sdio_destruct(cfn_hal_sdio_t *driver)
Definition cfn_hal_sdio_port.c:84
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_config_validate(const cfn_hal_sdio_t *driver, const cfn_hal_sdio_config_t *config)
Validates the SDIO configuration.
Definition cfn_hal_sdio.h:176
CFN_HAL_INLINE void cfn_hal_sdio_populate(cfn_hal_sdio_t *driver, uint32_t peripheral_id, struct cfn_hal_clock_s *clock, void *dependency, const cfn_hal_sdio_api_t *api, const cfn_hal_sdio_phy_t *phy, const cfn_hal_sdio_config_t *config, cfn_hal_sdio_callback_t callback, void *user_arg)
Definition cfn_hal_sdio.h:156
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_write_blocks(cfn_hal_sdio_t *driver, const uint8_t *data, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout)
Writes data blocks to the SD card.
Definition cfn_hal_sdio.h:433
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_read_blocks(cfn_hal_sdio_t *driver, uint8_t *buffer, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout)
Reads data blocks from the SD card.
Definition cfn_hal_sdio.h:415
struct cfn_hal_sdio_s cfn_hal_sdio_t
Definition cfn_hal_sdio.h:119
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_error_get(cfn_hal_sdio_t *driver, uint32_t *error_mask)
Retrieves the current SDIO exception error status.
Definition cfn_hal_sdio.h:379
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_power_state_set(cfn_hal_sdio_t *driver, cfn_hal_power_state_t state)
Sets the SDIO power state.
Definition cfn_hal_sdio.h:289
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_event_disable(cfn_hal_sdio_t *driver, uint32_t event_mask)
Disables one or more SDIO nominal events.
Definition cfn_hal_sdio.h:319
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_send_command(cfn_hal_sdio_t *driver, const cfn_hal_sdio_cmd_t *cmd, uint32_t *response)
Sends an SD/MMC command and waits for a response.
Definition cfn_hal_sdio.h:397
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_config_set(cfn_hal_sdio_t *driver, const cfn_hal_sdio_config_t *config)
Sets the SDIO configuration.
Definition cfn_hal_sdio.h:227
void(* cfn_hal_sdio_callback_t)(cfn_hal_sdio_t *driver, uint32_t event_mask, uint32_t error_mask, void *user_arg)
SDIO callback signature.
Definition cfn_hal_sdio.h:129
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_error_enable(cfn_hal_sdio_t *driver, uint32_t error_mask)
Enables one or more SDIO exception errors.
Definition cfn_hal_sdio.h:349
cfn_hal_sdio_event_t
SDIO nominal event flags.
Definition cfn_hal_sdio.h:48
@ CFN_HAL_SDIO_EVENT_RX_READY
Definition cfn_hal_sdio.h:51
@ CFN_HAL_SDIO_EVENT_CMD_SENT
Definition cfn_hal_sdio.h:52
@ CFN_HAL_SDIO_EVENT_TX_COMPLETE
Definition cfn_hal_sdio.h:50
@ CFN_HAL_SDIO_EVENT_NONE
Definition cfn_hal_sdio.h:49
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_error_disable(cfn_hal_sdio_t *driver, uint32_t error_mask)
Disables one or more SDIO exception errors.
Definition cfn_hal_sdio.h:364
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_get_card_info(cfn_hal_sdio_t *driver, cfn_hal_sdio_card_info_t *info)
Retrieves card-specific registers and capacity.
Definition cfn_hal_sdio.h:448
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_event_get(cfn_hal_sdio_t *driver, uint32_t *event_mask)
Retrieves the current SDIO nominal event status.
Definition cfn_hal_sdio.h:334
cfn_hal_error_code_t cfn_hal_sdio_construct(cfn_hal_sdio_t *driver, const cfn_hal_sdio_config_t *config, const cfn_hal_sdio_phy_t *phy, struct cfn_hal_clock_s *clock, void *dependency, cfn_hal_sdio_callback_t callback, void *user_arg)
Definition cfn_hal_sdio_port.c:68
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_event_enable(cfn_hal_sdio_t *driver, uint32_t event_mask)
Enables one or more SDIO nominal events.
Definition cfn_hal_sdio.h:304
cfn_hal_sdio_error_t
SDIO exception error flags.
Definition cfn_hal_sdio.h:59
@ CFN_HAL_SDIO_ERROR_CRC
Definition cfn_hal_sdio.h:61
@ CFN_HAL_SDIO_ERROR_TIMEOUT
Definition cfn_hal_sdio.h:62
@ CFN_HAL_SDIO_ERROR_GENERAL
Definition cfn_hal_sdio.h:63
@ CFN_HAL_SDIO_ERROR_NONE
Definition cfn_hal_sdio.h:60
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_config_get(cfn_hal_sdio_t *driver, cfn_hal_sdio_config_t *config)
Gets the current SDIO configuration.
Definition cfn_hal_sdio.h:250
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_wait_card_ready(cfn_hal_sdio_t *driver, uint32_t timeout)
Waits until the SD card is no longer busy.
Definition cfn_hal_sdio.h:461
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_init(cfn_hal_sdio_t *driver)
Initializes the SDIO driver.
Definition cfn_hal_sdio.h:192
CFN_HAL_INLINE cfn_hal_error_code_t cfn_hal_sdio_deinit(cfn_hal_sdio_t *driver)
Deinitializes the SDIO driver.
Definition cfn_hal_sdio.h:212
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
enum cfn_hal_error_codes cfn_hal_error_code_t
#define CFN_HAL_PERIPHERAL_TYPE_SDIO
Definition cfn_hal_types.h:138
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
Lightweight handle to a specific GPIO pin. Used by other peripherals to reference physical pins.
Definition cfn_hal_gpio.h:173
SDIO Virtual Method Table (VMT).
Definition cfn_hal_sdio.h:138
cfn_hal_error_code_t(* write_blocks)(cfn_hal_sdio_t *driver, const uint8_t *data, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout)
Definition cfn_hal_sdio.h:145
cfn_hal_api_base_t base
Definition cfn_hal_sdio.h:139
cfn_hal_error_code_t(* wait_card_ready)(cfn_hal_sdio_t *driver, uint32_t timeout)
Definition cfn_hal_sdio.h:148
cfn_hal_error_code_t(* get_card_info)(cfn_hal_sdio_t *driver, cfn_hal_sdio_card_info_t *info)
Definition cfn_hal_sdio.h:147
cfn_hal_error_code_t(* read_blocks)(cfn_hal_sdio_t *driver, uint8_t *buffer, uint32_t block_addr, uint32_t nbr_of_blocks, uint32_t timeout)
Definition cfn_hal_sdio.h:143
cfn_hal_error_code_t(* send_command)(cfn_hal_sdio_t *driver, const cfn_hal_sdio_cmd_t *cmd, uint32_t *response)
Definition cfn_hal_sdio.h:142
SDIO card information.
Definition cfn_hal_sdio.h:83
uint32_t speed_class
Definition cfn_hal_sdio.h:86
uint32_t log_block_size
Definition cfn_hal_sdio.h:91
uint32_t rel_card_addr
Definition cfn_hal_sdio.h:87
uint32_t log_block_count
Definition cfn_hal_sdio.h:90
uint32_t block_count
Definition cfn_hal_sdio.h:88
uint32_t card_type
Definition cfn_hal_sdio.h:84
uint32_t card_version
Definition cfn_hal_sdio.h:85
uint32_t block_size
Definition cfn_hal_sdio.h:89
SDIO command configuration.
Definition cfn_hal_sdio.h:72
uint32_t cmd_index
Definition cfn_hal_sdio.h:74
uint32_t wait_type
Definition cfn_hal_sdio.h:76
uint32_t arg
Definition cfn_hal_sdio.h:73
uint32_t response_type
Definition cfn_hal_sdio.h:75
SDIO configuration structure.
Definition cfn_hal_sdio.h:98
uint32_t clock_freq
Definition cfn_hal_sdio.h:100
uint32_t bus_wide
Definition cfn_hal_sdio.h:99
void * custom
Definition cfn_hal_sdio.h:101
SDIO hardware physical mapping.
Definition cfn_hal_sdio.h:108
void * user_arg
Definition cfn_hal_sdio.h:116
cfn_hal_gpio_pin_handle_t * ck
Definition cfn_hal_sdio.h:110
void * instance
Definition cfn_hal_sdio.h:109
cfn_hal_gpio_pin_handle_t * d0
Definition cfn_hal_sdio.h:112
cfn_hal_gpio_pin_handle_t * d1
Definition cfn_hal_sdio.h:113
cfn_hal_gpio_pin_handle_t * cmd
Definition cfn_hal_sdio.h:111
cfn_hal_gpio_pin_handle_t * d3
Definition cfn_hal_sdio.h:115
cfn_hal_gpio_pin_handle_t * d2
Definition cfn_hal_sdio.h:114