Soldered SD Card Arduino Library 1.0.0
Easily read and write files to and form the SD card breakout! A fork of the original SDFat library by Bill Greiman.
Loading...
Searching...
No Matches
SdioTeensy.cpp File Reference

Functions

static bool cardCommand (uint32_t xfertyp, uint32_t arg)
 
static void enableGPIO (bool enable)
 
static void enableDmaIrs ()
 
static void initSDHC ()
 
static bool isBusyCMD13 ()
 
static bool isBusyCommandComplete ()
 
static bool isBusyCommandInhibit ()
 
static bool readReg16 (uint32_t xfertyp, void *data)
 
static void setSdclk (uint32_t kHzMax)
 
static bool yieldTimeout (bool(*fcn)())
 
static bool waitDmaStatus ()
 
static bool waitTimeout (bool(*fcn)())
 
static void printRegs (uint32_t line)
 
bool setSdErrorCode (uint8_t code, uint32_t line)
 
static void sdIrs ()
 
static void initClock ()
 
static uint32_t baseClock ()
 
static void gpioMux (uint8_t mode)
 
static bool cardAcmd (uint32_t rca, uint32_t xfertyp, uint32_t arg)
 
static bool cardCMD6 (uint32_t arg, uint8_t *status)
 
static uint32_t statusCMD13 ()
 
static bool isBusyDat ()
 
static bool isBusyDMA ()
 
static bool isBusyFifoRead ()
 
static bool isBusyFifoWrite ()
 
static bool isBusyTransferComplete ()
 
static bool rdWrSectors (uint32_t xfertyp, uint32_t sector, uint8_t *buf, size_t n)
 
static bool transferStop ()
 
static bool waitTransferComplete ()
 

Variables

const uint32_t MAX_BLKCNT = 0XFFFF
 
const uint32_t FIFO_WML = 16
 
const uint32_t CMD8_RETRIES = 3
 
const uint32_t BUSY_TIMEOUT_MICROS = 1000000
 
const uint32_t SDHC_IRQSTATEN_MASK
 
const uint32_t SDHC_IRQSTAT_CMD_ERROR = SDHC_IRQSTAT_CIE | SDHC_IRQSTAT_CEBE | SDHC_IRQSTAT_CCE | SDHC_IRQSTAT_CTOE
 
const uint32_t SDHC_IRQSTAT_DATA_ERROR = SDHC_IRQSTAT_AC12E | SDHC_IRQSTAT_DEBE | SDHC_IRQSTAT_DCE | SDHC_IRQSTAT_DTOE
 
const uint32_t SDHC_IRQSTAT_ERROR = SDHC_IRQSTAT_DMAE | SDHC_IRQSTAT_CMD_ERROR | SDHC_IRQSTAT_DATA_ERROR
 
const uint32_t SDHC_IRQSIGEN_MASK
 
const uint32_t CMD_RESP_NONE = SDHC_XFERTYP_RSPTYP(0)
 
const uint32_t CMD_RESP_R1 = SDHC_XFERTYP_CICEN | SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(2)
 
const uint32_t CMD_RESP_R1b = SDHC_XFERTYP_CICEN | SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(3)
 
const uint32_t CMD_RESP_R2 = SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(1)
 
const uint32_t CMD_RESP_R3 = SDHC_XFERTYP_RSPTYP(2)
 
const uint32_t CMD_RESP_R6 = CMD_RESP_R1
 
const uint32_t CMD_RESP_R7 = CMD_RESP_R1
 
const uint32_t DATA_READ = SDHC_XFERTYP_DTDSEL | SDHC_XFERTYP_DPSEL
 
const uint32_t DATA_READ_DMA = DATA_READ | SDHC_XFERTYP_DMAEN
 
const uint32_t DATA_READ_MULTI_DMA = DATA_READ_DMA | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_AC12EN | SDHC_XFERTYP_BCEN
 
const uint32_t DATA_READ_MULTI_PGM = DATA_READ | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_BCEN
 
const uint32_t DATA_WRITE_DMA = SDHC_XFERTYP_DPSEL | SDHC_XFERTYP_DMAEN
 
const uint32_t DATA_WRITE_MULTI_DMA = DATA_WRITE_DMA | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_AC12EN | SDHC_XFERTYP_BCEN
 
