Итак, загрузка A20 с NAND флешки оказалась довольно запутанным делом, выяснилось, что нет утилиты (по крайней мере мы такого не нашли) которая бы позволяла шить загрузчики на самой плате (т.е. замысел шить NAND с SD карты пока не возможен) ...
У китайцев есть утилита под названием PhoenixSuit (под linux и win), которая по USB льет специальным образом собранный образ, она же и пишет загрузчики ...
Возникает два отличительных момента (относительно загрузки с SD карты)
1) Штатный u-boot не применим для загрузки с NAND, т.к. в нем не реализована поддержка NAND и "впилить" ее туда представляется слишком трудоемким делом.
Беда в том штатный u-boot обладает "особенными" настройками DDR3 памяти и при тех же параметрах настроек памяти передаваемых через FEX файл, частота стабильной работы получается ниже (360МГц против 432МГц).
В дальнейшем, мы попробуем с этим разобраться (первые попытки оказались безуспешными).
2) Для нормальной работы Ethernet порта в режиме 1000M, необходимо добавить настройки в одном из регистров (TX delay, если правильно помню).
Штатно, это делалось в u-boot, но т.к. u-boot работающий с NAND мы использовали уже готовый, этой настройки в нем нет.
Самый простой вариант - добавить это в ядро, обновленный файл gmac_core.c так же лежит на ФТП в разделе images/Sunshine-A20/nand
В итоге, как программирование NAND на данный момент осуществляется: распаковывается образ (собранный для другой подобной платы), в нем заменяется архив с файловой системой (ядро и модули там же), заменяется FEX файл (настройки памяти и прочее), после чего образ обратно собирается. Этот "обновленный" образ и заливается в NAND через PhoenixSuit.
Неприятный момент заключается в необходимость самостоятельно паять USB переходник, т.к. загрузочный USB порт выходит только на штыревой разъем расширения X1: 3-DP, 4-DN, 40-GND (3 линий будет достаточно).
Манипуляции при программировании под Win
Скопировать файлы sunshine-a20.img и PhoenixSuit.rar с ФТП из раздела images/Sunshine-A20/nand
Распаковать PhoenixSuit.rar
Подключить USB переходник на X1.
Замкнуть J1 "Boot".
Включить питание платы. В системе должно появиться USB устройство, драйвер на него лежит в архиве PhoenixSuit.
После успешной установки драйвера, выключить плату.
Запустить PhoenixSuit.exe, перейти в раздел "Firmware" и указать путь до образа sunshine-a20.img.
Включить плату с замкнутым J1, через несколько секунд утилита автоматически запустит процесс обновления и спросит "тип" форматирования, лучше ответить "Yes".
Разомкнуть J1 (иначе, процедура повторится).
Весь процесс займет ~5 минут (по крайней мере в моем окружении такие цифры), следует заметить, случаются сбои и иногда утилита сама говорит что попытка не удалась, либо просто что то подвисает и утилита "вечно" ждет, поэтому следует ориентироваться на время выполнения всей процедуры.
Самостоятельная сборка образа
Скопировать в виртуальную машину архив mk_nand.tar.bz2 из раздела images/Sunshine-A20/nand, файлы imgrepacker-sk.tar.bz2, nand.fex, mk-nand-img.sh скопировать в корень папки buildroot.
Удостовериться, что скрипт mk-nand-img.sh имеет атрибут исполняемого файла.
Выполнить (пароль 123456).
В результате, в корне папки buildroot появится образ sk-a20.img, предназначенный для PhoenixSuit.
Если так все просто - почему все выкладывают имиджи для сюитов но никто не догадался выложить первый мегабаййт - знай лей и радуйся :) а то вон некоторые маются специально драйвер патчат
"Наша" NAND в точности та же самая, что и на Olimex или Cubieboard/Cubietrack.
Как Вам уже заметили, штатный бекап из самой системы не трогает первичные загрузчики, соответственно, если их там нет, то и копировать образы смысла уже нет.
у меня a20-lite, т.е. изначально нанда не было. из спортивного интереса припаял поочередно пару чипов - заранее скажу, что конечный результат отрицательный.. disclaimer - насколько я понял в отгружаемых китах sk-a20 чип нанд уже запаян и есть возможность прошивки начальных бутлоадеров по интерфейсу USB с помощью утилиты под windows. мне было интереснее получить доступ ко всем областям nand чисто программными средствами на самой системе..
почитав Wiki allwinner-a, я сдул со старой платы от планшета чип Micron, 8GiB, MLC, попилил его, потом сдул чип попроще Micron, 1GiB,MLC.. исходники юбута взял на гитхабе аллвинера.. посредством пинков и зуботычин, отладки и допиливания получил следующее:
грузим:
как видит это нанд:
нарезка разделов:
затираем блок 0, пишем кусок памяти, считываем из блока 0
всё - это результат максимум. в пределах блока 0 инфа пишется правильно и достоверно. к сожалению, только в 0, в при попытках записать "чуть больше" или "чуть дальше" пишется либо ерунда, либо вопли "timeout" или молча ребут..
выводы:
1. принципиальная возможность записи в нулевый блок есть - мешает странная скрытность компании Allwinner
2. исходники в стартовом составе малоработоспособны и могут "взлететь" на чипах, на которых их отлаживали..
3. зоопарк NAND очень велик и запутан, что усугубляется частым отсутствием документации на сами чипы и как следствие их ключевые параметры..
4. дальнейшего продолжения возни с нандом я не планирую, по причине отсутствия интереса (не мейнстрим)
зы пардон за "многобукв", в трех фразах не написать..