41#if defined(__FT900__) || defined(__FT930__)
45#include "ft900_sdhost.h"
55static int sd_init = 1;
56static int sd_ready = 0;
61static unsigned long __attribute__ ((aligned (32))) temp[128];
71 if (sd_ready || !sd_init) {
78 if (sdhost_card_detect() != SDHOST_CARD_INSERTED) {
82 if (sdhost_card_init() != SDHOST_OK) {
97 SDHOST_STATUS sdHostStatus;
103 sdHostStatus = sdhost_card_detect();
105 if (sdHostStatus != SDHOST_CARD_INSERTED) {
116 if (sdHostStatus == SDHOST_CARD_REMOVED) {
131 SDHOST_STATUS sdHostStatus = SDHOST_OK;
134 if (((
unsigned int) buff & 3) != 0) {
137 for (i = 0; i < count; i++) {
138 sdHostStatus = sdhost_transfer_data(SDHOST_READ, (
void*) temp,
139 SDHOST_BLK_SIZE, sector);
140 memmove(buff, temp,
sizeof(temp));
142 buff +=
sizeof(temp);
145 sdHostStatus = sdhost_transfer_data(SDHOST_READ, (
void*) buff,
146 SDHOST_BLK_SIZE * count, sector);
149 if (sdHostStatus != SDHOST_OK) {
166 SDHOST_STATUS sdHostStatus = SDHOST_OK;
169 if (((
unsigned int) buff & 3) != 0) {
173 for (i = 0; i < count; i++) {
174 memmove(temp, buff,
sizeof(temp));
175 sdHostStatus = sdhost_transfer_data(SDHOST_WRITE, (
void*) temp,
176 SDHOST_BLK_SIZE, sector);
178 buff +=
sizeof(temp);
181 sdHostStatus = sdhost_transfer_data(SDHOST_WRITE, (
void*) buff,
182 SDHOST_BLK_SIZE * count, sector);
185 if (sdHostStatus != SDHOST_OK) {
202 sdhost_context_t* sd_context = sdhost_get_context();
213 csd = (
BYTE*) &sd_context->CSD[0];
214 if ((csd[14] >> 6) == 1)
219 csize = csd[5] + ((
WORD) csd[6] << 8) + 1;
228 n = (csd[9] & 15) + ((csd[4] & 128) >> 7) + ((csd[5] & 3) << 1) + 2;
229 csize = (csd[6] >> 6) + ((
WORD) csd[7] << 2)
230 + ((
WORD) (csd[8] & 3) << 10) + 1;
244 csd = (
BYTE*) &sd_context->CSD[0];
245 if (sd_context->isSDSCCard ==
false) {
246 unsigned long __attribute__ ((aligned (32))) data[64 / 4];
247 sdhost_get_card_status_reg(data);
249 *(
DWORD*) buff = 16UL << (*((
uint8_t*) data + 10) >> 4);
254 WORD sec_size = (((csd[4] & 63) << 1) + ((
WORD) (csd[3] & 128) >> 7)
257 uint8_t wbl_len_sec = ((csd[1] >> 6) | ((csd[2] & 0x3) << 2)) - 9;
258 *(
DWORD*) buff = sec_size << wbl_len_sec;
266 buff = &sd_context->isSDSCCard;
271 csd = (
BYTE*) &sd_context->CSD[0];
272 for (
int i = 0; i < 16; i++) {
273 *((
BYTE*) buff + i) = *(csd + i);
279 csd = (
BYTE*) &sd_context->CID[0];
280 for (
int i = 0; i < 16; i++) {
281 *((
BYTE*) buff + i) = *(csd + i);
287 csd = (
BYTE*) &sd_context->OCR;
288 for (
int i = 0; i < 4; i++) {
289 *((
BYTE*) buff + i) = *(csd + i);
295 if (sd_context->isSDSCCard ==
false) {
296 uint32_t __attribute__ ((aligned (32))) data[64 / 4];
297 sdhost_get_card_status_reg(data);
298 for (
int i = 0; i < 64; i++) {
299 *((
BYTE*) buff + i) = *((
BYTE*) data + i);
static ft_void_t ft_uint32_t * cmd
DRESULT disk_read(BYTE pdrv, BYTE *buff, LBA_t sector, UINT count)
DSTATUS disk_initialize(BYTE pdrv)
DSTATUS disk_status(BYTE pdrv)
DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff)
DRESULT disk_write(BYTE pdrv, const BYTE *buff, LBA_t sector, UINT count)