const uint32_t DATA_WRITE_MULTI_PGM = SDHC_XFERTYP_DPSEL | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_BCEN
 
const uint32_t SDHC_MIX_CTRL_MASK
 
const uint32_t ACMD6_XFERTYP = SDHC_XFERTYP_CMDINX(ACMD6) | CMD_RESP_R1
 
const uint32_t ACMD41_XFERTYP = SDHC_XFERTYP_CMDINX(ACMD41) | CMD_RESP_R3
 
const uint32_t CMD0_XFERTYP = SDHC_XFERTYP_CMDINX(CMD0) | CMD_RESP_NONE
 
const uint32_t CMD2_XFERTYP = SDHC_XFERTYP_CMDINX(CMD2) | CMD_RESP_R2
 
const uint32_t CMD3_XFERTYP = SDHC_XFERTYP_CMDINX(CMD3) | CMD_RESP_R6
 
const uint32_t CMD6_XFERTYP = SDHC_XFERTYP_CMDINX(CMD6) | CMD_RESP_R1 | DATA_READ_DMA
 
const uint32_t CMD7_XFERTYP = SDHC_XFERTYP_CMDINX(CMD7) | CMD_RESP_R1b
 
const uint32_t CMD8_XFERTYP = SDHC_XFERTYP_CMDINX(CMD8) | CMD_RESP_R7
 
const uint32_t CMD9_XFERTYP = SDHC_XFERTYP_CMDINX(CMD9) | CMD_RESP_R2
 
const uint32_t CMD10_XFERTYP = SDHC_XFERTYP_CMDINX(CMD10) | CMD_RESP_R2
 
const uint32_t CMD11_XFERTYP = SDHC_XFERTYP_CMDINX(CMD11) | CMD_RESP_R1
 
const uint32_t CMD12_XFERTYP = SDHC_XFERTYP_CMDINX(CMD12) | CMD_RESP_R1b | SDHC_XFERTYP_CMDTYP(3)
 
const uint32_t CMD13_XFERTYP = SDHC_XFERTYP_CMDINX(CMD13) | CMD_RESP_R1
 
const uint32_t CMD17_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD17) | CMD_RESP_R1 | DATA_READ_DMA
 
const uint32_t CMD18_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD18) | CMD_RESP_R1 | DATA_READ_MULTI_DMA
 
const uint32_t CMD18_PGM_XFERTYP = SDHC_XFERTYP_CMDINX(CMD18) | CMD_RESP_R1 | DATA_READ_MULTI_PGM
 
const uint32_t CMD24_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD24) | CMD_RESP_R1 | DATA_WRITE_DMA
 
const uint32_t CMD25_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD25) | CMD_RESP_R1 | DATA_WRITE_MULTI_DMA
 
const uint32_t CMD25_PGM_XFERTYP = SDHC_XFERTYP_CMDINX(CMD25) | CMD_RESP_R1 | DATA_WRITE_MULTI_PGM
 
const uint32_t CMD32_XFERTYP = SDHC_XFERTYP_CMDINX(CMD32) | CMD_RESP_R1
 
const uint32_t CMD33_XFERTYP = SDHC_XFERTYP_CMDINX(CMD33) | CMD_RESP_R1
 
const uint32_t CMD38_XFERTYP = SDHC_XFERTYP_CMDINX(CMD38) | CMD_RESP_R1b
 
const uint32_t CMD55_XFERTYP = SDHC_XFERTYP_CMDINX(CMD55) | CMD_RESP_R1
 
static bool(* m_busyFcn )()=0
 
static bool m_initDone = false
 
static bool m_version2
 
static bool m_highCapacity
 
static bool m_transferActive = false
 
static uint8_t m_errorCode = SD_CARD_ERROR_INIT_NOT_CALLED
 
static uint32_t m_errorLine = 0
 
static uint32_t m_rca
 
static volatile bool m_dmaBusy = false
 
static volatile uint32_t m_irqstat
 
static uint32_t m_sdClkKhz = 0
 
static uint32_t m_ocr
 
static cid_t m_cid
 
static csd_t m_csd
 

Function Documentation

◆ baseClock()

static uint32_t baseClock ( )
static

◆ cardAcmd()

static bool cardAcmd ( uint32_t  rca,
uint32_t  xfertyp,
uint32_t  arg 
)
static

◆ cardCMD6()

