|
ChibiOS 21.11.4
|
Generic MMC driver. More...
Generic MMC driver.
This module implements a portable MMC/SD driver that uses a SPI driver as physical layer. Hot plugging and removal are supported through kernel events.
HAL_USE_MMC_SPI and HAL_USE_SPI options must be enabled in halconf.h.This driver implements a state machine internally, see the Abstract I/O Block Device module documentation for details.
This driver allows to read or write single or multiple 512 bytes blocks on a SD Card.

MMC_SPI configuration options | |
| #define | MMC_IDLE_TIMEOUT_MS 1000 |
| Timeout before assuming a failure while waiting for card idle. | |
| #define | MMC_USE_MUTUAL_EXCLUSION TRUE |
| Mutual exclusion on the SPI bus. | |
Macro Functions | |
| #define | mmcIsCardInserted(mmcp) |
| Returns the card insertion status. | |
| #define | mmcIsWriteProtected(mmcp) |
| Returns the write protect status. | |
Data Structures | |
| struct | mmc_spi_config_t |
| Type of a MMC/SD over SPI driver configuration structure. More... | |
| struct | mmc_spi_driver_vmt |
MMCDriver virtual methods table. More... | |
| struct | mmc_spi_driver_t |
| Structure representing a MMC/SD over SPI driver. More... | |
Macros | |
| #define | MMC_CMD0_RETRY 10U |
| #define | MMC_CMD1_RETRY 100U |
| #define | MMC_ACMD41_RETRY 100U |
| #define | MMC_WAIT_DATA 10000U |
| #define | MMC_BUFFER_SIZE 16U |
| Size of the buffer to be supplied to the driver. | |
| #define | __mmc_driver_methods _mmcsd_block_device_methods |
MMCDriver specific methods. | |
Typedefs | |
| typedef mmc_spi_config_t | MMCConfig |
| Legacy name for compatibility. | |
| typedef mmc_spi_driver_t | MMCDriver |
| Legacy name for compatibility. | |
Functions | |
| static bool | mmc_is_card_inserted (void *instance) |
| static bool | mmc_is_write_protected (void *instance) |
| static bool | mmc_connect (void *instance) |
| static bool | mmc_disconnect (void *instance) |
| static bool | mmc_read (void *instance, uint32_t startblk, uint8_t *buffer, uint32_t n) |
| static bool | mmc_write (void *instance, uint32_t startblk, const uint8_t *buffer, uint32_t n) |
| static bool | mmc_sync (void *instance) |
| static bool | mmc_get_info (void *instance, BlockDeviceInfo *bdip) |
| static uint8_t | mmc_crc7 (uint8_t crc, const uint8_t *buffer, size_t len) |
| Calculate the MMC standard CRC-7 based on a lookup table. | |
| static bool | mmc_wait_idle (MMCDriver *mmcp) |
| Waits an idle condition. | |
| static bool | mmc_send_hdr (MMCDriver *mmcp, uint8_t cmd, uint32_t arg) |
| Sends a command header. | |
| static bool | mmc_recvr1 (MMCDriver *mmcp, uint8_t *r1p) |
| Receives a single byte response. | |
| static bool | mmc_recvr3 (MMCDriver *mmcp, uint8_t *r1p) |
| Receives a three byte response. | |
| static bool | mmc_send_command_R1 (MMCDriver *mmcp, uint8_t cmd, uint32_t arg, uint8_t *r1p) |
| Sends a command an returns a single byte response. | |
| static bool | mmc_send_command_R3 (MMCDriver *mmcp, uint8_t cmd, uint32_t arg, uint8_t *r1p) |
| Sends a command which returns a five bytes response (R3). | |
| static bool | mmc_read_CxD (MMCDriver *mmcp, uint8_t cmd, uint32_t cxd[4]) |
| Reads the CSD. | |
| void | mmcInit (void) |
| MMC over SPI driver initialization. | |
| void | mmcObjectInit (MMCDriver *mmcp, uint8_t *buffer) |
| Initializes an instance. | |
| msg_t | mmcStart (MMCDriver *mmcp, const MMCConfig *config) |
| Configures and activates the MMC peripheral. | |
| void | mmcStop (MMCDriver *mmcp) |
| Disables the MMC peripheral. | |
| bool | mmcConnect (MMCDriver *mmcp) |
| Performs the initialization procedure on the inserted card. | |
| bool | mmcDisconnect (MMCDriver *mmcp) |
| Brings the driver in a state safe for card removal. | |
| bool | mmcStartSequentialRead (MMCDriver *mmcp, uint32_t startblk) |
| Starts a sequential read. | |
| bool | mmcSequentialRead (MMCDriver *mmcp, uint8_t *buffer) |
| Reads a block within a sequential read operation. | |
| bool | mmcStopSequentialRead (MMCDriver *mmcp) |
| Stops a sequential read gracefully. | |
| bool | mmcStartSequentialWrite (MMCDriver *mmcp, uint32_t startblk) |
| Starts a sequential write. | |
| bool | mmcSequentialWrite (MMCDriver *mmcp, const uint8_t *buffer) |
| Writes a block within a sequential write operation. | |
| bool | mmcStopSequentialWrite (MMCDriver *mmcp) |
| Stops a sequential write gracefully. | |
| bool | mmcSync (MMCDriver *mmcp) |
| Waits for card idle condition. | |
| bool | mmcGetInfo (MMCDriver *mmcp, BlockDeviceInfo *bdip) |
| Returns the media info. | |
| bool | mmcErase (MMCDriver *mmcp, uint32_t startblk, uint32_t endblk) |
| Erases blocks. | |
| bool | mmc_lld_is_card_inserted (MMCDriver *mmcp) |
| bool | mmc_lld_is_write_protected (MMCDriver *mmcp) |
Variables | |
| static const struct mmc_spi_driver_vmt | mmc_vmt |
| Virtual methods table. | |
| static const uint8_t | mmc_crc7_lookup_table [256] |
| Lookup table for CRC-7 ( based on polynomial x^7 + x^3 + 1). | |
| #define MMC_CMD0_RETRY 10U |
Definition at line 34 of file hal_mmc_spi.h.
Referenced by mmcConnect().
| #define MMC_CMD1_RETRY 100U |
Definition at line 35 of file hal_mmc_spi.h.
Referenced by mmcConnect().
| #define MMC_ACMD41_RETRY 100U |
Definition at line 36 of file hal_mmc_spi.h.
Referenced by mmcConnect().
| #define MMC_WAIT_DATA 10000U |
Definition at line 37 of file hal_mmc_spi.h.
Referenced by mmc_read_CxD(), and mmcSequentialRead().
| #define MMC_BUFFER_SIZE 16U |
Size of the buffer to be supplied to the driver.
Definition at line 44 of file hal_mmc_spi.h.
| #define MMC_IDLE_TIMEOUT_MS 1000 |
Timeout before assuming a failure while waiting for card idle.
Definition at line 59 of file hal_mmc_spi.h.
Referenced by mmc_wait_idle().
| #define MMC_USE_MUTUAL_EXCLUSION TRUE |
Mutual exclusion on the SPI bus.
Definition at line 66 of file hal_mmc_spi.h.
| #define __mmc_driver_methods _mmcsd_block_device_methods |
MMCDriver specific methods.
Definition at line 113 of file hal_mmc_spi.h.
| #define mmcIsCardInserted | ( | mmcp | ) |
Returns the card insertion status.
sdc_lld_is_card_inserted(), this function must be provided by the application because it is not part of the SDC driver.| [in] | mmcp | pointer to the MMCDriver object |
| false | card not inserted. |
| true | card inserted. |
Definition at line 178 of file hal_mmc_spi.h.
Referenced by mmc_is_card_inserted().
| #define mmcIsWriteProtected | ( | mmcp | ) |
Returns the write protect status.
| [in] | mmcp | pointer to the MMCDriver object |
| false | card not inserted. |
| true | card inserted. |
Definition at line 190 of file hal_mmc_spi.h.
Referenced by mmc_is_write_protected().
| typedef mmc_spi_config_t MMCConfig |
| typedef mmc_spi_driver_t MMCDriver |
|
static |
Definition at line 105 of file hal_mmc_spi.c.
References mmcIsCardInserted.
|
static |
Definition at line 114 of file hal_mmc_spi.c.
References mmcIsWriteProtected.
|
static |
Definition at line 123 of file hal_mmc_spi.c.
References mmc_spi_driver_t::config, mmcConnect(), spiAcquireBus(), mmc_spi_config_t::spip, and spiReleaseBus().

