Доброго времени суток, товарищи программисты. Тема имеет посредственное отношение к AVR, но не нашелся куда еще написать (надеюсь модераторы поправят если что)
Ситуация следующая: имею плату с ATMega88, к которой прикручен разъем под микро SD карту (подключение по SPI, питание 3.3 В вся плата). Пользуясь разными источниками, накидал функции инициализации карточки и чтения блоков (запись пока не очень интересует). Вставляю отформатированную виндой в FAT32 флешку на 32 Гб. Инициализация проходит успешно, карта переходит в режим Idle, затем возвращает, что инициализирована и флаг HC, то есть до этого момента всё ожидаемо.
Далее считываю блок по адресу 0, отправляю по UART буфер для контроля, сравниваю с тем, что прочел с этой же карты с помощью программы HxD, и данные отличаются. Причем очень. Более того, я выполнил поиск полученных данных по всей карте, и нашел этот кусок данных совсем в другом блоке, причем со смещением. То есть данные, которые идут в начале полученного по UART блока, располагаются совсем в другом блоке и не с нулевого смещения. Но что больше всего меня вводит в ступор, полученный по UART блок данных заканчивается стандартным 55 AA 😵
Резюмирую: Считанный авркой блок 512 байт по адресу 0: [кусок 1] [кусок 2] [55 AA]. Считанный HxD блок 512 байт по адресу не 0: [кусок ?] [кусок 1] [кусок ?] [55 AA].
Вставлял другую карту на 16 Гб, ситуация повторилась, правда я не искал полученные данные по всей карте. Но данные отличались.
В симуляторе Proteus работает нормально, правда образ SD я ему подсовывал полученный в WinImage объемом в несколько десятков Мб.
Пробовал взять готовый пример с SD картой, как есть откомпилил залил, всё тоже самое.
Есть у кого нибудь мысли, как такое может быть? Я мог бы понять проблему со смещениями при передачи адреса блока, но я считываю нулевой блок, как ни крути, но это должно быть самое начало памяти карты.