static bool cardCMD6 ( uint32_t  arg,
uint8_t *  status 
)
static

◆ cardCommand()

static bool cardCommand ( uint32_t  xfertyp,
uint32_t  arg 
)
static

◆ enableDmaIrs()

static void enableDmaIrs ( )
static

◆ enableGPIO()

static void enableGPIO ( bool  enable)
static

◆ gpioMux()

static void gpioMux ( uint8_t  mode)
static

◆ initClock()

static void initClock ( )
static

◆ initSDHC()

static void initSDHC ( )
static

◆ isBusyCMD13()

static bool isBusyCMD13 ( )
static

◆ isBusyCommandComplete()

static bool isBusyCommandComplete ( )
static

◆ isBusyCommandInhibit()

static bool isBusyCommandInhibit ( )
static

◆ isBusyDat()

static bool isBusyDat ( )
static

◆ isBusyDMA()

static bool isBusyDMA ( )
static

◆ isBusyFifoRead()

static bool isBusyFifoRead ( )
static

◆ isBusyFifoWrite()

static bool isBusyFifoWrite ( )
static

◆ isBusyTransferComplete()

static bool isBusyTransferComplete ( )
static

◆ printRegs()

static void printRegs ( uint32_t  line)
static

◆ rdWrSectors()

static bool rdWrSectors ( uint32_t  xfertyp,
uint32_t  sector,
uint8_t *  buf,
size_t  n 
)
static

◆ readReg16()

static bool readReg16 ( uint32_t  xfertyp,
void *  data 
)
static

◆ sdIrs()

static void sdIrs ( )
static

◆ setSdclk()

static void setSdclk ( uint32_t  kHzMax)
static

◆ setSdErrorCode()

bool setSdErrorCode ( uint8_t  code,
uint32_t  line 
)
inline

◆ statusCMD13()

static uint32_t statusCMD13 ( )
static

◆ transferStop()

static bool transferStop ( )
static

◆ waitDmaStatus()

static bool waitDmaStatus ( )
static

◆ waitTimeout()

static bool waitTimeout ( bool(*)()  fcn)
static

◆ waitTransferComplete()

static bool waitTransferComplete ( )
static

◆ yieldTimeout()

static bool yieldTimeout ( bool(*)()  fcn)
static

Variable Documentation

◆ ACMD41_XFERTYP

const uint32_t ACMD41_XFERTYP = SDHC_XFERTYP_CMDINX(ACMD41) | CMD_RESP_R3

◆ ACMD6_XFERTYP

const uint32_t ACMD6_XFERTYP = SDHC_XFERTYP_CMDINX(ACMD6) | CMD_RESP_R1

◆ BUSY_TIMEOUT_MICROS

const uint32_t BUSY_TIMEOUT_MICROS = 1000000

◆ CMD0_XFERTYP

const uint32_t CMD0_XFERTYP = SDHC_XFERTYP_CMDINX(CMD0) | CMD_RESP_NONE

◆ CMD10_XFERTYP

const uint32_t CMD10_XFERTYP = SDHC_XFERTYP_CMDINX(CMD10) | CMD_RESP_R2

◆ CMD11_XFERTYP

const uint32_t CMD11_XFERTYP = SDHC_XFERTYP_CMDINX(CMD11) | CMD_RESP_R1

◆ CMD12_XFERTYP

const uint32_t CMD12_XFERTYP = SDHC_XFERTYP_CMDINX(CMD12) | CMD_RESP_R1b | SDHC_XFERTYP_CMDTYP(3)

◆ CMD13_XFERTYP

const uint32_t CMD13_XFERTYP = SDHC_XFERTYP_CMDINX(CMD13) | CMD_RESP_R1

◆ CMD17_DMA_XFERTYP

const uint32_t CMD17_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD17) | CMD_RESP_R1 | DATA_READ_DMA

◆ CMD18_DMA_XFERTYP

const uint32_t CMD18_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD18) | CMD_RESP_R1 | DATA_READ_MULTI_DMA

◆ CMD18_PGM_XFERTYP

const uint32_t CMD18_PGM_XFERTYP = SDHC_XFERTYP_CMDINX(CMD18) | CMD_RESP_R1 | DATA_READ_MULTI_PGM

◆ CMD24_DMA_XFERTYP

const uint32_t CMD24_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD24) | CMD_RESP_R1 | DATA_WRITE_DMA