|
static |
Definition at line 140 of file hal_mmc_spi.c.
References mmc_spi_driver_t::config, mmcDisconnect(), spiAcquireBus(), mmc_spi_config_t::spip, and spiReleaseBus().

|
static |
Definition at line 157 of file hal_mmc_spi.c.
References mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, MMCSD_BLOCK_SIZE, mmcSequentialRead(), mmcStartSequentialRead(), mmcStopSequentialRead(), spiAcquireBus(), mmc_spi_config_t::spip, and spiReleaseBus().

|
static |
Definition at line 193 of file hal_mmc_spi.c.
References mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, MMCSD_BLOCK_SIZE, mmcSequentialWrite(), mmcStartSequentialWrite(), mmcStopSequentialWrite(), spiAcquireBus(), mmc_spi_config_t::spip, and spiReleaseBus().

|
static |
Definition at line 229 of file hal_mmc_spi.c.
References mmc_spi_driver_t::config, mmcSync(), spiAcquireBus(), mmc_spi_config_t::spip, and spiReleaseBus().

|
static |
Definition at line 246 of file hal_mmc_spi.c.
References mmcGetInfo().

|
static |
Calculate the MMC standard CRC-7 based on a lookup table.
| [in] | crc | start value for CRC |
| [in] | buffer | pointer to data buffer |
| [in] | len | length of data |
Definition at line 263 of file hal_mmc_spi.c.
References mmc_crc7_lookup_table.
Referenced by mmc_send_hdr().
|
static |
Waits an idle condition.
| [in] | mmcp | pointer to the MMCDriver object |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 282 of file hal_mmc_spi.c.
References mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, MMC_IDLE_TIMEOUT_MS, osalThreadSleepMilliseconds, mmc_spi_config_t::spip, and spiReceive().
Referenced by mmc_send_hdr(), mmcDisconnect(), mmcSequentialWrite(), and mmcSync().

