В массовых моделях роутеров до недавнего времени преобладало полное господство SPI-NOR (serial) флэш-памяти. Она недорога, удобна, и очень стандартизована — в принципе, ее можно менять на платах даже между разными вендорами без каких-либо изменений в софте. В том числе, подобные устройства легко ремонтировать при появлении признаков износа — выпаивание старой, прошив и запайка новой микросхемы занимает пять минут с перекурами. Даже более, на многих моделях изначально разводят контактные площадки сразу и под SOIC-8, и под SOP-16, соединяя одинаковые пины и позволяя ставить любую флешку любого формфактора.
Но кроме преимуществ у SPI-NOR есть и недостатки. В первую очередь, это скорость записи, которая для сравнимого по цене nand выше почти на 2 порядка. Затем идет высокая удельная стоимость, которая к середине 2010-х годов сравняла по стоимости 16 Мбайт serial-NOR и 128 Мбайт parallel-NAND. Это привело к тому, что начинает использоваться более быстрая NAND-память в параллельном варианте. На данный момент parallel NAND активно вытесняется serial NAND, который собрал самые лучшие черты обоих типов флэш-памяти, но о нем здесь разговора не будет — с точки зрения замены чипов все сильно похоже на serial NOR.
Итак, в середине 2010-х годов начинается проникновение parallel-NAND флэш-памяти. С точки зрения износоустойчивости она представляет собой все тот же SLC-тип с 100 000 циклами перезаписи, но с точки зрения софта она изначально выстроена иначе. На NAND-flash допускается наличие видимых пользователю «битых» блоков уже с завода; причем их количество может расти по мере старения микросхемы. Потому применение NAND автоматически влечет за собой использование ECC для проверки данных и систему ремапа «плохих» блоков в «хорошие»; а также их запас на случай замены.
Здесь нужно сделать отступление о том, что логическая организация raw flash в Linux не является ни классическим блочным, ни классическим символьным устройством. Существует особая подсистема MTD (memory technology device). Она принимает на вход микросхему NAND в виде «как есть», то есть массив страниц и блоков (страница — минимально адресуемый для чтения/записи элемент, блок — минимально стираемый элемент; обычно блок заметно больше страницы; типичные значения для микросхем в 128 Мбайт: 2 Кбайт на страницу, 128 Кбайт на блок). Затем mtd внутри себя производит операции, за которые отвечает FTL (flash translation layer), например remap плохих блоков, выравнивание износа (wear leveling), особый стиль стирания — и после этого устройство доступно как «обычное» блочное, навроде жесткого диска.
Также стоит отметить, что алгоритм работы с «плохими» блоками определяется не столько производителем flash-памяти, сколько производителем NAND-контроллера и драйвера. Например, один и тот же чип flash с геометрией страница/oob/блок 2048/64/128K будет совершенно по-разному вести себя с чипсетом RT63368 (контроллер с т.н. BMT-таблицей) и MT7621 (контроллер со skip-листами). Основная заметная разница между BMT и SKIP в том, что SKIP просто помечает и пропускает «плохие» блоки, но при этом не скрывает их из вида. BMT-контроллер же производит прозрачный remap, и наружу никогда «плохие» блоки не выдает, а только их замены из подменного фонда.
Из-за такой очень своеобразной специфики работы для Flash плохо подходят традиционные ФС, особенно журналируемые. Постоянная запись и стирание определенного, строго заданного количества блоков гарантированно выведет их из строя. Поэтому были разработаны как особые ФС (JFFS2, Yaffs2, LogFS, F2FS), так и целые «многослойные» решения (например UBI/UBIFS), которые целиком заменяют весь блочный стек вида «device > device-mapper > lvm > filesystem» на «raw flash > ubi > ubifs (filesystem)», при этом позволяя как эффективно управлять местом, скрывая внутри все сложности FTL навроде wear leveling и обработку «плохих» блоков.
Для работы opkg-раздела в итоге был выбран вариант UBI + UBIFS, поскольку при этом максимально рационально используется ресурс перезаписей flash (ubi сам всегда делает wear leveling), а также слой ubi отвечает за обработу видимых «плохих» блоков.
Но и это еще не все — поскольку при работе с NAND «все начинается с контроллера», это приводит к несовместмости форматов записанного на flash на разных устройствах. Если SPI-NOR flash можно прошить обычным файлом на ПК через программатор, и это в неизменном виде будет работать на устройстве, то в случае с NAND «программатором» является сочетание «драйвер — контроллер SoC — чип», и записанное на ПК через программатор будет представлять собой кашу с точки зрения SoC. Этот вариант flash можно программировать или напрямую с устройства в замкнутом цикле, или (например) через аппаратные отладчики навроде JTAG.
Давайте рассмотрим эту плату:
Казалось бы, что такого особенного? Обычный ZK LTE в виде платы с собственной персоной, ничего необычного (кроме отсутствия модема). Если не переворачивать…
Что это такое сзади? Давайте рассмотрим поближе
Теперь стало понятнее — это сменная панель для корпуса TSOP-48, а именно для микросхем parallel-NAND flash-памяти.
Расмотрим еще, как именно панель крепится к плате:
В «неофициальных» кругах это чудо инженерной мысли получило прозвище «матерь всех NAND», поскольку именно здесь можно запрограммировать NAND в понятном SoC формате.
Чтобы «добить» всю эту историю нужно понять, что процессор должен откуда-то начать загрузку. Да, у него обычно есть выводы, замыкая которые в землю можно выбрать режим flash — SPI NOR / parallel NAND, но от этого не легче. Прочитав нулевую страницу NAND чип увидит только «ff» полностью стертой микросхемы, впадет в осадок и все будет выглядеть как полный кирпич. То есть на устройство нужно записать bootloader, но это невозможно сделать из-за несовместимости форматов, а без него все так и останется кирпичом.
К счастью, именно у чипа RT63368 есть встроенная крохотная ПЗУ с микрозагрузчиком. Загрузившись в этот recovery режим можно дальше через xmodem передать драйверы RAM и NAND, включить их в работу и, затем передав через xmodem нужные данные корректно запрограммировать их на flash. Очень удобный способ «вытягивания себя за волосы», и особенно удобный для экспериментов с bootloader. Если на 7621 ваши опыты привели к стиранию flash, то кроме JTAG у вас нет никаких шансов; в случае с 63368 достаточно загрузиться в recovery-режим, записать новый bootloader и продолжить как ни в чем не бывало.
Ну и понятно, что на этапе разработки устройств с NAND это устройство на базе ZKLTE очень сильно помогло с разметкой и программированием parallel NAND flash.
Все это было написано, чтобы стало максимально понятно, что постоянная мелкая запись на flash — это очень вредно, и ее нужно минимизировать. Если нужен log — лучше разместить его в /tmp. Размещение БД на flash тоже не самая лучшая идея. А в связи с тем, что замена parallel NAND малореальна, то и «убитая» flash остается такой навсегда — до смены устройства. К частью, это касается только испорченных разделов, соседние этому не подвержены. И что радует еще сильнее — новые модели оснащаются уже SPI-NAND, который восстаналивается в программаторе в разы лучше.
Современные мобильные гаджеты, повышение быстродействия компьютерных систем и производство недорогих, но быстрых накопителей для хранения большого объема информации напрямую связано с микросхемами памяти.
В быстродействующих устройствах хранения данных используются микросхемы флеш-памяти. Анонсировали их в 1988-89 году, когда компании Intel и Toshiba представили память с архитектурой NOR (Intel) и NAND (Toshiba). Именно вторая разновидность стала наиболее популярной, так как имела больше возможностей для миниатюризации. Почему, сейчас разберемся.
Полевой транзистор с плавающим затвором — основа ячейки памяти
Основой всей технологии флеш-памяти, в том числе и NAND, является полевой транзистор с плавающим затвором. В общем случае его структура выглядит так:
Перед нами обычный полевой транзистор, у которого, помимо управляющего, появился еще один затвор. Так вот в этом затворе, называющемся «плавающий», как раз и кроется вся особенность технологии.
Дело в том, что этот затвор и полупроводник, представляющий собой канал транзистора между стоком и истоком, разделяет тонкий слой диэлектрика. Электроны при воздействии положительного напряжения к затвору, смогут не только направиться по своему обычному пути внутри полупроводника, но и «перескочить» с помощью инжекции или туннелирования через слой диэлектрика в плавающий затвор.
Разумеется, так смогут сделать не все электроны, а только их часть — те, которые получили большую энергию. При этом они не пробивают слой диэлектрика в физическом смысле, а в соответствии со своими квантово-волновыми свойствами «перепрыгивают» сразу в плавающий затвор. Вернуться обратно «перепрыгнувшие» электроны не могут, так как у них для этого не хватает энергии.
То есть, мы можем подать напряжение и тем самым «затащить» электроны в плавающий затвор. Они там останутся, когда мы включим транзистор в следующий раз — заряд, сосредоточенный на плавающем затворе окажет влияние на расположенный под ними канал между стоком и истоком: пропустит или не пропустит ток через транзистор независимо от напряжения на управляющем затворе. В самом простом случае мы получаем два состояния — ток есть или тока нет. Ноль и единицу. Что нам и требовалось.
Причем это состояние может сохраняться достаточно долго. Конечно, это время не бесконечно. Постепенно заряд на «плавающем» затворе потеряется. Но этого времени вполне достаточно для хранения информации в реальных условиях применения, так как речь идет о годах.
Разумеется, записанную информацию, то есть, заряд на плавающем затворе, можно стереть. Для этого достаточно подать на управляющий затвор напряжение обратной полярности, чтобы электроны смогли покинуть плавающий затвор и вернулись в проводящий канал транзистора. До этого времени заряд и логическое состояние транзистора сохраняется из-за того, что энергии электронов недостаточно для преодоления потенциального и физического барьера в виде тонкого слоя диэлектрика.
В процессе развития и миниатюризации технология изготовления полевых транзисторов с плавающим затвором менялась и совершенствовалась. Если первые элементы памяти создавали в планарном виде на поверхности кристалла, то сейчас используется технология 3D NAND или V-NAND (разные маркетинговые названия), в которой структура транзистора сформирована не на горизонтальной плоскости, а на вертикальной. Это позволяет экономить площадь и увеличивать объем памяти, который размещается в одной микросхеме. Принцип работы транзистора при этом остается прежним.
Кроме того, сейчас используют не только металлические плавающие затворы. Появились технологии изготовления кристаллов микросхем, повышающие их надежность и позволяющие удерживать заряд в течение большего времени. Например, компания Samsung использует для захвата зарядов и работы в качестве «плавающего затвора» изолированные области из непроводящего материала нитрида кремния SiN. Они называются 3D Charge Trap Flash — «ловушки заряда». Их применение увеличивает срок хранения заряда, а, следовательно, и информации в ячейке, а также делает микросхемы экономичнее в плане энергопотребления.
NAND и NOR ячейки памяти — как они работают
Транзисторы с плавающим затвором соединяются в матрицы, хранящие слова данных по нужным адресам, разными способами. Основными являются NAND и NOR. Эти аббревиатуры представляют собой сокращения словосочетаний «Not AND» и «Not OR» — соответственно «И-НЕ» и «ИЛИ-НЕ».
Схематично способ построения матриц в двух случаях выглядит так:
Как видите из представленных схем, построение матрицы по схеме NOR удобно тем, что можно просто получить доступ к любой конкретной ячейке и записать информацию именно в нее. В случае с NAND несколько одиночных ячеек памяти соединены последовательно и для того, чтобы записать состояние «ноля» в одну из них, надо, чтобы все другие были открыты и пропускали ток.
Именно по этой причине стирание информации в микросхемы NAND-памяти производится поблочно, а для того, чтобы записать новые данные, обновляют информацию сразу для множества ячеек (осуществляют запись «постранично»). Но зато такая схемотехника позволила значительно упростить топологию и сократить размеры ячеек памяти на кристалле. Поэтому в современной микроэлектронике именно NAND-память является основной. И когда вы покупаете новый SSD-диск, то в нем стоят именно микросхемы с NAND-памятью.
Как в одной ячейке удается хранить до 4 бит данных
Небольшими размерами преимущества ячеек NAND-памяти не ограничивается. Еще один интересный и полезный момент заключается в том, что в них можно записать не один, а несколько (до четырех) битов информации. Теоретически можно и больше, но пока реально можно говорить только о четырех, так как дальше начинаются серьезные технические сложности. Тем не менее, на мероприятии Flash Memory Summit 2019 представители компании Toshiba уже представили идею записи по пять бит данных в каждую ячейку. Но пока до практического применения дело ещё не дошло.
Разберемся, как работает запись нескольких бит информации в одну ячейку. Транзистор с плавающим затвором представляет собой элемент, который может находиться не только в двух состояниях — закрытом и открытом, но и в промежуточных. Фактически это аналоговый элемент, способный пропускать по цепи сток-исток ток разной величины в зависимости от того, какой заряд имеется на затворах и какое поле им создается.
Это значит, что можно «загнать» в плавающий затвор (в 3D NAND — в «ловушку зарядов») столько электронов, сколько понадобится, чтобы пропускать определенный ток через транзистор при определенном значении порогового напряжения. Таких пороговых напряжений может быть несколько, так как есть возможность накопить заряд больше или меньше — столько, сколько потребуется, чтобы в ячейке записалась нужная информация. Далее, подавая на транзистор напряжение и контролируя ток, можно судить о его состоянии, то есть о том, какие данные он хранит.
Отсюда и возникают ячейки памяти, в которых хранится не один бит информации, а больше, вплоть до четырех. Поэтому вся память делится на две категории: SLC (сокращение от Single Level Cell — одноуровневые ячейки) и MLC (Multi Level Cell — многоуровневые ячейки).
С SLC-ячейками все просто. Это классические элементы памяти, которые хранят один бит с двумя состояниями, одно из которых соответствует заряженному затвору, а второе — разряженному.
MLC-ячейки в свою очередь подразделяются на:
- MLC-ячейки. Это элементы памяти, в которых может храниться два бита информации. Соответственно, для этого надо точно фиксировать четыре режима работы транзистора, чтобы понять, какая из четырех комбинаций данных хранится — 00, 01, 10, 11.
- TLC-ячейки. TLC — сокращение от Triple Level Cell, трехуровневая ячейка. В них может храниться три бита данных, а, следовательно, потребуется точно фиксировать уже восемь режимов работы транзистора.
- QLC-ячейки. QLC — сокращение от Quad Level Cell, четырехуровневая ячейка. В ней помещается уже четыре бита данных. Но при этом надо фиксировать уже 16 режимов работы транзистора.
Такое увеличение плотности записи с одной стороны повышает объемы накопителей. Но с другой снижается надежность, так как требуется высокая точность записи состояния и последующего чтения данных. Увеличивается и время, которое тратится на чтение и запись данных, так как надо понять, в каком из 4, 8 или 16 режимов находится транзистор.
Дальнейшие перспективы технологии
Чтобы еще больше увеличить плотность хранения данных в одной ячейке и перейти на хранение пяти бит информации, потребуется контролировать уже 32 режима работы транзистора. Учитывая, что питание микросхем составляет единицы вольт, речь идет о том, чтобы соблюдать точность измерения и установки пороговых напряжений в сотые доли вольта. И это только одна из сложностей, которые надо решить.
Кроме того, надо решать такие задачи, как коррекция ошибок, надежность и количество циклов записи/чтения. Последняя проблема — одна из наиболее критичных, так как запись и чтение данных приводит к износу и уменьшению слоя диэлектрика между плавающим затвором и полупроводниковым каналом транзистора, а, следовательно, к выходу из строя ячейки. Именно этот момент является определяющим для времени безотказной работы памяти. Но, вполне возможно, что инженеры скоро найдут решение, позволяющее сделать следующий шаг в увеличении плотности записи. Тогда появятся еще более объемные твердотельные накопители по низкой цене.
Вы наверное как и я любили в детстве все разбирать и изучать, как и что работает. Некоторые повзрослели, а я все еще люблю этим заниматься )). В этой статье, я расскажу о том, как вытащить прошивку с любого устройства и как разрабы пытаются это предотвратить.
У старых ламповых приемников не было вообще никаких прошивок, а единственная защита, которая у них была — это анодное напряжение. В наше время все иначе: мне попадаются гаджеты, которые пытаются противодействовать уже на этапе вскрытия корпуса. Начнем наше увлекательное путешествие.
Содержание
- Осмотр платы устройства
- Память
- EEPROM
- FRAM
- NOR/NAND Flash
- Корпуса микросхем
- Маркировка
- Типовой дизайн
- ПК
- Бытовые роутеры
- Устройства для ответственного применения
- IoT
- Смартфоны
- Расшифровка имени
- Поиск документации
- Оборудование
- Подготовка к чтению прошивки
- Чтение прошивки
Осмотр платы устройства
Если вскрытие не показало, что пациент умер от вскрытия, я сначала осматриваю плату в поисках пинов отладочных интерфейсов — обычно это JTAG или UART. Главная проблема не в том, что нужные контакты могут быть в очень неожиданных местах, а в том, что обычно они отключены. Конечно, даже в 2021 году все еще хватает уникумов, которые отправляют в прод устройства с включенным UART, но количество таковых стремительно падает.
Если тебе не повезло — вариантов немного: или плакать в подушку, или искать чип памяти на борту и читать его непосредственно.
И вот с этим тебя ожидает уйма интересного! Думал, нужно просто вытащить восьминогую микруху в DIP-корпусе, похожую на старый чип с BIOS? Как бы не так! Сейчас есть минимум четыре относительно широко применяемых вида памяти, и некоторые из них могут быть похожи друг на друга так, что не различишь.
Память
Прежде чем я расскажу, что и как делать с памятью, давай сначала разберемся, какая она вообще бывает и как ее отличить от других компонентов на плате.
По опыту процессор (на скриншоте выше по центру) обычно квадратной формы и исполняется в BGA, а память прямоугольная и делается в SOP-корпусах.
Часто в ультрапортативных вычислительно мощных устройствах (смартфонах, например) используется бутерброд из процессора и памяти — так меньше размеры и задержки при работе. Форм‑фактор, конечно, BGA — просто потому, что ничего другого в крохотный корпус запихнуть нельзя.
ROM — постоянную память — отличить довольно легко. Предположим, чип с ней ты уже нашел. Теперь давай разберемся, какая она бывает.
Нас интересует EEPROM (Electrically Erasable Programmable Read-Only Memory), FRAM (сегнетоэлектрическая память) и NOR/NAND flash — они тебе уже и так знакомы. Из них ты мог не слышать только о FRAM — ее начали применять около пяти лет назад, так что она еще не особо популярна.
EEPROM
Среди особенностей этой памяти — побайтовые чтение и запись. Такая память самая долговечная: по расчетам, она может сохранять информацию в течение примерно двухсот лет! Но за надежность приходится платить — главным образом объемом, с котором у этого вида памяти все плохо: типичный объем такого чипа измеряется в килобайтах. Из‑за низкого объема для хранения прошивок этот тип памяти почти не применяется. Ну а раз заговорили о минусах — стоит и о низкой скорости сказать.
Ресурс ячейки — около миллиона циклов перезаписи. По сравнению с современными ячейками NAND, у которых этот показатель находится в пределах нескольких десятков тысяч циклов, EEPROM-память просто нереально надежная.
РЕКОМЕНДУЕМ:
Как снять дамп прошивки и получить доступ к консоли управления гаджета
FRAM
FRAM — это совсем новый тип энергонезависимой памяти. Промышленно его применять стали всего несколько лет назад, так что шанс встретить именно FRAM в каком‑нибудь умном холодильнике небольшой, но скоро все может поменяться. Пока что основная проблема в цене, которая несколько выше, чем у других типов памяти.
От EEPROM отличается фундаментально другим принципом запоминания информации: хранится не заряд на затворе, а знак поляризации сегнетоэлектрика. При приложении напряжения она меняется на противоположную, что позволяет читать такую память и писать в нее.
Из‑за нового принципа работы такая память значительно быстрее, чем EEPROM, но ее долговечность осталась практически неизменной.
NOR/NAND Flash
NOR/NAND-флеш‑память — это просто EEPROM, собранный в массив. NOR от NAND отличается только способом упаковки в массив, но это небольшое различие ведет к достаточно сильным отличиям в такой памяти.
NOR быстрее и надежнее, чем NAND, но стоит дороже из‑за меньшей плотности компоновки. NAND же, напротив, дешевый как мусор, но имеет проблемы с надежностью.
NOR- и NAND-память используется в SSD и всяких флешках. Из‑за низкой надежности NAND-памяти такие накопители в обязательном порядке имеют большой пул запасных ячеек, недоступных для обычного использования, и умный контроллер, который всем этим хозяйством рулит. Держать такой оверхед в ширпотребных умных мультиварках непростительно дорого, так что применяется обычно NOR, а NAND остается для пользовательских накопителей, где проблемы надежности можно переложить на пользователя, который не делает бэкапы. Хотя нет — даже в дешевых роутерах он все чаще применяется благодаря программным механизмам защиты целостности.
NOR был бы идеален, если бы не его цена, так что рыночек порешал — и теперь у нас всех используется NAND почти везде. Даже во встраиваемой технике уже почти научились с ним безопасно работать — контрольные суммы, ECC-коды и резервные блоки. Красота!
Корпуса микросхем
Как видишь, с корпусами у памяти все плохо: помимо показанных на картинке вариантов, можно запросто вспомнить еще с десяток, и не факт, что производитель не решил использовать нечто эксклюзивное, у чего может вообще не быть названия.
Маркировка
Допустим, тебе повезло найти чип с памятью. Первым делом нам нужно прочитать его маркировку.
Если маркировка есть — немал шанс встретить ее именно в таком формате, как показан на картинке выше. Первые две буквы — код вендора, потом тип памяти в чипе, потом внутренний номер серии — и дальше уже четкой логики не прослеживается.
Так как единого стандарта нет и не предвидится, производители вольны писать на своих чипах, что считают нужным. Это порой приводит к коллизиям, вроде того, что представлено на той же картинке: два чипа разных производителей, оба 29-й серии, но один NOR, а другой — NAND. Короче, не угадаешь, и такие чипы приходится пробивать в поисковиках, чтобы выяснить хоть что‑то.
Типовой дизайн
Устройства одного сегмента проектируются очень похожими — это вполне очевидно. Например, все бытовые роутеры изнутри выглядят почти одинаково. Та же ситуация на рынке устройств SCADA, у которых свои каноны, но они прослеживаются везде без особых изменений.
Я расскажу о пяти категориях устройств, с которыми тебе, возможно, придется иметь дело:
- ПК;
- сетевое оборудование бытового сегмента (роутеры, свитчи, точки доступа);
- оборудование для ответственных применений (на заводах);
- IoT — интернет вещей;
- смартфоны.
Само собой, мир крутится не только вокруг смартфонов да компьютеров, но с ними у тебя шанс встретиться куда больше, чем с каким‑нибудь контроллером для управления ракетными двигателями. Поэтому давай рассмотрим типовое устройство только этих пяти категорий девайсов.
ПК
Устройство обычных ПК подразумевает модульность, то есть почти все детали можно легко вынуть. Из‑за этого на матплате из элементов памяти есть только флешка с BIOS/UEFI. При этом BIOS обычно сидит на микросхемах 24-й серии — I2C EEPROM, а в новых моделях стоит 25-я серия SPI NOR flash с UEFI.
Если же установлен взрослый интеловский процессор с поддержкой ME — на плате можно найти вторую такую же флешку, но с прошивкой для ME. Это делается в целях безопасности: находящуюся на физически отдельной микросхеме прошивку заразить или подменить сложнее.
Intel ME
Intel Management Engine — это особая система для UEFI-совместимых ПК на базе процессоров Intel. Она имеет свою выделенную микросхему памяти и собственный процессор, а также собственные каналы доступа к сетевым адаптерам и основной оперативной памяти. Может без ограничений взаимодействовать почти с чем угодно в составе компьютера, что очень сильно повышает требования к ее защите.
Бытовые роутеры
С роутерами потребительского класса все довольно просто: тут ставят память SPI NOR 25-й серии, если требуется не больше 8 Мбайт, или NAND-память объемом побольше. Изредка можно найти eMMC, но мне такое пока не попадалось.
Устройства для ответственного применения
Тут все немного сложнее. Стандарты требуют странных вещей, поэтому с большим шансом устройства этой категории будут состоять из нескольких плат, соединенных переходными интерфейсами. Будет много разных запоминающих устройств, чтобы просто пройти сертификацию.
Логи обычно пишутся в EEPROM или FRAM 24-й серии, загрузчик лежит на NOR 25-й серии, а все встроенное ПО кладут на NOR 26-й, 29-й серии. NAND используют редко, а если используют — сразу большими массивами с резервированием.
IoT
Сейчас понятие IoT слишком растяжимое: по сути, туда можно записать вообще все умное домашнее и даже не очень домашнее. Из‑за этого память там может быть любая: хоть EEPROM, хоть eMMC — это когда NAND с хост‑контроллером упакованы в один чип.
Смартфоны
В смартфонах обычно все самое передовое: тут тебе и eMMC, и eUFS, и даже NVMe SSD, как у Apple. При этом, как ни крути, все эти чипы выглядят плюс‑минус одинаково, так что ты их ни с чем не спутаешь.
Расшифровка имени
Теперь, когда нашли нужный чип и прочитали маркировку, ее нужно декодировать. Кстати, маркировка далеко не всегда читается целиком: часть может быть случайно или намеренно скрыта, а то и вовсе подделана, как любят устраивать китайцы со своими деталями на Али.
Особо крупные производители могут предоставлять на своих сайтах декодеры имени микросхемы, но почти никто так не делает.
Похвальный пример — производитель Micron, который дал на сайте внятную инструкцию и форму для получения даташита на свои микросхемы.
Если же декодера нет, придется выкручиваться. Можно попробовать разобраться по схеме на скриншоте ниже, но, естественно, безо всяких гарантий успеха. Возможно, даже лучше сразу идти к японцам — они очень любят неадекватно запутанные названия без известной логики. Она, конечно, есть, но пока что никто ее не смог понять.
Поиск документации
Гуглить, думаю, ты и сам умеешь, но для поиска документации ко всяким экзотическим чипам это может быть бесполезно. Во‑первых, более эффективен поиск по первым N символам названия микросхемы. Во‑вторых, часто проще найти по коду на Aliexpress или других крупных торговых площадках.
Если уж любишь Google, попробуй поиск по картинкам — там порой можно найти то, что текстом не ищется.
Еще огромные базы чипов есть в ПО для программаторов — я использую ПО компании Elnec. Зачастую там даже есть даташиты, но слишком на это надеяться не стоит.
И еще одно хорошее место для поисков — GitHub. С большим шансом там найдется что‑нибудь по запросу в духе «X microcircuit read poc». Дальше можно выдрать ссылку на даташит или что‑то еще полезное. Мне попадались даже скрытые сервисные команды для блокировки/разблокировки чипа, что, конечно, очень приятно при изучении.
Оборудование
Тут можно только сказать, чего делать не стоит: не надо брать дешевые инструменты и расходники. Из моего любимого — припой, который плавится при совершенно неожиданных температурах, проводящий флюс (!) и одноразовые пинцеты.
Подробнее хочется рассказать о дешевом флюсе. Как пример — ТТ, также известный как розовый гель. Он хорош, но он не отмывается и проводит ток на высоких частотах. Это не проблема в советском радио или даже современном блоке питания, но вот на платах компьютеров с гигагерцами частоты он категорически противопоказан.
Снятие компаунда — это вопрос температуры. Я обычно грею феном на ~250 градусов, но есть одна проблемка. И состоит она в том, что под компаундом компоненты могут быть припаяны низкотемпературным припоем, вроде сплавов Розе или Вуда. Да, компаунд ты снимешь, но вместе с ним сойдет половина платы. А хитрая флешка может не завестись без кучи рассыпухи, которую обратно уже не собрать.
При снятии компаунда не забывай о вытяжке — твое здоровье важнее любой микросхемы!
Что делать, если плата покрыта лаком? Можно попробовать свести его ацетоном, но он может повредить текстолит. Делай так, только если тебе терять нечего. Для остальных случаев — просто снимать скальпелем в нужных местах, а остальное не трогать.
При пайке ориентируйся на график термопрофиля в конце даташита на микросхему. Он там размещается не просто так, и на моей памяти действительно были случаи, когда микросхема умирала от перегрева при извлечении. Как известно, люди делятся на тех, кто не смотрит графики в документации, и тех, кто уже смотрит.
К заводскому припою часто имеет смысл примешать менее тугоплавкий сплав Розе или ПОС63, ну или сплав Вуда, если все совсем плохо. Это значительно понизит температуру пайки и увеличит шансы не сжечь микруху.
Подготовка к чтению прошивки
После выпайки ни в коем случае нельзя устраивать микросхеме температурные испытания: пусть полежит и остынет сама, а не в спирте — так шансы сохранить работоспособность куда выше. Дальше нужно проверить, все ли лапки чипа находятся в одной плоскости и не образовались ли от припоя перемычки между ножками. Их нужно убрать, чтобы не спалить программатор, не имеющий защиты от такого, и сам чип тоже.
С BGA нужно убрать старый припой и нанести новые шарики. Когда чип очищен и подготовлен к чтению, не вздумай пихать его в программатор с прижимом прямо в чип — велик шанс просто раздавить его!
Чтение прошивки
Помни, что память NOR flash идет с завода без битых ячеек, а у NAND есть допустимый процент брака, так что, если в NAND видны битые ячейки, не спеши расстраиваться.
Программатор перед чтением нужно правильно настроить. В частности, надо заставить его читать все, включая системные страницы в начале и конце памяти — они бывают крайне важны!
Разработчики чипа настоятельно рекомендуют разработчикам устройства использовать свои чипы в соответствии с некоторыми правилами. Но вторые вольны не подчиняться первым, так что системные страницы порой оказываются хранилищем ключей шифрования или каких‑то других данных. В общем, читай все — лишним точно не будет.
РЕКОМЕНДУЕМ:
Способы защиты микроконтроллера
Вот теперь у тебя есть образ, который можно грузить в IDA и ковыряться дальше, но это уже тема для отдельной статьи.
Статья написана по мотивам доклада Демида Узенькова — специалиста компании ИНФОРИОН. Выступление состоялось на конференции RuCTFE 2020. За помощь в подготовке публикации редакция благодарит команду «Хакердом».
Уровень сложности
Простой
SSD очень быстрое запоминающее устройство и если разобрать его, то можно увидеть что он представляет собой печатную плату, с множеством чипов Flash памяти, типа NAND, именно они хранят информацию, а рядом с ними распаиваются контроллер и dram память.
Контроллер отвечает за связь накопителя с компьютером и осуществляет операции чтения/записи, а DRAM служит как небольшой кэш и ускоряет доступ к данным.
В некоторых SSD на обратной стороне или на отдельной плате размещаются дополнительные чипы памяти и ряд ёмких конденсаторов, они позволяют безопасно выключить устройство при резком отключении питания. (Аппаратный PLP)
Другие твердотельные накопители, такие как USB-накопители и карты памяти имеют похожее строение, только в них нет DRAM, меньше чипов памяти и устанавливается менее производительный контроллер.
Чтобы более детальней понять их работу, нужно рассмотреть как работает чип Flash памяти. Разобрав его, видно что состоит он из множества кристаллов,
если подробней рассмотреть один из них, то видно что большую часть кристалла занимает массив ячеек и лишь небольшая область отводится под буфер и логику.
Если проникнуть внутрь кристалла, то видно что он имеет трёхмерную структуру, состоящую из рядов вертикально уложенных ячеек Флеш памяти,
если разобрать одну отдельную ячейку, то её строение покажется запутанным, к тому же у разных производителей, принцип работы может отличаться по способу подачи тока и чтения данных из ячейки.
Так что лучше представить её в виде схемы, так легче понять что ячейка представляет собой транзистор с двумя изолированными затворами: управляющим и «плавающим». Плавающий затвор способен удерживать внутри себя электроны, тем самым делая из транзистора ячейку памяти.
Чтобы записать информацию, на сток и управляющий затвор подается высокое напряжение, это позволяет электронам пройти сквозь диэлектрик и остаться на плавающем затворе.
Для удаления заряда, на управляющий затвор подается высокое отрицательное напряжение, а на исток — положительное.
Каждый такой цикл записи и стирания разрушает слой диэлектрика, так что число перезаписи на ячейку ограничено.
Считывание не приводит к этому эффекту и проверять что записано в ячейке, ноль или единица, можно сколько угодно раз для этого, на управляющий затвор подаётся напряжение и проверяется, может ли идти ток по транзистору:
Если на плавающем затворе много электронов, то ток идти не будет, значит это единица. Если их немного, то ток пойдет, значит это ноль.
(У некоторых производителей, ячейка может считываться наоборот)
Так считываются одноуровневые ячейки SLC, если же материал плавающего затвора способен захватить много электронов, а электроника способна размещать на плавающем затворе разные уровни зарядов и распознать несколько пороговых напряжений, то такая ячейка может хранить несколько бит информации. Например QLC ячейки могут хранить 4 бита информации, но для этого нужно различать 16 пороговых напряжений.
(Информация с SLC ячеек считывается и отправляется на контроллер почти без задержек. Чипы с QLC ячейками имеют внутреннею задержку в связи с необходимостью формирования специального сигнала для каждой ячейки и распознавания его)
Ко всему этому, чтобы уместить на кристалл как можно больше ячеек, их группируют соединяя последовательно и с обоих сторон подключают обычные транзисторы, принципиальная схема массива выглядит примерно так,
но в самом кристалле, массив имеет трёхмерную структуру. Ячейки, находящиеся на одной разрядной линии, образуют страницу размером в 4 килобайта, это минимальная область с которой можно считать или записать данные.
Множество страниц формируют блок, размером 512 килобайт, это минимальная область которая может быть стёрта. То есть, если нужно переписать информацию всего лишь одной страницы, придётся стирать данные аж с целого блока и потом снова записывать.
Такие ограничения существует из-за архитектуры nand памяти, а так как таких блоков очень много, всеми операциями чтения записи руководит контроллер, он управляет структурой размещения данных и контролирует состояние ячеек, распределяя данные так чтобы одни ячейки не использовались чаще других, тем самым увеличивая срок службы накопителя.
Если посмотреть на блок схему типичного контроллера, то видно что он состоит из 32 битного RISC процессора который выполняет инструкции микропрограммы и может иметь до 4 ядер. Так же есть DDR-контроллер отвечающий за работу с внешним DRAM-буфером, есть блок ecc, отвечающий за обнаружение и коррекцию ошибок, есть блоки интерфейсов отвечающие за обмен данными с чипами памяти и внешними интерфейсами и есть блоки отвечающие за шифрование и другие функции, которые могут меняться в зависимости от необходимого функционала.
Помимо контроллера, на скорость накопителя влияет интерфейс подключения. Существует множество форм-факторов SSD с разными интефейсами подключения и разной скоростью, но чаще всего в обычных компьютерах используются 2,5-дюймовые SSD или формата M.2.
2,5-дюймовые SSD имеют интерфейс SATA, третьего поколения, такой интерфейс обеспечивает пропускную способность до 600 Мбайт/с. Накопители mSATA (mini-SATA) имеют такой же интерфейс.
В SSD M.2 используется один из двух интерфейсов: SATA3 или PCIe. В зависимости от количества выделенных линий и версии PCIe скорость может отличаться. Например PCI-E третей версии и с четырьмя выделенными линиями имеет пропускную способность до 4ГБ/с.
Так же такие накопители имеют несколько вариантов ключей. Есть накопители с B, M и B+M коннекторами.
В SSD M.2 используется один из двух интерфейсов: SATA3 или PCIe. В зависимости от количества выделенных линий и версии PCIe скорость может отличаться. Например PCI-E третей версии и с четырьмя выделенными линиями имеет пропускную способность до 4ГБ/с.
Так же есть SSD в виде платы расширения которые подключаются напрямую в PCI-Express слот материнской платы. Некоторые модели таких накопителей могут использовать 8 и даже 16 линий слота PCIe, что даёт пропускную способность выше 6ГБ/с.
Кроме этого есть ещё много разных форм факторов, например U2, U3, NF1, и другие (EDSFF, 1.8 дюймовые), но ничем серьёзным, кроме размеров и коннекторов они не отличаются, да и используются они в основном в серверах и рабочих станциях.
Так же, хочется сказать что существует ещё один вид SSD накопителей, в которых вместо чипов Flash памяти используются чипы с технологией 3D crosspoint, в них в качестве ячеек не используются транзисторы с плавающим затвором и такие накопители быстрей обычных, но к сожалению у меня мало информации про эту технологию, так что на этом у меня всё.
Ниже оставлю видео версию статьи, кому лень читать.
-
-
ZEDA
just joined
- Posts: 7
- Joined: Thu Apr 03, 2014 4:33 pm
what is difference flash vs nand?
Sun Sep 18, 2016 11:10 pm
Hi!
please help me and describe what is difference between flash and nand storage in Routerboard?
I search in google but i found «nand flash» vs «nor flash».
and this tow type storage how many have write cycle ?
excuse me for bad english
thank you
-
-
IntrusDave
Forum Guru
- Posts: 1286
- Joined: Fri May 09, 2014 4:36 am
- Location: Rancho Cucamonga, CA
Re: what is difference flash vs nand?
Mon Sep 19, 2016 2:14 am
You do not have the required permissions to view the files attached to this post.
-
-
ZEDA
just joined
- Posts: 7
- Joined: Thu Apr 03, 2014 4:33 pm
Topic Author
Re: what is difference flash vs nand?
Mon Sep 19, 2016 11:05 am
Thank you
but this is that I founded in google
that is compare «nor flash» vs «nand flash»
but in routerboard.com only write «flash» or «nand» not explaine what is flash.
and not explain how many write cycle each have
-
-
vozglobal
just joined
- Posts: 19
- Joined: Tue Jan 27, 2015 5:34 pm
- Location: Fuentealbilla — España
- Contact:
Re: what is difference flash vs nand?
Wed Oct 17, 2018 10:16 am
Thank you
but this is that I founded in google
that is compare «nor flash» vs «nand flash»but in routerboard.com only write «flash» or «nand» not explaine what is flash.
and not explain how many write cycle each have
hello, you found an answer, for this case.
I am investigating on the subject, and still can not find an answer
-
-
Theking2
just joined
- Posts: 21
- Joined: Thu Aug 04, 2016 9:41 pm
Re: what is difference flash vs nand?
Tue May 04, 2021 9:16 pm
I like to know the same thing.
What is the difference between these:
flash-boot —
flash-boot-once-then-nand —
nand-if-fail-then-ethernet —
nand-only —
try-ethernet-once-then-nand —
There seems to be an option to boot from flash or from nand (or from a bootp server)
What is the difference between boot from flash and from nand. If the firmware is updated does this relate to flash only or to nand only or to both?
-
-
mada3k
Long time Member
- Posts: 646
- Joined: Mon Jul 13, 2015 10:53 am
- Location: Sweden
Re: what is difference flash vs nand?
Tue May 04, 2021 9:56 pm
Generally…
NOR Flash is limited to 16MB, but it exists 32M and 64M as well. NAND Flash can be several gigabytes.
NOR Flash is like a SD-card or SSD-drive. It’s a self-contained device manages itself (mapping, wear-leveling, error-handling etc.) and is mostly used for loading firmware or boot image.
NAND Flash is «raw flash» that needs a controller to manage it. It’s useless without something that manages it (like a controller in a SSD-drive)
-
-
icsterm
Frequent Visitor
- Posts: 58
- Joined: Sun Mar 11, 2018 11:11 pm
Re: what is difference flash vs nand?
Fri Sep 10, 2021 7:58 am
I would also like to know if flash-boot means USB boot.
The wiki does not explain anything about the difference between nand-boot and flash-boot.