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