|
static |
Sends a command header.
| [in] | mmcp | pointer to the MMCDriver object |
| [in] | cmd | the command id |
| [in] | arg | the command argument |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 319 of file hal_mmc_spi.c.
References mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, mmc_crc7(), mmc_wait_idle(), mmc_spi_config_t::spip, and spiSend().
Referenced by mmc_read_CxD(), mmc_send_command_R1(), mmc_send_command_R3(), mmcStartSequentialRead(), and mmcStartSequentialWrite().

|
static |
Receives a single byte response.
| [in] | mmcp | pointer to the MMCDriver object |
| [out] | r1p | pointer to buffer for R1 answer |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 350 of file hal_mmc_spi.c.
References mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, mmc_spi_config_t::spip, and spiReceive().
Referenced by mmc_read_CxD(), mmc_recvr3(), mmc_send_command_R1(), mmcStartSequentialRead(), mmcStartSequentialWrite(), and mmcStopSequentialRead().

|
static |
Receives a three byte response.
| [in] | mmcp | pointer to the MMCDriver object |
| [out] | r1p | pointer to buffer for R1 answer |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 374 of file hal_mmc_spi.c.
References mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, mmc_recvr1(), mmc_spi_config_t::spip, and spiReceive().
Referenced by mmc_send_command_R3().

|
static |
Sends a command an returns a single byte response.
| [in] | mmcp | pointer to the MMCDriver object |
| [in] | cmd | the command id |
| [in] | arg | the command argument |
| [out] | r1p | pointer to buffer for R1 answer |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 396 of file hal_mmc_spi.c.
References mmc_spi_driver_t::config, mmc_recvr1(), mmc_send_hdr(), mmc_spi_config_t::spip, spiSelect(), and spiUnselect().
Referenced by mmcConnect(), and mmcErase().

|
static |
Sends a command which returns a five bytes response (R3).
| [in] | mmcp | pointer to the MMCDriver object |
| [in] | cmd | the command id |
| [in] | arg | the command argument |
| [out] | r1p | pointer to buffer for R1 answer |
uint8_t value. | 0xFF | timed out. |
Definition at line 423 of file hal_mmc_spi.c.
References mmc_spi_driver_t::config, mmc_recvr3(), mmc_send_hdr(), mmc_spi_config_t::spip, spiSelect(), and spiUnselect().
Referenced by mmcConnect().

|
static |
Reads the CSD.
| [in] | mmcp | pointer to the MMCDriver object |
| [out] | cmd | command |
| [out] | cxd | pointer to the CSD/CID buffer |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 450 of file hal_mmc_spi.c.
References mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, mmc_recvr1(), mmc_send_hdr(), MMC_WAIT_DATA, spiIgnore(), mmc_spi_config_t::spip, spiReceive(), spiSelect(), and spiUnselect().
Referenced by mmcConnect().

