RTEMS 6.3
Loading...
Searching...
No Matches
spi-sd-card.c File Reference

SD Card LibI2C driver. More...

#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <inttypes.h>
#include <rtems.h>
#include <rtems/libi2c.h>
#include <rtems/libio.h>
#include <rtems/blkdev.h>
#include <libchip/spi-sd-card.h>
#include <rtems/status-checks.h>

Macros

#define SD_CARD_BUSY_TOKEN   0
#define SD_CARD_BLOCK_SIZE_DEFAULT   512
#define SD_CARD_COMMAND_RESPONSE_START   7
#define SD_CARD_INVALIDATE_RESPONSE_INDEX(e)
Commands
#define SD_CARD_CMD_GO_IDLE_STATE   0
#define SD_CARD_CMD_SEND_OP_COND   1
#define SD_CARD_CMD_SEND_IF_COND   8
#define SD_CARD_CMD_SEND_CSD   9
#define SD_CARD_CMD_SEND_CID   10
#define SD_CARD_CMD_STOP_TRANSMISSION   12
#define SD_CARD_CMD_SEND_STATUS   13
#define SD_CARD_CMD_SET_BLOCKLEN   16
#define SD_CARD_CMD_READ_SINGLE_BLOCK   17
#define SD_CARD_CMD_READ_MULTIPLE_BLOCK   18
#define SD_CARD_CMD_SET_BLOCK_COUNT   23
#define SD_CARD_CMD_WRITE_BLOCK   24
#define SD_CARD_CMD_WRITE_MULTIPLE_BLOCK   25
#define SD_CARD_CMD_PROGRAM_CSD   27
#define SD_CARD_CMD_SET_WRITE_PROT   28
#define SD_CARD_CMD_CLR_WRITE_PROT   29
#define SD_CARD_CMD_SEND_WRITE_PROT   30
#define SD_CARD_CMD_TAG_SECTOR_START   32
#define SD_CARD_CMD_TAG_SECTOR_END   33
#define SD_CARD_CMD_UNTAG_SECTOR   34
#define SD_CARD_CMD_TAG_ERASE_GROUP_START   35
#define SD_CARD_CMD_TAG_ERASE_GROUP_END   36
#define SD_CARD_CMD_UNTAG_ERASE_GROUP   37
#define SD_CARD_CMD_ERASE   38
#define SD_CARD_CMD_LOCK_UNLOCK   42
#define SD_CARD_CMD_APP_CMD   55
#define SD_CARD_CMD_GEN_CND   56
#define SD_CARD_CMD_READ_OCR   58
#define SD_CARD_CMD_CRC_ON_OFF   59
Application Commands
#define SD_CARD_ACMD_SD_SEND_OP_COND   41
Command Flags
#define SD_CARD_FLAG_HCS   0x40000000U
#define SD_CARD_FLAG_VHS_2_7_TO_3_3   0x00000100U
#define SD_CARD_FLAG_CHECK_PATTERN   0x000000aaU
Command Fields
#define SD_CARD_COMMAND_SET_COMMAND(c, cmd)
#define SD_CARD_COMMAND_SET_ARGUMENT(c, arg)
#define SD_CARD_COMMAND_SET_CRC7(c, crc7)
#define SD_CARD_COMMAND_GET_CRC7(c)
Response Fields
#define SD_CARD_IS_RESPONSE(r)
#define SD_CARD_IS_ERRORLESS_RESPONSE(r)
#define SD_CARD_IS_NOT_IDLE_RESPONSE(r)
#define SD_CARD_IS_DATA_ERROR(r)
#define SD_CARD_IS_DATA_REJECTED(r)
Card Identification
#define SD_CARD_CID_SIZE   16
#define SD_CARD_CID_GET_MID(cid)
#define SD_CARD_CID_GET_OID(cid)
#define SD_CARD_CID_GET_PNM(cid, i)
#define SD_CARD_CID_GET_PRV(cid)
#define SD_CARD_CID_GET_PSN(cid)
#define SD_CARD_CID_GET_MDT(cid)
#define SD_CARD_CID_GET_CRC7(cid)
Card Specific Data
#define SD_CARD_CSD_SIZE   16
#define SD_CARD_CSD_GET_CSD_STRUCTURE(csd)
#define SD_CARD_CSD_GET_SPEC_VERS(csd)
#define SD_CARD_CSD_GET_TAAC(csd)
#define SD_CARD_CSD_GET_NSAC(csd)
#define SD_CARD_CSD_GET_TRAN_SPEED(csd)
#define SD_CARD_CSD_GET_C_SIZE(csd)
#define SD_CARD_CSD_GET_C_SIZE_MULT(csd)
#define SD_CARD_CSD_GET_READ_BLK_LEN(csd)
#define SD_CARD_CSD_GET_WRITE_BLK_LEN(csd)
#define SD_CARD_CSD_1_GET_C_SIZE(csd)
Data Start and Stop Tokens
#define SD_CARD_START_BLOCK_SINGLE_BLOCK_READ   0xfe
#define SD_CARD_START_BLOCK_MULTIPLE_BLOCK_READ   0xfe
#define SD_CARD_START_BLOCK_SINGLE_BLOCK_WRITE   0xfe
#define SD_CARD_START_BLOCK_MULTIPLE_BLOCK_WRITE   0xfc
#define SD_CARD_STOP_TRANSFER_MULTIPLE_BLOCK_WRITE   0xfd

Functions

Integer to and from Byte-Stream Converter
Card Specific Data Functions
CRC functions
Communication Functions
Disk Driver Functions
rtems_status_code sd_card_register (void)

