#ifndef SD_CARD_RAW_H
#define	SD_CARD_RAW_H

#ifdef	__cplusplus
extern "C" {
#endif

#include "sd_card_raw_cfg.h"

#define SD_CARD_BLOCK_SIZE              (512)

/**
 * Initialize the SD or SDHC card
 */
void SD_Card_Initialize(void);

/**
 * Write a block of 512 bytes to the SD card
 * @param loc - address in bytes (SD) or in block units (SDHC)
 *              Normal SD:
 *              address 0 -> block from 0 to 511
 *              address 512 -> block from 512 to 1023
 *              address 5120 -> block from 5120 to 5631
 *              SDHC:
 *              address 0 -> block from 0 to 511
 *              address 1 -> block from 512 to 1023
 *              address 10 -> block from 5120 to 5631
 * @param data - 512 bytes array
 */
void SD_Card_Write(uint32_t loc, uint8_t* data);

/**
 * Read a block of 512 bytes from the SD card
 * @param loc - address in bytes (SD) or in block units (SDHC)
 *              Normal SD:
 *              address 0 -> block from 0 to 511
 *              address 512 -> block from 512 to 1023
 *              address 5120 -> block from 5120 to 5631
 *              SDHC:
 *              address 0 -> block from 0 to 511
 *              address 1 -> block from 512 to 1023
 *              address 10 -> block from 5120 to 5631
 * @param data - 512 bytes array
 */
void SD_Card_Read(uint32_t loc, uint8_t* data);

#ifdef	__cplusplus
}
#endif

#endif	/* SD_CARD_RAW_H */