◆ CMD25_DMA_XFERTYP

const uint32_t CMD25_DMA_XFERTYP = SDHC_XFERTYP_CMDINX(CMD25) | CMD_RESP_R1 | DATA_WRITE_MULTI_DMA

◆ CMD25_PGM_XFERTYP

const uint32_t CMD25_PGM_XFERTYP = SDHC_XFERTYP_CMDINX(CMD25) | CMD_RESP_R1 | DATA_WRITE_MULTI_PGM

◆ CMD2_XFERTYP

const uint32_t CMD2_XFERTYP = SDHC_XFERTYP_CMDINX(CMD2) | CMD_RESP_R2

◆ CMD32_XFERTYP

const uint32_t CMD32_XFERTYP = SDHC_XFERTYP_CMDINX(CMD32) | CMD_RESP_R1

◆ CMD33_XFERTYP

const uint32_t CMD33_XFERTYP = SDHC_XFERTYP_CMDINX(CMD33) | CMD_RESP_R1

◆ CMD38_XFERTYP

const uint32_t CMD38_XFERTYP = SDHC_XFERTYP_CMDINX(CMD38) | CMD_RESP_R1b

◆ CMD3_XFERTYP

const uint32_t CMD3_XFERTYP = SDHC_XFERTYP_CMDINX(CMD3) | CMD_RESP_R6

◆ CMD55_XFERTYP

const uint32_t CMD55_XFERTYP = SDHC_XFERTYP_CMDINX(CMD55) | CMD_RESP_R1

◆ CMD6_XFERTYP

const uint32_t CMD6_XFERTYP = SDHC_XFERTYP_CMDINX(CMD6) | CMD_RESP_R1 | DATA_READ_DMA

◆ CMD7_XFERTYP

const uint32_t CMD7_XFERTYP = SDHC_XFERTYP_CMDINX(CMD7) | CMD_RESP_R1b

◆ CMD8_RETRIES

const uint32_t CMD8_RETRIES = 3

◆ CMD8_XFERTYP

const uint32_t CMD8_XFERTYP = SDHC_XFERTYP_CMDINX(CMD8) | CMD_RESP_R7

◆ CMD9_XFERTYP

const uint32_t CMD9_XFERTYP = SDHC_XFERTYP_CMDINX(CMD9) | CMD_RESP_R2

◆ CMD_RESP_NONE

const uint32_t CMD_RESP_NONE = SDHC_XFERTYP_RSPTYP(0)

◆ CMD_RESP_R1

const uint32_t CMD_RESP_R1 = SDHC_XFERTYP_CICEN | SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(2)

◆ CMD_RESP_R1b

const uint32_t CMD_RESP_R1b = SDHC_XFERTYP_CICEN | SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(3)

◆ CMD_RESP_R2

const uint32_t CMD_RESP_R2 = SDHC_XFERTYP_CCCEN | SDHC_XFERTYP_RSPTYP(1)

◆ CMD_RESP_R3

const uint32_t CMD_RESP_R3 = SDHC_XFERTYP_RSPTYP(2)

◆ CMD_RESP_R6

const uint32_t CMD_RESP_R6 = CMD_RESP_R1

◆ CMD_RESP_R7

const uint32_t CMD_RESP_R7 = CMD_RESP_R1

◆ DATA_READ

const uint32_t DATA_READ = SDHC_XFERTYP_DTDSEL | SDHC_XFERTYP_DPSEL

◆ DATA_READ_DMA

const uint32_t DATA_READ_DMA = DATA_READ | SDHC_XFERTYP_DMAEN

◆ DATA_READ_MULTI_DMA

const uint32_t DATA_READ_MULTI_DMA = DATA_READ_DMA | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_AC12EN | SDHC_XFERTYP_BCEN

◆ DATA_READ_MULTI_PGM

const uint32_t DATA_READ_MULTI_PGM = DATA_READ | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_BCEN

◆ DATA_WRITE_DMA

const uint32_t DATA_WRITE_DMA = SDHC_XFERTYP_DPSEL | SDHC_XFERTYP_DMAEN

◆ DATA_WRITE_MULTI_DMA

const uint32_t DATA_WRITE_MULTI_DMA = DATA_WRITE_DMA | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_AC12EN | SDHC_XFERTYP_BCEN