| void mmcInit | ( | void | ) |
MMC over SPI driver initialization.
halInit(), there is no need to explicitly initialize the driver.Definition at line 504 of file hal_mmc_spi.c.
Referenced by halInit().
| void mmcObjectInit | ( | MMCDriver * | mmcp, |
| uint8_t * | buffer ) |
Initializes an instance.
| [out] | mmcp | pointer to the MMCDriver object |
| [in] | buffer | operations buffer |
Definition at line 516 of file hal_mmc_spi.c.
References BLK_STOP, mmc_spi_driver_t::block_addresses, mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, mmc_vmt, and mmc_spi_driver_t::vmt.
Configures and activates the MMC peripheral.
Definition at line 534 of file hal_mmc_spi.c.
References BLK_ACTIVE, BLK_STOP, mmc_spi_driver_t::config, HAL_RET_SUCCESS, osalDbgAssert, and osalDbgCheck.
| void mmcStop | ( | MMCDriver * | mmcp | ) |
Disables the MMC peripheral.
| [in] | mmcp | pointer to the MMCDriver object |
Definition at line 553 of file hal_mmc_spi.c.
References BLK_ACTIVE, BLK_STOP, mmc_spi_driver_t::config, osalDbgAssert, osalDbgCheck, mmc_spi_config_t::spip, and spiStop().

| bool mmcConnect | ( | MMCDriver * | mmcp | ) |
Performs the initialization procedure on the inserted card.
This function should be invoked when a card is inserted and brings the driver in the MMC_READY state where it is possible to perform read and write operations.
| [in] | mmcp | pointer to the MMCDriver object |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 581 of file hal_mmc_spi.c.
References _mmcsd_get_capacity(), BLK_ACTIVE, BLK_CONNECTING, BLK_READY, mmc_spi_driver_t::block_addresses, mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, mmc_spi_config_t::hscfg, mmc_spi_config_t::lscfg, MMC_ACMD41_RETRY, MMC_CMD0_RETRY, MMC_CMD1_RETRY, mmc_read_CxD(), mmc_send_command_R1(), mmc_send_command_R3(), MMCSD_BLOCK_SIZE, MMCSD_CMD8_PATTERN, MMCSD_CMD_APP_CMD, MMCSD_CMD_APP_OP_COND, MMCSD_CMD_GO_IDLE_STATE, MMCSD_CMD_INIT, MMCSD_CMD_READ_OCR, MMCSD_CMD_SEND_CID, MMCSD_CMD_SEND_CSD, MMCSD_CMD_SEND_IF_COND, MMCSD_CMD_SET_BLOCKLEN, osalDbgAssert, osalDbgCheck, osalThreadSleepMilliseconds, spiIgnore(), mmc_spi_config_t::spip, spiStart(), and spiStop().
Referenced by mmc_connect().

| bool mmcDisconnect | ( | MMCDriver * | mmcp | ) |
Brings the driver in a state safe for card removal.
| [in] | mmcp | pointer to the MMCDriver object |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 719 of file hal_mmc_spi.c.
References BLK_ACTIVE, BLK_DISCONNECTING, BLK_READY, mmc_spi_driver_t::config, HAL_SUCCESS, mmc_spi_config_t::hscfg, mmc_wait_idle(), osalDbgAssert, osalDbgCheck, osalSysLock(), osalSysUnlock(), mmc_spi_config_t::spip, spiSelect(), spiStart(), spiStop(), and spiUnselect().
Referenced by mmc_disconnect().

| bool mmcStartSequentialRead | ( | MMCDriver * | mmcp, |
| uint32_t | startblk ) |
Starts a sequential read.
| [in] | mmcp | pointer to the MMCDriver object |
| [in] | startblk | first block to read |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 764 of file hal_mmc_spi.c.
References BLK_READING, BLK_READY, mmc_spi_driver_t::block_addresses, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, mmc_spi_config_t::hscfg, mmc_recvr1(), mmc_send_hdr(), MMCSD_BLOCK_SIZE, MMCSD_CMD_READ_MULTIPLE_BLOCK, osalDbgAssert, osalDbgCheck, mmc_spi_config_t::spip, spiSelect(), spiStart(), and spiUnselect().
Referenced by mmc_read().

| bool mmcSequentialRead | ( | MMCDriver * | mmcp, |
| uint8_t * | buffer ) |
Reads a block within a sequential read operation.
| [in] | mmcp | pointer to the MMCDriver object |
| [out] | buffer | pointer to the read buffer |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 817 of file hal_mmc_spi.c.
References BLK_READING, BLK_READY, mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, MMC_WAIT_DATA, MMCSD_BLOCK_SIZE, osalDbgCheck, spiIgnore(), mmc_spi_config_t::spip, spiReceive(), and spiUnselect().
Referenced by mmc_read().

| bool mmcStopSequentialRead | ( | MMCDriver * | mmcp | ) |
Stops a sequential read gracefully.
| [in] | mmcp | pointer to the MMCDriver object |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 855 of file hal_mmc_spi.c.
References BLK_READING, BLK_READY, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, mmc_recvr1(), MMCSD_CMD_STOP_TRANSMISSION, osalDbgCheck, mmc_spi_config_t::spip, spiSend(), and spiUnselect().
Referenced by mmc_read().

