NAME

   Device::Chip::SDCard - chip driver for SD and MMC cards

SYNOPSIS

    use Device::Chip::SDCard;

    my $card = Device::Chip::SDCard->new;

    $card->mount( Device::Chip::Adapter::...->new )->get;

    $card->initialise->get;

    my $bytes = $card->read_block( 0 )->get;

    print "Read block zero:\n";
    printf "%v02X\n", $bytes;

DESCRIPTION

   This Device::Chip subclass provides specific communication to an SD or
   MMC storage card attached via an SPI adapter.

   At present it only supports MMC and SDSC ("standard capacity") cards,
   not SDHC or SDXC.

METHODS

   The following methods documented with a trailing call to ->get return
   Future instances.

initialise

      $card->initialise->get

   Checks that an SD card is present, switches it into SPI mode and waits
   for its initialisation process to complete.

size

      $n_bytes = $card->size->get

   Returns the size of the media card in bytes.

read_csd

      $data = $card->read_csd->get;

   Returns a HASH reference containing decoded fields from the SD card's
   CSD ("card-specific data") register.

   This hash will contain the following fields:

      TAAC
      NSAC
      TRAN_SPEED
      CCC
      READ_BL_LEN
      READ_BL_LEN_PARTIAL
      WRITE_BLK_MISALIGN
      READ_BLK_MISALIGN
      DSR_IMP
      C_SIZE
      VDD_R_CURR_MIN
      VDD_R_CURR_MAX
      VDD_W_CURR_MIN
      VDD_W_CURR_MAX
      C_SIZE_MULT
      ERASE_BLK_EN
      SECTOR_SIZE
      WP_GRP_SIZE
      WP_GRP_ENABLE
      R2W_FACTOR
      WRITE_BL_LEN
      WRITE_BL_PARTIAL
      FILE_FORMAT_GRP
      COPY
      PERM_WRITE_PROTECT
      TEMP_WRITE_PROTECT
      FILE_FORMAT

   The hash will also contain the following calculated fields, derived
   from the decoded fields above for convenience of calling code.

      blocks          # number of blocks implied by C_SIZE / C_SIZE_MULT
      bytes           # number of bytes of storage, implied by blocks and READ_BL_LEN

read_ocr

      $fields = $card->read_ocr->get

   Returns a HASH reference containing decoded fields from the card's OCR
   ("operating conditions register").

   This hash will contain the following fields:

      BUSY
      CCS
      UHS_II
      1V8_ACCEPTED
      3V5, 3V4, 3V3, ..., 2V7

read_block

      $bytes = $card->read_block( $lba )->get

   Returns a 512-byte bytestring containing data read from the given
   sector of the card.

TODO

     * Support block writing.

     * Support the different initialisation sequence (and block size
     requirements) of SDHC cards.

AUTHOR

   Paul Evans <[email protected]>