Загрузчик для SPI NOR Flash одноплатного ПК OrangePi Zero2


    Intro       SPL     Shell     Env     FDT     USB     Net     SPI  

Как использовать SPI NOR Flash на плате OrangePi Zero2

Как известно, на плате OrangePi Zero2 имеется микросхема MX25L1606E, это энергонезависимая память с синхронным последовательным интерфейсом (SPI NOR Flash) емкостью 2 Mбайт. В поставляемом от производителя устройстве эта память девственно чиста и штатным программным обеспечением (Android или Linux) никак не используется. В текущей версии руководства пользователя OrangePi Zero2 информация по работе со SPI NOR также отсутствует.

Примечание. Обозначение памяти расшифровывается так: NOR = 'Not OR', в отличие от NAND = 'Not AND'. NOR - это память с произвольным доступом к любому адресу, т.е. даже к одному байту.

В то же время, имеющийся в SoC Allwinner H616 начальный (первичный) загрузчик BROM (см. Загрузочное ПЗУ (BROM) ) позволяет загрузить вторичный загрузчик Boot0 (он же SPL) и U-Boot непосредственно из SPI при отсутствии вставленной SD-карты с такими загрузчиками. Для этого должен быть собран специальный загрузчик u-boot-sunxi-with-spl.bin с включеннной в файле конфигурации (.config) поддержкой SPI. Имя такого бинарного файла u-boot-sunxi-with-spl.bin говорит о том, что это U-Boot c SPL (т.е. Boot0). Хотя, на самом деле, в начале файла лежит Boot0, который занимается загрузкой U-Boot, также присутствующего в этом файле. Кроме того, в нем содержатся переменные окружения (ENV) и дерево устройств FDT (в виде блоба DTB).

Ниже будет показаны примеры того, как пользоваться таким загрузчиком из оболочки U-Boot. Хотя нужно учесть, что прямо сейчас это сделано лишь с познавательной (или ознакомительной )целью. Для полноценного практического использования SPI заинтересованным пользователям потребуется дополнительное, более глубокое изучение и экспериментирование. Пока готовых рецептов нет. Но, как известно: "лиха беда начало".

Готовый файл загрузчика u-boot-sunxi-with-spl.bin с поддержкой SPI можно загрузить на странице форума 4PDA по ссылке: Загрузчик SPI для OrangePi Zero2 . Кроме того, этот файл имеется в zip-архиве Файлы загрузчика , в котором лежат два файла: spispl.bin и spispl.img. Первый из них - это копия файла u-boot-sunxi-with-spl.bin, а второй - тот же файл, но записанный со смещением 8192 (зачем он нужен - см. ниже).

Для демонстрации работы SPI-загрузчика будет использован ПК с Windows, а также плата OrangePi Zero2, которая соединена с этим ПК через UART (отладочный последовательный порт). При этом на ПК запущена терминальная программа MobaXTerm, а также запущен TFTP-сервер (например, HaneWin TFTP Server или любой другой). Этот TFTP-сервер будет использован для записи файла загрузчика в SPI Flash платы, а также для демонстрации работы загрузчика по сети через Ethernet.

Файл загрузчика u-boot-sunxi-with-spl.bi можно использовать не только для записи в SPI Flash, но и на SD-карту, и в обоих случаях он будет успешно стартовать, т.к. первичный загрузчик BROM, находящийся в SoC Allwinner H616 последовательно обращается к SD-карте и к SPI для проверки наличия сигнатуры 'eGONBT0' при поиске загрузчика BOOT0. Разница заключается лишь в том, что на SPI вторичный загрузчик должен лежать в самом начале, а на SD-карте - со смещением 8 Kbyte. Поэтому здесь мы будем использовать два файла (spispl.bin и spispl.img). Но после загрузки в память оба должны функционировать одинаково.




    Intro       SPL     Shell     Env     FDT     USB     Net     SPI