| bool mmcStartSequentialWrite | ( | MMCDriver * | mmcp, |
| uint32_t | startblk ) |
Starts a sequential write.
| [in] | mmcp | pointer to the MMCDriver object |
| [in] | startblk | first block to write |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 893 of file hal_mmc_spi.c.
References BLK_READY, BLK_WRITING, mmc_spi_driver_t::block_addresses, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, mmc_spi_config_t::hscfg, mmc_recvr1(), mmc_send_hdr(), MMCSD_BLOCK_SIZE, MMCSD_CMD_WRITE_MULTIPLE_BLOCK, osalDbgAssert, osalDbgCheck, mmc_spi_config_t::spip, spiSelect(), spiStart(), and spiUnselect().
Referenced by mmc_write().

| bool mmcSequentialWrite | ( | MMCDriver * | mmcp, |
| const uint8_t * | buffer ) |
Writes a block within a sequential write operation.
| [in] | mmcp | pointer to the MMCDriver object |
| [out] | buffer | pointer to the write buffer |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 942 of file hal_mmc_spi.c.
References BLK_READY, BLK_WRITING, mmc_spi_driver_t::buffer, mmc_spi_driver_t::config, HAL_FAILED, mmc_wait_idle(), MMCSD_BLOCK_SIZE, osalDbgCheck, spiIgnore(), mmc_spi_config_t::spip, spiReceive(), spiSend(), and spiUnselect().
Referenced by mmc_write().

| bool mmcStopSequentialWrite | ( | MMCDriver * | mmcp | ) |
Stops a sequential write gracefully.
| [in] | mmcp | pointer to the MMCDriver object |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 978 of file hal_mmc_spi.c.
References BLK_READY, BLK_WRITING, mmc_spi_driver_t::config, HAL_FAILED, HAL_SUCCESS, osalDbgCheck, mmc_spi_config_t::spip, spiSend(), and spiUnselect().
Referenced by mmc_write().

| bool mmcSync | ( | MMCDriver * | mmcp | ) |
Waits for card idle condition.
| [in] | mmcp | pointer to the MMCDriver object |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 1007 of file hal_mmc_spi.c.
References BLK_READY, BLK_SYNCING, mmc_spi_driver_t::config, HAL_FAILED, mmc_spi_config_t::hscfg, mmc_wait_idle(), osalDbgCheck, mmc_spi_config_t::spip, spiSelect(), spiStart(), and spiUnselect().
Referenced by mmc_sync().

| bool mmcGetInfo | ( | MMCDriver * | mmcp, |
| BlockDeviceInfo * | bdip ) |
Returns the media info.
| [in] | mmcp | pointer to the MMCDriver object |
| [out] | bdip | pointer to a BlockDeviceInfo structure |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 1044 of file hal_mmc_spi.c.
References BlockDeviceInfo::blk_num, BLK_READY, BlockDeviceInfo::blk_size, HAL_FAILED, HAL_SUCCESS, MMCSD_BLOCK_SIZE, and osalDbgCheck.
Referenced by mmc_get_info().
| bool mmcErase | ( | MMCDriver * | mmcp, |
| uint32_t | startblk, | ||
| uint32_t | endblk ) |
Erases blocks.
| [in] | mmcp | pointer to the MMCDriver object |
| [in] | startblk | starting block number |
| [in] | endblk | ending block number |
| HAL_SUCCESS | if the operation succeeded. |
| HAL_FAILED | if the operation failed. |
Definition at line 1071 of file hal_mmc_spi.c.
References BLK_READY, BLK_WRITING, mmc_spi_driver_t::block_addresses, HAL_FAILED, HAL_SUCCESS, mmc_send_command_R1(), MMCSD_BLOCK_SIZE, MMCSD_CMD_ERASE, MMCSD_CMD_ERASE_RW_BLK_END, MMCSD_CMD_ERASE_RW_BLK_START, and osalDbgCheck.

| bool mmc_lld_is_card_inserted | ( | MMCDriver * | mmcp | ) |
| bool mmc_lld_is_write_protected | ( | MMCDriver * | mmcp | ) |
|
static |
Virtual methods table.
Definition at line 61 of file hal_mmc_spi.c.
Referenced by mmcObjectInit().
|
static |
Lookup table for CRC-7 ( based on polynomial x^7 + x^3 + 1).
Definition at line 76 of file hal_mmc_spi.c.
Referenced by mmc_crc7().