◆ DATA_WRITE_MULTI_PGM

const uint32_t DATA_WRITE_MULTI_PGM = SDHC_XFERTYP_DPSEL | SDHC_XFERTYP_MSBSEL | SDHC_XFERTYP_BCEN

◆ FIFO_WML

const uint32_t FIFO_WML = 16

◆ m_busyFcn

bool(* m_busyFcn) ()=0 ( )
static

◆ m_cid

cid_t m_cid
static

◆ m_csd

csd_t m_csd
static

◆ m_dmaBusy

volatile bool m_dmaBusy = false
static

◆ m_errorCode

uint8_t m_errorCode = SD_CARD_ERROR_INIT_NOT_CALLED
static

◆ m_errorLine

uint32_t m_errorLine = 0
static

◆ m_highCapacity

bool m_highCapacity
static

◆ m_initDone

bool m_initDone = false
static

◆ m_irqstat

volatile uint32_t m_irqstat
static

◆ m_ocr

uint32_t m_ocr
static

◆ m_rca

uint32_t m_rca
static

◆ m_sdClkKhz

uint32_t m_sdClkKhz = 0
static

◆ m_transferActive

bool m_transferActive = false
static

◆ m_version2

bool m_version2
static

◆ MAX_BLKCNT

const uint32_t MAX_BLKCNT = 0XFFFF

Copyright (c) 2011-2020 Bill Greiman This file is part of the SdFat library for SD memory cards.

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

◆ SDHC_IRQSIGEN_MASK

const uint32_t SDHC_IRQSIGEN_MASK
Initial value:
= SDHC_IRQSIGEN_DMAEIEN | SDHC_IRQSIGEN_AC12EIEN | SDHC_IRQSIGEN_DEBEIEN |
SDHC_IRQSIGEN_DCEIEN | SDHC_IRQSIGEN_DTOEIEN | SDHC_IRQSIGEN_CIEIEN |
SDHC_IRQSIGEN_CEBEIEN | SDHC_IRQSIGEN_CCEIEN | SDHC_IRQSIGEN_CTOEIEN |
SDHC_IRQSIGEN_TCIEN

◆ SDHC_IRQSTAT_CMD_ERROR

const uint32_t SDHC_IRQSTAT_CMD_ERROR = SDHC_IRQSTAT_CIE | SDHC_IRQSTAT_CEBE | SDHC_IRQSTAT_CCE | SDHC_IRQSTAT_CTOE

◆ SDHC_IRQSTAT_DATA_ERROR

const uint32_t SDHC_IRQSTAT_DATA_ERROR = SDHC_IRQSTAT_AC12E | SDHC_IRQSTAT_DEBE | SDHC_IRQSTAT_DCE | SDHC_IRQSTAT_DTOE

◆ SDHC_IRQSTAT_ERROR

const uint32_t SDHC_IRQSTAT_ERROR = SDHC_IRQSTAT_DMAE | SDHC_IRQSTAT_CMD_ERROR | SDHC_IRQSTAT_DATA_ERROR

◆ SDHC_IRQSTATEN_MASK

const uint32_t SDHC_IRQSTATEN_MASK
Initial value:
= SDHC_IRQSTATEN_DMAESEN | SDHC_IRQSTATEN_AC12ESEN | SDHC_IRQSTATEN_DEBESEN |
SDHC_IRQSTATEN_DCESEN | SDHC_IRQSTATEN_DTOESEN | SDHC_IRQSTATEN_CIESEN |
SDHC_IRQSTATEN_CEBESEN | SDHC_IRQSTATEN_CCESEN | SDHC_IRQSTATEN_CTOESEN |
SDHC_IRQSTATEN_DINTSEN | SDHC_IRQSTATEN_TCSEN | SDHC_IRQSTATEN_CCSEN

◆ SDHC_MIX_CTRL_MASK

const uint32_t SDHC_MIX_CTRL_MASK
Initial value:
= SDHC_MIX_CTRL_DMAEN | SDHC_MIX_CTRL_BCEN | SDHC_MIX_CTRL_AC12EN |
SDHC_MIX_CTRL_DDR_EN | SDHC_MIX_CTRL_DTDSEL | SDHC_MIX_CTRL_MSBSEL |
SDHC_MIX_CTRL_NIBBLE_POS | SDHC_MIX_CTRL_AC23EN