Ну вот, думаю посмотрев на картинку ты всё-таки сумеешь в хексе отсчитать 512 байт и увидеть 16 байт ECC в конце каждого сектора
0x200 + 0x10
Нужно вычислить/найти алгоритм подсчёта этой контрольной суммы на сектор.
Собственно там
первые 4 байта указывают на порядковый номер блока, к которому относятся сектора.
Все сектора одного блока имеют этот номер одинаковый.
Блок не может быть разделимым, т.е. не может полблока находиться в одном месте, а другая часть в другом. Он всегда пишется непрерывно.
После 4-ёх байт, ещё идут 2 байта FFFF
Остальные 10 байт и есть контролка.
Можно поступить по другому:- Отпаять память.
- Снять дамп.
- Сохранить сектор 512 байт с изменённым MSID, без контролки, в бинарный файл.
- Припаять микросхему обратно.
- Сделать соединение по USB.
- Записать бинарный файл на карту памяти в корень.
- Отпаять микросхему.
- Снять дамп.
- Найти этот файл.
- Файл то 512 байт, он ровно ляжет в один сектор. Контроллёр сам подсчитает и запишет контрольную сумму на этот сектор. Там только первые 4 байта контролки будут иметь не тот порядковый номер блока.
- Записать этот сектор в исходный дамп, с правильной контролкой и нужным MSID, оставив родные первые 4 байта оригинала.
- Прошить микросхему и впаять на место.
- Сектор с изменённым MSID должен стать легитимным.
Все файлы, программы, музыку, видео, картинки, которые мы копируем по USB на карту памяти логическим способом (обывательски), мгновенно контроллёр пишет в свободные места по порядку и на каждый сектор 512 байт тут же подсчитывает контрольную сумму сам с порядковым номером блока.
Если файл не помещается целиком в свободное место, то контроллёр пропускает это место и пишет в следующее свободное место.
Занятые места посреди карты образуются, если мы заполняем карту памяти до середины или до конца, к примеру, а затем удаляем файлы, записанные ранее. Таким образом, в начале освобождается место, а файлы, записанные позднее, остаются в конце или середине карты памяти.