Как установить приложение на nand flash
(3756) 4.90 (10) Оценки, комментарии
2021-02-11 Дата последнего изменения: 2021-02-28
Автор: Линьков Е.А. — разработчик программаторов ChipStar .
В статье в предельно доступной форме рассматриваются особенности применения микросхем NAND FLASH.
CОДЕРЖАНИЕ:
NAND не совсем обычные микросхемы, поэтому те инженеры, которые с ними сталкиваются впервые, часто бывают обескуражены. Более подробно, хотя и очень примитивно, особенности NAND описаны в статьях "Программирование NAND FLASH" и "Программирование SPI NAND".
Здесь же я постараюсь изложить суть использования NAND еще проще.
Тому, кто собирается работать с NAND профессионально, материала из этой статьи будет явно недостаточно, но для любителя, который решил отремонтировать 2–3 прибора, в которых используется микросхема типа NAND, это может очень помочь.
1. Коварство NAND. Структура.
NAND организованы следующим образом: страницы –> блоки –> логические модули –> кристаллы.
На рисунке ниже показан типичный пример организации микросхемы NAND с одним логическим модулем и одним кристаллом.
В чем коварство NAND? В адресации.
Даже начинающий радиолюбитель знает, что к любой ячейке микросхемы памяти можно обратиться, указав её адрес. Перебирая по порядку все адреса с первого до последнего, можно считать или записать всю микросхему (именно так поступает программатор).
При считывании NAND всегда происходит чтение всей страницы целиком, страница перемещается во внутренний буфер (page register), а уже из буфера можно прочитать содержимое страницы байт за байтом или в произвольном порядке.
То же самое при записи — сначала заполняется внутренний буфер (целиком или частично), затем страница записывается целиком. Размер буфера равен размеру страницы. Коварство адресации в том, что размер страницы не кратен степени двух. То есть просматривать содержимое микросхемы байт за байтом не получится.
2. Коварство NAND. Ошибки.
При работе микросхемы NAND возникновение ошибок — это норма. "Как так? Как можно работать с такой микросхемой?!" — скажете вы. Как можно работать с такой памятью? Способы есть, но об этом позже, а сейчас о типичном заблуждении начинающих:
- Пользователь ставит микросхему в программатор.
- Читает её. Читает еще раз.
- Сравнивает. О ужас! Обнаружено более тысячи ошибок!
- Паника! Микросхема не работает. Программатор не работает.Ничего не работает.
- Нужно срочно звонить нам (производителю) и требовать ремонта программатора!
Спокойно, дружище, спокойно. Это NAND, она так работает.
Сейчас типичная страница наиболее распространенных NAND равна двум килобайтам плюс дополнительные байты. Очень многие микросхемы при чтении дают до 16-ти одиночных ошибок на одну страницу. И это нормально. Берем, например, микросхему на 2 гигабайта. Нехитрое вычисление. Получаем, что при считывании микросхемы может быть до 16 777 216 ошибок!
Еще раз: 16 миллионов! Ошибок в микросхеме! Как с этим жить?! Как может что-то работать вообще? Об этом поговорим чуть позже.
А сейчас поясним понятие "одиночные ошибки".
"Одиночная ошибка" — это не одна единственная ошибка на страницу или микросхему, это ошибка в одном бите. Таких ошибок может быть много, вопреки слову "одиночная". Применительно к памяти такие ошибки правильнее было бы называть однобитными, но термин "одиночный" пришёл из теории передачи данных по линиям связи, где ошибки выявляют и исправляют такими же способами, что и в NAND.
3. Магия ЕСС.
Все наверное знают, что такое CRC. Код CRC (еще иногда (ошибочно) называют "контрольная сумма") — это такой специальный код, который позволяет найти ошибку в данных.
Кратко опишем как выглядит работа кодера/декодера ЕСС:
- Берется порция данных, например, 2048 байт, записывается в страницу NAND.
- Рассчитывается код ЕСС и тоже записывается (назовем его ECC1) (именно для записи таких кодов страница сделана чуть больше!)
- Затем читаем страницу 2048 байт.
- Опять рассчитываем код ЕСС (назовем его ECC2).
- Читаем записанный код ЕСС1 и сравниваем ECC1 и ECC2.
- Если коды совпадают, значит ошибок нет.
Вот до этого места коды CRC и ECC не сильно отличаются, магия ЕСС начинается дальше:
Вот и вся магия. Мы просто исправляем ошибки.
4. Коварство NAND. Магия ЕСС есть, но она не работает.
"Так просто?" — скажете вы. "Тогда почему программатор не использует ЕСС для исправления ошибок?! Я из раза в раз читаю микросхему и все время ошибки".
Да. Действительно, почему?
- Какими порциями (128, 256, 512, 1024 или 2048) в вашем приборе (не в микросхеме NAND, а именно в приборе. ) разработчик прибора решил записывать данные и вычислять ЕСС.
- Какой алгоритм ЕСС он решил использовать.
- Какой порождающий полином он решил использовать.
- Как разработчик разбил страницу NAND на порции и куда решил записывать сами коды ЕСС.
Как? Вы это не знаете?! Вот и мы не знаем. И, возможно, никто, кроме разработчика прибора, не знает.
Если из этого списка 1-й и 4-й пункты можно попытаться выяснить, анализируя прошивку микросхемы, а порождающий полином (пункт 3) - подобрать, то с пунктом 2 (алгоритм ECC) все очень плохо.
5. Почему алгоритмов расчета ECC так много.
На данный момент самые распространённые коды исправляющие ошибки это:
Математические теории кодов достаточно сложные, но основные приемы работы с кодами известны, порождающие полиномы легко найти. Казалось бы, мы легко сможем подобрать нужный алгоритм ECC, просто анализируя прошивку. Сначала мы тоже так решили, однако всё оказалось сложнее.
Большинство современных встроенных систем базируются на Linux. Linux для работы накопителей на основе FLASH памяти, как правило, использует драйвер MTD. В драйвере MTD реализовано программное кодирование для NAND кодом BCH с вполне известным набором полиномов. Всё будто просто, но в реальной жизни (в реальных прошивках) такое кодирование не встречается. Почему? Всё упирается в деньги. Вернее, в желание производителей аппаратуры их сэкономить.
Почему вместо обычной памяти FLASH, работающей безошибочно, используются NAND, производящие кучу ошибок? Потому что это в разы дешевле. За разработку алгоритма кодирования/декодирования ЕСС заплатить нужно ОДИН раз, за память без ошибок нужно платить КАЖДЫЙ раз в КАЖДОМ устройстве.
Ровно по этой же причине в реальных устройствах (особенно массовых) никогда не используется чисто программное декодирование ЕСС – это декодирование является очень ресурсозатратным. Получается: ставим дешевую память – получаем или медленно работающее устройство, или нужно ставить мощный процессор, стоимость которого сводит на нет выгоды от использования дешевой памяти.
Поэтому декодированием ЕСС в современных системах занимаются специальные сопроцессоры или контроллеры. Придумываются и реализуются более совершенные коды ЕСС. Часто используются комбинированные коды CRC/ECC. Код CRC рассчитывается быстрее, чем ЕСС, это позволяет использовать CRC-часть для обнаружения ошибок, а полное декодирование ЕСС — только при их наличии.
Все эти коды и алгоритмы являются предметом авторского права и собственностью компаний, их разработавших. Ежедневно патентуются все более совершенные коды и все более быстрые алгоритмы их расчета. И никто не спешит делиться своими секретами.
Как итог — мы видим прошивку. Часто мы видим как страница разбита на подстраницы. Мы видим где находятся коды ЕСС подстраниц. Но не знаем, каким алгоритмом они рассчитаны, и поэтому не можем их использовать для исправления ошибок .
Для тех, кого посетит мысль о том, что взломать алгоритм ECC не сложно, хочу напомнить, что для шифрования данных и расчета кодов исправления ошибок используется идентичный математический аппарат.
6. Коварство NAND. Магия ЕСС есть, но она не работает. Что делать?
Очень часто нам приходится слышать один и тот же вопрос: "Что делать, если NAND всегда читается с огромным количеством ошибок? Как прочитать без ошибок?"
Проблема может быть успешно преодолена, если вы нам скажете, какой алгоритм ЕСС использует ваше устройство. В этом случае мы сделаем расчет ЕСС по вашему алгоритму и у вас всё будет работать без ошибок при чтении NAND для этого устройства.
Вы не знаете алгоритм? Тогда есть только один способ: толерантность к ошибкам (и этот способ успешно работает).
Просто читаете микросхему. Она будет считана с ошибками. При верификации требуется задать допустимое количество ошибок на страницу микросхемы. (Для всех вновь добавленных микросхем значение по умолчанию уже задано. Если не задано – нужно смотреть документацию или просить нас, чтобы мы внесли данные ЕСС в базу).
Программа будет сверять микросхему и подсчитывать количество ошибок. Если количество ошибок не превысит заданное значение — значит всё в порядке. Ошибка сравнения не будет выдана, вы просто будете проинформированы о количестве "исправимых" ошибок.
Но не все так однозначно.
Вот небольшая задачка:
Допустим, микросхема записывается всегда правильно, а все ошибки возникают только при чтении (чаше всего, это именно так). Предположим при каждом чтении каждой страницы всегда возникает ровно 3 ошибки при допустимых для данной микросхемы 4-х ошибках.
Понятно, что пример несколько искусственный, но на нём проще объяснить.
Случай 1:Запись эталона в NAND
Мы записали в микросхему эталонную (точно не содержащую ошибок) прошивку. При верификации получаем 3 ошибки на страницу. Программа предупреждает об исправимых ошибках, но верификация проходит успешно.
Рисунок 1.
Если вы эту микросхему NAND поставите в ваш прибор, он исправно заработает, поскольку встроенный в прибор алгоритм ЕСС обязан(!) исправлять не менее 4-х ошибок на страницу (это паспортные характеристики данной NAND и прибор просто обязан справляться с таким количеством ошибок).
Случай 2:Чтение микросхемы NAND
Мы считали прошивку из исправной микросхемы, стоящей в приборе (напомню, мы получаем по 3 ошибки на страницу). Далее мы еще раз считывали прошивку. Мы опять получили 3 ошибки на страницу.
Рисунок 2.
Но ошибки не возникают в одних и тех же местах! При сравнении результатов 1-го и 2-го считывания может получиться до 6-ти ошибок на страницу. Это превысит допустимые 4 для данной микросхемы, но это вовсе не означает, что микросхема неисправна!
Случай 3:Копирование микросхемы NAND
Мы считали прошивку из исправной микросхемы, стоящей в приборе (получая по 3 ошибки на страницу). Далее записали полученную прошивку в чистую микросхему.
Рисунок 3.
При верификации получим по 3 ошибки на страницу. Это вроде бы меньше 4-х. Но заработает ли прибор? Не факт. Всего ошибок может быть до 6-ти на страницу (3 при считывании образца плюс 3 при работе микросхемы в приборе), но ЕСС прибора исправит только 4.
На самом деле, в реальной жизни, количество ошибок по страницам в микросхемах сильно колеблется. В новых микросхемах количество ошибок не превышает одной-двух, да и то не на каждой странице. Заявленное число ошибок (в нашем примере 4) это уже в сильно изношенной микросхеме. Беда только в том, что в ремонт с формулировкой "слетела прошивка" именно такие приборы и попадают.
7. Практический совет по выбору порога ошибок.
Можно порекомендовать простой алгоритм выбора количества допустимых ошибок при верификации (настройка порога толерантности):
Случай 1. Очень оптимистичный. У вас есть эталонная прошивка и она точно без ошибок.
Такую прошивку можно писать и верифицировать с порогом ошибок, заданным в документации на микросхему (во всех наших примерах – это 4).
Случай 2. Реальный. У вас нет эталонной прошивки.
Вы считываете прошивку из микросхемы. Чтобы ее можно было уверенно использовать, количество ошибок на страницу не должно превышать половины лимита (т.е. для нашего примера — это 2 ошибки). Далее вы пишете эту прошивку в микросхему. При верификации записанной микросхемы ошибок тоже не должно быть более 2-х.
Рисунок 4.
Чем больше вы ошибок получаете при считывании эталона и верификации записи, тем меньше вероятность того, что алгоритм ЕСС справится с исправлением ошибок и прибор заработает. Здесь уже как повезет. :)
8. "Ваш программатор полный отстой, вот другие программаторы решают эту проблему".
Нет. У других производителей программаторов (во всяком случае у всех, которые нам известны на данный момент) всё точно так же. Те же предложения: "Cкажите какой ЕСС и мы все реализуем".
Те же методы верификации с "терпимостью" ошибок ЕСС. У некоторых производителей есть настройка с выбором алгоритмов из встроенного стандартного набора, с необходимостью указания полинома, разметки страницы и кучи других параметров. В практической жизни это вам не сильно поможет.
9. "Я все прочитал и ничего не понял.
Вы сможете наконец что-то сделать, чтобы NAND читались "нормально"?"
Мы над этим работаем. До сих пор мы не оставляем надежды на создание способа автоматического восстановления алгоритма ЕСС (хакинга) только на основании анализа прошивки.
Понятно, что для всех случаев его создать никогда не удастся, но если нам удастся восстановить алгоритм ЕСС хотя бы в четверти случаев, мы будем просто счастливы.
Что для этого нужно? Присылайте нам свои считанные прошивки. Присылайте нам как можно больше считанных прошивок. Я знаю, что они для вас представляют ценность, но мы не собираемся их распространять или использовать как-то кроме их анализа на предмет ЕСС и таблиц плохих блоков. Если вы опасаетесь, можно скрывать название системы, в которой прошивка используется.
Всё что нас интересует — это название микросхемы, из которой прошивка считана. Для лучшей защиты своих интересов вы можете прислать прошивку не полностью. Если вы опасаетесь — не присылайте. Это только просьба.
Еще очень желательно знать марку контроллера NAND, используемого в системе или марку центрального процессора, то есть название микросхемы, к которой NAND подключена.
Собрав достаточную базу прошивок, я надеюсь, нам удастся "хакнуть" ЕСС и сильно облегчить вам работу с NAND.
Только совместными усилиями мы сможем добиться значительных результатов в работе!
Недавно приобрел samsung galaxy ace plus s7500 и столкнулся с проблемой, что не могу устанавливать игры и их кэш на съемную флэшку, а встроенная всего 1,8 Гб! Пробовал через настройку приложений, но ничего не выходит!
Подскажите, пожалуйста, как устанавливать приложения на флэшку или хотя бы как сделать, чтобы программы и игры считывали кэш со съемной карты памяти!
Android 2.3. Заранее спасибо!
Метки: приложения и кэш на флешку
Комментарии 38
Подскажите, устанавливаю игру на встроенную память телефона-игра работает, переношу на съемную флешку-не работает. (Рут права есть, переношу с помощью рут-експлорер, съемная флешка сделана на 2 раздела.) Как-то можно сделать чтоб телефон запускал игру?
Я не подскажу… не в курсе.
Интересное решение, может кому-то пригодится!
Но после этой записи я уже поменял телефон сначала на SGS S2 16 Гб, теперь на LG G2 32 Гб, и проблема с нехваткой памяти решилась сама собой.
Спасибо!
что я откопал у саомого такой же телефон таже беда завтро буду мудрить мало места особенно когда тяжелые игры ставиш
Сходи в С.Ц. — перешьют, стоит не дорого! Весь прикол в том, что у тебя появится возможность делать резервные копии всего тела вместе с программами, кешем, настройками пр. хренью. Любой глюк с телом — лечится "восстановлением" до заранее сохраненного состояния без потери настроек программ и контактов )))
Рекомендую кастомную прошивку Cyanogen Mod 7 — сам юзаю уже месяц! — Более чем доволен! Более гибкие настройки, полный доступ…
Да я в этом не волоку, сам не сделаю, наверно, только трубку загублю!
Рекомендую кастомную прошивку Cyanogen Mod 7 — сам юзаю уже месяц! — Более чем доволен! Более гибкие настройки, полный доступ…
если перепрошиваеш телефон то гарантия теряется… сам полез сам виноват
data2sd! Гуглите и читайте! Программа прописывает в ЯДРЕ линукса флешь и память "тела" на разные разделы флешки… Берешь флешку, разбиваешь на три раздела (один для кеша, второй для памяти, и третий как обычная флешь). Получаешь — память телефона (самого тела) будет ровна объему раздела на флешке, отведенного под это дело, кеш будет писаться в раздел для кеш… Весь прикол в том, что в настройках ставишь чтобы все ставилось на тело — и все автоматом идет на хитрый раздел флешки…
Надо поискать, интересно!
data2sd! Гуглите и читайте! Программа прописывает в ЯДРЕ линукса флешь и память "тела" на разные разделы флешки… Берешь флешку, разбиваешь на три раздела (один для кеша, второй для памяти, и третий как обычная флешь). Получаешь — память телефона (самого тела) будет ровна объему раздела на флешке, отведенного под это дело, кеш будет писаться в раздел для кеш… Весь прикол в том, что в настройках ставишь чтобы все ставилось на тело — и все автоматом идет на хитрый раздел флешки…
А что будет при этом с информацией на флешке?
програмка переноса на флешку. Я пользую — доволен… Всё оч просто и легко переносится.
А с кешем — скорее всего не туда куда надо переносишь кэш или не правильно папка обзывается.
Спасибо, сейчас гляну.
програмка переноса на флешку. Я пользую — доволен… Всё оч просто и легко переносится.
А с кешем — скорее всего не туда куда надо переносишь кэш или не правильно папка обзывается.
App2SD что-то хреновенькая. Находит приложение которое можно перенести на карту памяти, но кнопка переноса остается неактивна…((
У меня тоже не всё перенёс, но бОльшую часть я "услал" в ссылку на SDшку.
App2SD что-то хреновенькая. Находит приложение которое можно перенести на карту памяти, но кнопка переноса остается неактивна…((
те проги которые не переносятся на SD карту, невозможно перенести из-за отсутствия рут прав.Разработчик изначально заложил, что эту прогу можно устанавливать только на память телефона
На 4.3 теперь можно все переносить
програмка переноса на флешку. Я пользую — доволен… Всё оч просто и легко переносится.
А с кешем — скорее всего не туда куда надо переносишь кэш или не правильно папка обзывается.
Эта прога кеш не переносит!А на андройдах выше 4х с чем то, уже в базовых настройках приложений есть клава "перенести на SD карту"
нужен рут, link2sd и на флехе создать системный раздел ext2. с помощью проги (link2sd) на тот раздел сослать свои проги
Вот это уже что—то! А ссылочку, где это дело скачать можно, не дашь?
что значит съемная и нет, есть встроенная память, память самого телефона и флешка, так что мешает ее перенести на флешку
А есть еще встроенная флэш-память. Это как карта памяти, только встроенная в телефон, не съемная…
зайди в настройки приложений и на андроне 2.3 там будет кнопка перенести на карту и все
Знаю, игры уже на карте, но не съемной SD-ки, а на встроенной флешке. Проблема в другом, читай выше!
зайди в настройки приложений и на андроне 2.3 там будет кнопка перенести на карту и все
Он переносить саму игру а не кеш, поэтому, в основном проблема остается!
1,8 Гб мало для приложений? ну вы даёте, весь маркет чтоли установить решили? У меня SGS2. у него для приложений 1.97ГБ. У меня установлено около 200 приложений и только 1,2ГБ занято. Сами приложения занимают не много, от 100кб до 40МБ. Всякие игры ставятся раздельно, само приложение apk (10-20МБ) в раздел для приложений, а остальной большой кэш на свободное место в /sdcard/ (там ещё 11,5Гб).
Даже если кончится место на системном разделе, то через менеджер приложений можно переместить приложение на флешку в одно нажатие.
Короче, я, наверно, плохо сам объясняю. Попробую еще раз!
В самом телефоне два вида памяти: первая — системная (около 1 Гб), на нее ставятся мелкие приложения и есть возможность их переноса во вторую — встроенную флеш—память (1,8Гб). Помимо этого под аккумуляторной крышкой есть разъем д микроSD (у меня сейчас 4 Гб). Так вот, если к примеру я устанавливаю GTA—ку, то она устанавливается на встроенную флеш—память (1,8 Гб) и создает кэш—папку тоже на этом диске. Кэш этой игры около 800 Мб, соответственно памяти остается 1,2 Гб после установки. При попытке кинуть кэш на съемную микроSD (4Гб) игра запускается, но не видит этот кэш и лезет в интернет качать новый на встроенную флеш—память (1,8Гб).
В этом и проблема, что приложения не видят свой кэш, если он закинут на съемную микроSD—ку! Помогите решить эту проблему! С андроидом всего неделю, еще не совсем освоился!
В этом случае проблема в самой игре. На форумах бывают изменённые версии как раз для установки на внешние карты памяти. Телефон тут не причём, просто так прописано в игре.
Понятно, значит придется кэш держать на внешней карте и при необходимости поиграть в игру кидать куда нужно!
либо так, либо искать версию для внешней карты.
1,8 Гб мало для приложений? ну вы даёте, весь маркет чтоли установить решили? У меня SGS2. у него для приложений 1.97ГБ. У меня установлено около 200 приложений и только 1,2ГБ занято. Сами приложения занимают не много, от 100кб до 40МБ. Всякие игры ставятся раздельно, само приложение apk (10-20МБ) в раздел для приложений, а остальной большой кэш на свободное место в /sdcard/ (там ещё 11,5Гб).
Даже если кончится место на системном разделе, то через менеджер приложений можно переместить приложение на флешку в одно нажатие.
Ты че гонишь?Какие ты там приложения себе на устанавливал?Которые весят как чещуя от семечек?Игры с кешом весят от 250мб до 2гб!У меня например установлено 5ть игр с кешом, 3d и с крутой графикой, и у меня забито уже 1.4 гб!Осталось 300.И это при том, что я игры после установки перемещаю на флешку, только кеш не перемещается!
Урок 016 Принцип работы Nand Flash и анализ программ на голом железе
Принципиальная схема NAND FLASH
NAND FLASH - это микросхема памяти.
Затем: эта операция очень разумна: "читать данные по адресу A, записывать данные B по адресу A"
Вопрос 1. На принципиальной схеме только линия данных между NAND FLASH и S3C2440, как передать адрес?
Ответ 1. И данные, и адрес передаются по DATA0 ~ DATA 7. Когда ALE высокий, адрес передается.
Значит, в строке данных передаются только данные и только адреса?
Мы можем обратиться к руководству по микросхеме NAND FLASH, чтобы узнать, что для работы NAND FLASH также необходимо выдавать команды.Таблица команд NAND FLASH приведена ниже.
Q2. Из руководства по микросхеме NAND FLASH мы видим, что для работы с NAND FLASH нам нужно сначала подать команду. Как передать команду?
Ответ 2. Передача данных, адреса и команд на DATA0 ~ DATA7:
Когда ALE высокий, адрес передается.
Когда CLE высокий, команда передается.
Когда ALE и CLE имеют низкий уровень, данные передаются.
Вопрос 3. Линия данных подключена как к NAND FLASH, NOR FLASH, SDRAM, DM9000 и т. Д.
Итак, как избежать помех?
Ответ 3. Эти устройства должны быть «выбраны» для доступа. Невыбранные чипы работать не будут, что равносильно тому, что они не подключены.
Вопрос 4. Если предположить, что NAND FLASH запрограммирован, после отправки в него команды, адреса и данных однозначно невозможно завершить программирование NAND FLASH мгновенно.Как судить о завершении программирования?
Ответ 4. Судя по статусному контакту RnB: высокий уровень означает готовность, низкий уровень означает занятость.
Вопрос 5. Как работать с NAND FLASH?
Ответ 5. Согласно руководству по эксплуатации микросхемы NAND FLASH, общий процесс таков:
Глядя на таблицу команд выше, это непросто увидеть. Давайте взглянем на диаграмму последовательности чтения идентификатора.
В каждую флэш-память NAND встроены некоторые идентификаторы (например, идентификатор производителя, идентификатор устройства), временная диаграмма просматривается слева направо, а вертикальное отображение - столбец за столбцом.
Для нашего s3c2440 внутри интегрирован контроллер NAND FLASH, простая схема подключения 2440 к периферии, как показано на рисунке ниже
Контроллер NAND FLASH помогает нам упростить работу с NAND FLASH. Давайте проанализируем работу периферийных NAND FLASH без использования контроллера NAND FLASH и с помощью контроллера NAND FLASH.
Отправьте команду:
Адрес отправки:
Прочитать данные:
Используйте UBOOT, чтобы испытать работу NAND FLASH:
На следующем рисунке представлена временная диаграмма операции чтения.
Для флэш-памяти NAND, хранящейся как 256 МБ, требуется 28 адресных строк для представления значения адреса. Согласно схематической диаграмме, используются только 8 адресных строк, поэтому требуется 4 цикла адресов. Для обеспечения совместимости с флэш-памятью NAND большей емкости, Отправьте адрес 5 циклов: (как показано на рисунке ниже)
2. Прочитать данные
S3C2440 | u-boot |
---|---|
Выбрано | Бит 1 NFCONT установлен в 0 |
Выдать команду 0x00 | NFCMMD=0x00 |
Адрес выпуска 0x00 | NFADDR=0x00 |
Адрес выпуска 0x00 | NFADDR=0x00 |
Адрес выпуска 0x00 | NFADDR=0x00 |
Адрес выпуска 0x00 | NFADDR=0x00 |
Адрес выпуска 0x00 | NFADDR=0x00 |
Выдать команду 0x30 | NFCMMD=0x30 |
Прочтите данные, чтобы получить 0x17 | val=NFDATA |
Прочтите данные, чтобы получить 0x00 | val=NFDATA |
Прочтите данные, чтобы получить 0x00 | val=NFDATA |
Прочтите данные, чтобы получить 0xea | val=NFDATA |
Выйти из состояния чтения | NFCMMD=0xff |
Программирование микросхемы памяти | Программирование микросхемы флэш-памяти NAND |
---|---|
инициализация | Инициализация контроллера NAND FLASH основной микросхемы управления |
Определить | Прочитать ID |
Прочитать операцию | Читайте по одной странице за раз (страница) |
Запись операции | Пишите по одной странице за раз (страница) |
Стереть | Стирать по одному блоку за раз |
Контроллер NAND FLASH должен обеспечить работу периферийных устройств NAND FLASH. Если другой внешний
периферийное устройство NAND FLASH, то его последовательность операций может быть другой, поэтому контроллер NAND FLASH выдает проблемы
Временная диаграмма отличается, поэтому мы устанавливаем контроллер NAND FLASH в соответствии с периферийными устройствами NAND FLASH,
Временная диаграмма NAND FLASH выглядит следующим образом:
Мы установили для HCLK значение 100 МГц на языке ассемблера, один цикл T = 1000/100 = 10 с, мы можем узнать из трех приведенных выше диаграмм: значение TACLS может быть 0; значение TWRPH0 может быть Это 1; значение TWRPH1 может быть 0.
Итак, регистр NFCONF установлен следующим образом:
На этом этапе время установки NAND FLASH было установлено, давайте включим его и включим NFCONT.
MODE [0]: установите значение 1, включите NAND FLASH.
Reg_nCE [1]: установить в 1, отключить выбор микросхемы. Потому что мы им еще не пользовались. Возьмем для примера неправильную операцию.
InitECC [4]: Инициализировать кодировщик ECC, который будет использоваться позже, мы устанавливаем его в 1 для инициализации.
Итак, регистр NFCONF настроен следующим образом:
На последнем уроке мы объяснили инициализацию NAND FLASH В этом уроке мы объясним, как читать идентификатор NAND FLASH.
Мы можем обратиться к руководству по микросхеме NAND FLASHh, как показано ниже: (Временная диаграмма операции чтения NAND FLASH)
Обычно мы сначала запускаем включение выбора микросхемы, и только после включения выбора микросхемы можно выполнять последующие операции. Код включения выбора микросхемы выглядит следующим образом:
Если включен выбор чипа, должен быть запрещен выбор чипа. Код для запрета выбора чипа следующий:
Схема последовательности операций чтения идентификатора выглядит следующим образом
Давайте проанализируем его слева направо. Сигнал выбора микросхемы похож на главный переключатель. Только когда сигнал выбора микросхемы включен, последующие операции будут иметь значение. Мы включаем После сигнала выбора кристалла вывод nCE выбора кристалла всегда находится на низком уровне. Из предыдущей диаграммы последовательности команд известно, что минимальные временные параметры tCLS и tWP равны 12us, что означает, что два сигнала CLE и nWE могут быть отправлены одновременно. Указывает, что требуется команда.Чтобы команда была записана, это зависит от команды, которая будет отправлена по шине данных.Когда CLE переходит с высокого уровня на низкий уровень, это означает, что последняя операция записи завершена.
Для вышеуказанного сложного тайминга мы можем использовать контроллер NAND FLASH на 2440, чтобы упростить операцию, просто записав команду, которая будет передана в регистр NFCMMD, и контроллер NAND FLASH по умолчанию отправит вышеуказанный сложный тайминг.
Ниже мы пишем код: функция для отправки команды и код функции для отправки адреса следующие:
Затем вы можете прочитать данные. Данные могут быть получены непосредственно путем считывания данных в регистре NFDATA. Согласно временной диаграмме, необходимо прочитать 5 байтов данных. Код выглядит следующим образом:
Откройте выбор микросхемы перед считыванием идентификатора микросхемы и прочитайте функцию идентификатора микросхемы, код выглядит следующим образом:
Затем мы напишем другую функцию для печати меню и вызовем функцию для чтения идентификатора чипа в меню. Код выглядит следующим образом
Вызовите функцию инициализации nand flash и тестовую функцию nand flash в основной функции.
В последнем разделе мы реализовали считывание идентификатора чипа, но программа превысила 4 КБ. Если мы хотим записать его на плату разработки, мы должны записать его в NOR FLASH. В этом разделе мы объясним чтение данных NAND FLASH. Получите и реализуйте программу, размер которой превышает 4k, запускается с NAND FLASH.
На следующем рисунке показана внутренняя структура NAND FLASH. Из рисунка видно, что страница содержит 2 Кбайт данных страницы и 64 байта области oob. Связь между данными страницы и областью oob будет представлена позже.
В таблице ниже показана внутренняя структура NAND FLASH. Первые 2 КБ (0
2047) представляют данные страницы, а последние 64 байта (2048
2111) представляют собой вн.
Ответ: Это 0-й байт страницы Page1. Когда ЦП использует определенный адрес для доступа к данным, он адресуется в пространстве данных страницы, а область oob вообще не отображается.
Мы знаем, что NAND FLASH имеет недостаток по сравнению с NOR FLASH. Когда NAND FLASH читает или записывает страницу данных, может произойти инверсия битов, и одна из них может быть неправильной. Чтобы решить эту проблему, введите область oob.
Когда он записывает данные страницы, он генерирует проверочный код при записи данных в данные страницы и записывает этот проверочный код в область oob. При чтении данных прочтите Когда выводится 1 страница данных, может быть ошибка в одном бите данных чтения 1. Он продолжает считывать исходный проверочный код и использует проверочный код в области oob для исправления данных в данных страницы. Отсюда можно сделать вывод, что область oob существует для устранения дефектов NAND FLASH.
ЦП: вы заботитесь только о данных, вам не нужно видеть проверочный код в области oob (считайте данные, проверьте их, а затем верните правильные данные, вот и все). Когда ЦП хочет использовать определенный адрес для доступа к данным, адрес адресуется в области данных страницы, а адрес вообще не адресуется в области oob.
Для наглядности давайте поговорим о юмористическом диалоге ниже, чтобы проиллюстрировать функции ЦП и NAND FLASH:
Главный процессор: Маленький Нанд, ваша производительность не так хороша, как и я слышал, что у вас небольшая проблема с инверсией
Нанд: Да, сэр, изменение моей позиции - это моя естественная ошибка.
Master CPU: Блин, вы сказали, что у вас дешевая цена и большая емкость. Мне это не больно?
Нанд: Ничего страшного, у меня есть рецепт, OOB может решить эту проблему
Главный процессор: Да, не говорите мне, каков ваш рецепт, я просто могу читать и записывать правильные данные
Нанд: Да, дядя, я использую это средство OOB в частном порядке. Вы можете позвонить мне, как используя ни
Затем мы начинаем писать программу, как мы должны читать NAND FLASH, ниже приводится адресный цикл NAND FLASH.
На следующем рисунке показана временная операция чтения NAND FLASH:
Шаги для чтения NAND FLASH: (с точки зрения программы) нам нужно сначала ввести команду 00, затем ввести адрес на 5 циклов, затем выполнить команду 30, а затем мы можем прочитать данные. Например: я хочу получить доступ к данным определенного адреса, мне нужно определить, какая строка является страницей (строкой), а какой столбец - столбцом (0
2047). Из цикла адресации NAND FLASH видно, что сначала выдаются 2 столбца (адреса столбцов), а затем выдаются адреса строк 3 (строк).
Ниже приводится подготовка программы:
Функция wait_ready ожидает освобождения NAND FLASHh. Из приведенного выше рисунка мы видим, что, когда значение регистра NFSTAT [0] равно 1, NAND FLASH свободен. Мы можем использовать этот бит, чтобы определить, будет ли NAND FLASH занятый. код показан ниже:
Функция nand_read - это функция чтения NAND FLASH, код выглядит следующим образом:
В файле init.c добавьте следующий код, чтобы определить, является ли используемая флэш-память НЕ ИЛИ флэш-памятью или флэш-памятью-НЕ. код показан ниже:
Добавьте следующий код в функцию copy2sdram в файле init.c для поддержки запуска NAND FLASH. Когда возвращаемое значение функции isBootFromNorFlash равно 1, она запускается из NOR FLASH, а когда возвращаемое значение функции isBootFromNorFlash равно 0, это из NAND FLASH запускается.
Что нам нужно сделать в этом разделе:
1. Реализуйте nand_erase
2, реализовать nand_write
3. Реализуйте тестовое меню.
Давайте реализуем их по очереди:
Упомянутые в этом разделе программирование и стирание NAND FLASH относительно просты. Они затрагивают только область данных страницы, а не область oob. Стирание основывается на блоке. На следующем рисунке показана временная диаграмма стирания:
Мы выдадим соответствующую команду и адрес в соответствии с временной диаграммой стирания. NAND FLASH стирается блоками. Если мы передадим значение len, он все равно сотрет блок (128 Кбайт). , Мы выполняем операцию стирания NAND FLASH в соответствии с руководством по чипу, функция функции: запуск с адреса addr, стирание данных о длине len. код показан ниже:
Перед использованием NAND FLASH выберите микросхему, после чего вы сможете выполнить операцию стирания NAND FLASH в соответствии с руководством по микросхеме. После операции отмените выбор микросхемы.
При записи данных в NAND FLASH просто скопируйте данные для записи в регистр NFDATA. код показан ниже:
На следующем рисунке показана диаграмма последовательности программирования:
Из временной диаграммы программирования NAND FLASH на приведенном выше рисунке мы можем знать, что для программирования NAND FLASH сначала введите команду 0x80, затем выполните цикл адресации, затем введите данные для программирования и, наконец, выполните 0x10, запустите внутреннее программирование и дождитесь успешного программирования. (Когда мы пишем данные, мы пишем их постранично, и адрес данных, который должен быть запрограммирован в начале, может не быть начальным адресом страницы). Вам необходимо выбрать выбор микросхемы перед операцией, отменить выбор микросхемы после операции, код следующий
Когда мы упаковываем функцию NAND FLASH операции стирания, размер каждого стирания составляет блок (128 * 1024). Код выглядит следующим образом:
Мы инкапсулируем функцию чтения NAND FLASH, мы реализуем чтение NAND FLASH каждый раз, каждый раз читаем 64 байта данных. Сохраните 64-байтовые данные, считанные с адреса addr, в буфере buf, а затем отобразите их через последовательный порт. Код показан ниже:
- Экран: 7" емкостный экран (1280x800 пикс), IPS матрица, мультитач
- CPU: Двухъядерный Cortex A9 1,6 ГГц
- GPU: Четырехъядерная Mali-400 1080P графическая система
- ОС: Android 4.1
- RAM: DDR3 1024MB
- Память: Встроенная 8GB, MicroSD карта (до 32GB)
- Сеть: Wi-Fi 802.11b/g/n
- Видео: H.264, MKV, AVI, RM, WMV, MPEG4, VOB, RMVB, DAT, FLV, 3GP, MOV. Поддержка YouTube, HTML5 и Flash10
- Аудио: MP1, MP2, MP3, WMA, WAV, AC3, AAC, OGG, APE, FLAC, 3GPP
- Фото: JPG, BMP, GIF, PNG
- Форматы электронных книг: TXT, LRC, PDF, HTML, HTM, EPUB, PDB, FB2
- Камера: фронтальная камера 2 Мп
- Особенности: Широкая языковая поддержка, OTG, функция записи, G-сенсор, встроенный динамик и поддержка USB/беспроводных клавиатур
- Питание: Зарядка через USB или от сети
- Батарея : 5000mAh Li-polymer
- Размер: 197 x 118 x 10 мм
- Вес: 303 г
ПЛЮСЫ Это конечно экран он просто супер, тач тоже в норме, Most Wanted НЕ тормозил и в общем скоростью он меня порадовал.
МИНУСЫ Явно что-то с аккумулятором на просмотре фильмов игре в 3д игры планшет выдержал около 4 часов, в не сильно активном использовании продержался 9-10 часов (при постоянном прослушиваний мп3. и где-то час активного использования.) Еще в нем есть непонятный писк который слышен уже где-то на расстоянии 10 см. но при яркости 100 он пропадает. Тоже купил недавно. И примерно похожие впечатления. Все с ним хорошо, за исключением аккумулятора. И ладно быстро разряжается при активном использовании, но почему так быстро садится в ждущем режиме (примерно за сутки) непонятно. В общем, смешанные чувства он вызывает. Причем везде указано емкость аккумулятора 5000 ма, но что-то очень сомнительно.
Кстати на официальном форуме есть коментарий по поводу аккамулятора Клик.
Если там действительо 3500 мАч, то это печально. Писк есть, но я слышу его только в плотную.
И у всех процессор работает на 1416 MHz?
а чем рутовали уважаемыйтоже хотелось бы . а информации в интернете не нашел
Лично я сделал так:
1. Сначало нужно установить драйвера (Лично я установил программу Moborobo, там драйвера при подключении устройства определились)
2. Воспользовался утилитой Unlock Root
Кстати вчера нашел полный китайский аналог - CUBE u21gt
Там есть более подробные инструкции по получению рута.
А кто-нибудь знает как сглаживание включить? Функция есть, но она не активна.
я после того как записал рут права скачал chainfire3d и записал драйвера от туда, он перезагрузился, показал картину включение и завис, и так каждый раз когда пытаюсь включить то же самое и не включается, что делать?как его перепрошить или от этой проблемы избавиться подскажите пожалуйсьта
Добавлено 27.02.2013, 15:25:
как его перепрошить или от этой проблемы избавиться подскажите пожалуйста
adnano
Перед установкой chainfire3d нужно было прочитать что он на 90% устройств с ICS не работает,а JB тем более.
Официальная прошивка тут: ссылка инструкция там-же
Прошил его прошивкой с оф форума от 20.11.2012 перестал работать WIFI и исчез синезуб. Пробовал прошивки от Cube U21GT, работают, но WIFI и bluetooth не работает. Кстати на них тоже максимальная частота процессора 1416 MHz._san4esua_
И как прошивки от Cube U21GT?
По поводу отволившихся WF и BT соображений нет, разве что на сток прошивку перейти и делать сброс/резет пока не появятся.
Ну или в СЦ отнести (хотя лишаться планшета на месяц . )
Ещё можно с лужбу поддержки написать, но с вероятностью 99% вас отправят в СЦ или попросят перепрошиться)
_san4esua_Это печально конечно.
У меня рутировался нормально, а прошивкутрогат не стал (работает и ладно) M4A9E15
И не стоит ее трогать пока не появится что-то вменяемое. Я его покупал девушке для чтения книг и он со своей функцией справляется на ура, надеюсь в обозримом будущем выложат прошивку в которой хотя бы самые неприятные баги исправят. В целом планшетом доволен стал после того как удалось починить спящий режим, с использованием в режиме читалки (не более часа в день) вполне может протянуть неделю на одном заряде, а из коробки просто пролежать сутки не хватало батареи. Еще по поводу батареи заметил что больше всего потребляет и греет GPU, но сделать с этим мы ничего не сможем без кастомного ядра с интерфейсом управления mali400, что тоже для данного аппарата из раздела фантастики :lol: _san4esua_
Если не секрет, как вам удалось починить спящий режим?
Его на день нельзя оставить, после полной разрядки минут за 5 только в рабочее состояние возвращается.
Мелких багов много, но они терпимы. Впрочем самым неприятным сюрпризом стал именно аккум на 3500 и проц на 1.4
(хотя похоже все рокчипы на 200 меньше, смотрел 4-х ядерный RK3188 написано 1.8 а антутупоказывает 1.6 либо это CUBE использует отбракованные процы понижая им чистоты для стабильной работы. )
kossih
Лично у меня первое время аккум с ума сходил, но через недельку стало всё более-менее норм, если планшет нравиться - оставляй.
UPD: (от компа он ооочень долго заряжаться будет ибо USB порт компа мало мАч выдаёт, а планшет то работает ещё. Заряжай зарядкой которая шла в комплекте, она довольно хорошая)
Читайте также: