Диаграмму инициализации для различных типов карт я где-то приводил в этой теме. Там несколько посложнее, чем в статье. Разные типы инициализируются по-разному и определение их типов тоже отдельное веселье. Но карта у вас инициализирована, иначе не выдала бы размер.Совпадает ли инициализация с примером?
Вот она:
Его там нет. Поскольку я решил реализовать всё честно, то CRC считается автоматически.Я не вижу где CRC 0х95?
Это и есть её истинный размер.И всегда одинаковый при любых экспериментах. 29 МБ
То есть, сектор считался верно первый раз, но слетел на втором чтении. Интересно.eb 0 ef
А впишите-ка вот такое в fat.c:
uint32_t GetByte(uint32_t offset)
{
offset+=FATOffset;
uint32_t s=offset>>8UL;//делим на 256
if (s!=LastReadSector)
{
LastReadSector=s;
bool first=true;
if ((offset&0x1ffUL)>=256) first=false;
if (SD_ReadBlock(s>>1UL,Sector,first)==false)
{
sprintf(String,"E:%lu O:%lu",offset,s>>1UL);
WH1602_SetTextDownLine(String);
_delay_ms(5000);
WH1602_SetTextDownLine("");
}
//ошибки не проверяем, всё равно ничего сделать не сможем - либо работает, либо нет
}
return(Sector[offset&0xFFUL]);
}
Посмотрим, нет ли моментов, где ошибка чтения.


