Сообщение от Erema36
(1)теория.
Контроллер работает с памятью большими блоками (512, 1024, 2048 и т.д. страниц).
Каждая страница состоит из полезных данных и служебных (512+16, 512+24, 4096+128(K9GAG08U0M) это 512х8+16х8, 4304 = (512+26)*8 или посложнее (512+26)*2/(512+28)*6/4).
|
Не стал цитировать весь пост. Но фактически всё правильно! Наверное первый человек, начавший писать в данной теме по существу =)))
В факе мы не стали расписывать все эти тонкости, т.к. не собираемся писать диссертацию для нубов, а написали инструкцию для более-менее разбирающихся в пайке, микросхемах и радиосхемах, а значит готовым взяться за это дело. Им должно быть и так известно про такие технические подробности.
Конечно же, разобрав карту и обнаружив можель микросхемы, первым делом необходимо ознакомится со спецификацией данного чипа.
Ну а кто никогда не держал в руках паяльник, не собирал хотя бы простейших схем, никогда не программировал микрухи и не в курсе, что такое даташит и считает, что здесь всё так просто - тот всё-таки сильно ошибается )))
Хотя, начинать никогда не поздно, как раз хороший повод бежать в магазин за паяльной станцией с феном или термопинцетом, потому что без неё "ансолдеринг" и "солдеринг" будет ох как затруднительным ))), ну и заодно стоит подкупить немного
флюса,
оплётку и
мозговой жидкости.
Немного стоит уточнить понятия страниц, секторов и блоков.
На примере
Hynix HY27UH08AG5M, упоминающейся в факе.
- 1 сектор = занимает 512 байт + данные позиционирования сектора и контрольная сумма ECC (16 байт) в конце каждого сектора.
- 1 страница = это 4 сектора со своими служебными данными, т.е. 2048 байт + 64 служебных байта = 2112 байт. Это как раз минимальное значение, которое умеет считывать и писать данный чип по даташиту.
- 1 блок = 8 страниц или 32 сектора, конечно же вместе с техническими данными. 16384 +512 = 16896 байт или 16,5 килобайт. Это минимальное значение, с которым должен уметь работать контроллёр (чтение/запись), используемый в данной области применения.
А так же, достоверно известно, что в один и тот же блок не может быть записано 2 разных файла/кода данных. Если в начало блока попадает конец файла/кода данных (даже 1 или несколько байт) из предыдущего блока, то следующий файл/код данных начинает писаться только со следующего блока, заполнив неполностью использованный блок значениями FFFFFFFF...
Конечно в разных микросхемах спецификации страниц и блоков может разниться, но чаще всего, в области PSP, её нанде и картах памяти, я постоянно встречаю именно такую структуру.
Если что не так, поправьте, могу и ошибаться.
Короче, самая малая проблема состоит в правильном демонтаже и пайке.
Но самая главная проблема - именно в этих коррекционных 16-ти байтах, которые записаны в конце каждого сектора и подтверждают его целостность. А так как мы заменяем ID номер (фактически 4 уникальных байта) в определённом секторе, не пересчитывая заново контрольную сумму изменившихся данных, отсюда и происходит большой процент брака, т.к. контроллёр отбраковывает данный сектор или даже весь блок (?). Вот с этим и надо разобраться.
Если писать через контроллёр (т.е. логическим способом), то конечно он сам подсчитает и скорректирует нужную контрольную сумму. Но для этого нужно знать команду записи MSID и написать программу. Другой вариант - считать логический блок, сменить ID и обратно записать этот блок с помощью программы, но опять же, нужно знать номер блока и команду записи. Это самый верный вариант, но пока затруднительный. Команды вроде даже есть у нас и мы об этом варианте задумывались, вон
Yoti чешет репу, читает каждый день мануалы и коды по MSID Dumper-у, чтобы поменять название программы на Writer
Ну а пока, мы чешем репу, чтобы скорректировать ECC. А получается это пока не совсем корректно, только с помощью поддельных карт памяти, в которых, по нашему мнению, именно эта ECC умышленно не учитывается или просто контроллёр на эти 4 изменившихся байта закрывает глаза.