Это самое главное![]()
Хотя, эта мега паяльником тоже паяется )
Мигание означает, что либо нету связи с картой, либо что то не нравится.
sd_check()
Код:/************************************************************************** * Проверка готовности/наличия карты * **************************************************************************/ BYTE sd_check() { BYTE i = 0; do { sd_sendCommand(APP_CMD, 0); if(sd_sendCommand(SD_SEND_OP_COND, 0x40000000) == 0) return 0; } while(--i); return 1; }[свернуть]
fs_check()
Код:/************************************************************************** * Проверка наличия диска и если нужно, то его инициализация * **************************************************************************/ BYTE fs_check() { if(!sd_check()) return 0; return fs_init(); }[свернуть]
fs_init()
Код:/************************************************************************** * Инициализация * **************************************************************************/ BYTE fs_init() { DWORD bsect, fsize, tsect; /* Сбрасываем оптимизацию */ fs_fatoptim = 2; /* Предотвращаем ошибки программиста */ #ifndef FS_DISABLE_CHECK fs_file.opened = OPENED_NONE; #ifndef FS_DISABLE_SWAP fs_secondFile.opened = OPENED_NONE; #endif fs_type = FS_ERROR; #endif /* Инициализация накопителя */ if(sd_init()) return 1; /* Ищем файловую систему */ bsect = 0; while(1) { if(sd_readBuf(bsect)) return 1; if(LD_WORD(buf + 510) == 0xAA55) { if(LD_WORD(buf + BS_FilSysType ) == 0x4146) break; if(LD_WORD(buf + BS_FilSysType32) == 0x4146) break; /* Возможно это MBR */ if(bsect == 0 && buf[MBR_Table+4]) { bsect = LD_DWORD(buf + (MBR_Table + 8)); if(bsect != 0) continue; } } abort_noFS: lastError = ERR_NO_FILESYSTEM; return 1; } /* Размер таблицы FAT в секторах */ fsize = LD_WORD(buf + BPB_FATSz16); if(fsize == 0) fsize = LD_DWORD(buf + BPB_FATSz32); /* Размер файловой системы в секторах */ tsect = LD_WORD( buf + BPB_TotSec16); if(tsect == 0) tsect = LD_DWORD(buf + BPB_TotSec32); /* Размер корневого каталога (должно быть кратно 16 и для FAT32 должно быть рано нулю) */ fs_n_rootdir = LD_WORD(buf + BPB_RootEntCnt); /* Адреса таблиц FAT в секторах */ fs_fatbase = bsect + LD_WORD(buf + BPB_RsvdSecCnt); fs_fatbase2 = 0; if(buf[BPB_NumFATs] >= 2) fs_fatbase2 = fs_fatbase + fsize; /* Кол-во секторов на кластер */ fs_csize = buf[BPB_SecPerClus]; /* Кол-во кластеров */ fsize *= buf[BPB_NumFATs]; fs_n_fatent = (tsect - LD_WORD(buf + BPB_RsvdSecCnt) - fsize - fs_n_rootdir / 16) / fs_csize + 2; /* Адрес 2-ого кластера */ fs_database = fs_fatbase + fsize + fs_n_rootdir / 16; /* Определение файловой системы */ /* FAT 12 */ if(fs_n_fatent < 0xFF7) goto abort_noFS; /* FAT 16 */ if(fs_n_fatent < 0xFFF7) { fs_dirbase = fs_fatbase + fsize; fs_type = FS_FAT16; return 0; } /* FAT 32 */ fs_dirbase = LD_DWORD(buf + BPB_RootClus); /* Сбрасываем счетчик свободного места */ if(LD_WORD(buf + BPB_RsvdSecCnt)>0) { bsect++; if(sd_readBuf(bsect)) return 1; if(LD_DWORD(buf) == 0x41615252 && LD_DWORD(buf + 0x1E4) == 0x61417272 && LD_DWORD(buf + 0x1FC) == 0xAA550000) { LD_DWORD(buf + 0x1E8) = 0xFFFFFFFF; LD_DWORD(buf + 0x1EC) = 0xFFFFFFFF; if(sd_writeBuf(bsect)) return 1; } } fs_type = FS_FAT32; return 0; }[свернуть]
- - - Добавлено - - -
Не забывайте, что прошивка у них разная.





wtf
Ответить с цитированием