Detailed Description

SD Card LibI2C driver.

Macro Definition Documentation

◆ SD_CARD_CID_GET_CRC7

#define SD_CARD_CID_GET_CRC7 ( cid)
Value:
((cid) [15] >> 1)

◆ SD_CARD_CID_GET_MDT

#define SD_CARD_CID_GET_MDT ( cid)
Value:
((cid) [14])

◆ SD_CARD_CID_GET_MID

#define SD_CARD_CID_GET_MID ( cid)
Value:
((cid) [0])

◆ SD_CARD_CID_GET_OID

#define SD_CARD_CID_GET_OID ( cid)
Value:
sd_card_get_uint16( cid + 1)

◆ SD_CARD_CID_GET_PNM

#define SD_CARD_CID_GET_PNM ( cid,
i )
Value:
((char) (cid) [3 + (i)])

◆ SD_CARD_CID_GET_PRV

#define SD_CARD_CID_GET_PRV ( cid)
Value:
((cid) [9])

◆ SD_CARD_CID_GET_PSN

#define SD_CARD_CID_GET_PSN ( cid)
Value:
sd_card_get_uint32( cid + 10)

◆ SD_CARD_COMMAND_GET_CRC7

#define SD_CARD_COMMAND_GET_CRC7 ( c)
Value:
((c) [6] >> 1)

◆ SD_CARD_COMMAND_SET_ARGUMENT

#define SD_CARD_COMMAND_SET_ARGUMENT ( c,
arg )
Value:
sd_card_put_uint32( (arg), &((c) [2]))

◆ SD_CARD_COMMAND_SET_COMMAND

#define SD_CARD_COMMAND_SET_COMMAND ( c,
cmd )
Value:
(c) [1] = (uint8_t) (0x40 + ((cmd) & 0x3f))

◆ SD_CARD_COMMAND_SET_CRC7

#define SD_CARD_COMMAND_SET_CRC7 ( c,
crc7 )
Value:
((c) [6] = ((crc7) << 1) | 1U)

◆ SD_CARD_CSD_1_GET_C_SIZE

#define SD_CARD_CSD_1_GET_C_SIZE ( csd)
Value:
((((uint32_t) (csd) [7] & 0x3f) << 16) + (((uint32_t) (csd) [8]) << 8) + (uint32_t) (csd) [9])

◆ SD_CARD_CSD_GET_C_SIZE

#define SD_CARD_CSD_GET_C_SIZE ( csd)
Value:
((((uint32_t) (csd) [6] & 0x3) << 10) + (((uint32_t) (csd) [7]) << 2) + ((((uint32_t) (csd) [8]) >> 6) & 0x3))

◆ SD_CARD_CSD_GET_C_SIZE_MULT

#define SD_CARD_CSD_GET_C_SIZE_MULT ( csd)
Value:
((((csd) [9] & 0x3) << 1) + (((csd) [10] >> 7) & 0x1))

◆ SD_CARD_CSD_GET_CSD_STRUCTURE

#define SD_CARD_CSD_GET_CSD_STRUCTURE ( csd)
Value:
((csd) [0] >> 6)

◆ SD_CARD_CSD_GET_NSAC

#define SD_CARD_CSD_GET_NSAC ( csd)
Value:
((uint32_t) (csd) [2])

◆ SD_CARD_CSD_GET_READ_BLK_LEN

#define SD_CARD_CSD_GET_READ_BLK_LEN ( csd)
Value:
((uint32_t) (csd) [5] & 0xf)

◆ SD_CARD_CSD_GET_SPEC_VERS

#define SD_CARD_CSD_GET_SPEC_VERS ( csd)
Value:
(((csd) [0] >> 2) & 0xf)

◆ SD_CARD_CSD_GET_TAAC

#define SD_CARD_CSD_GET_TAAC ( csd)
Value:
((csd) [1])

◆ SD_CARD_CSD_GET_TRAN_SPEED

#define SD_CARD_CSD_GET_TRAN_SPEED ( csd)
Value:
((csd) [3])

◆ SD_CARD_CSD_GET_WRITE_BLK_LEN

#define SD_CARD_CSD_GET_WRITE_BLK_LEN ( csd)
Value:
((((uint32_t) (csd) [12] & 0x3) << 2) + ((((uint32_t) (csd) [13]) >> 6) & 0x3))

◆ SD_CARD_INVALIDATE_RESPONSE_INDEX

#define SD_CARD_INVALIDATE_RESPONSE_INDEX ( e)
Value:
e->response_index = SD_CARD_COMMAND_SIZE
#define SD_CARD_COMMAND_SIZE
Definition spi-sd-card.h:54
unsigned e
Definition tlb.h:13

◆ SD_CARD_IS_DATA_ERROR

#define SD_CARD_IS_DATA_ERROR ( r)
Value:
(((r) & 0xe0) == 0)

◆ SD_CARD_IS_DATA_REJECTED

#define SD_CARD_IS_DATA_REJECTED ( r)
Value:
(((r) & 0x1f) != 0x05)

◆ SD_CARD_IS_ERRORLESS_RESPONSE

#define SD_CARD_IS_ERRORLESS_RESPONSE ( r)
Value:
(((r) & 0x7e) == 0)

◆ SD_CARD_IS_NOT_IDLE_RESPONSE

#define SD_CARD_IS_NOT_IDLE_RESPONSE ( r)
Value:
(((r) & 0x81) == 0)

◆ SD_CARD_IS_RESPONSE

#define SD_CARD_IS_RESPONSE ( r)
Value:
(((r) & 0x80) == 0)