Загрузочная SPI-флешка и SSD для Orange Pi Zero.

 

 

В данной статье я опишу процесс альтернативного, довольно простого метода по записи образа загрузчика в память SPI-флешки, думаю это пригодится многим, кто еще не освоился в “линуксах” и “апельсинах”, и осваивается так же как и я 🙂

Так же данная статья пригодится тем, кто захочет сделать программатор для копирования/записи SPI-чипов на основе Orange Pi Zero.

Возникла у меня идея загружать ОС (Armbian, Ubuntu и тому подобные) с USB mSATA диска, да так, чтобы SD флешка не использовалась вообще – SD (MMC) слот оставался пустым. По умолчанию, апельсин устроен так, что его самый “низкоуровневый” загрузчик обращается к SD (MMC) слоту или к SPI0 (spidev0.0). На плате есть контактные площадки под SPI микросхему в корпусе SOIC-8, например W25Q128FVSG (128 Mbit) подошла бы туда идеально. Кстати, некоторые новые платы уже поставляются с распаянными SPI маленького объема – Macronix MX25L1606E (16 Mbit).

 

И так, нужно записать образ загрузчика U-boot в память этой микросхемы, с настроенными файлами, для того чтобы загрузка начиналась (продолжалась) с USB флешки, кард-ридера или SATA адаптера.

Для этого мне потребовалось:

  1. Только сам “Апельсин” (на нем я и производил все операции).
  2. SPI-флешка 25q64fva1g. (Winbond W25Q64.V (8192 kB, SPI)).
  3. Запущенный на Orange с SD флешки Armbian_5.25 (оказалось, что проще использовать Armbian для Orange Pi One, об этом в статье описания).
  4. Утилита flashrom.
  5. Образ с U-boot`ом для spi-памяти (скачать архив файла образа U-Boot_8Mb).
  6. SSD диск в USB-mSATA адаптере.

Почти не имея опыта по работе с линуксом и малино-подобными компьютерами, я долго пытался выяснить как же это сделать, устал читать “непереводимые” мануалы, написанные опытными специалистами по линуксу. Но в итоге, сообразив на двоих с товарищем, решение было найдено!

 

По порядку:
Питание.

Самое первое, для подключения SSD диска – это необходимо обеспечить хорошее питание “апельсину”, иначе он просто не сможет стартануть с SSD диском в USB порте. Я питал Orange Pi Zero через OTG (micro USB) от USB 3.0 порта ноутбука, хорошим кабелем, и учитывая “качественное” напряжение ноутбука на шине USB у меня всё работает стабильно. Но в дальнейшем я планирую собрать отдельный БП для OPIZ, и снабдить конструкцию дополнительной шиной питания.

 

SPI-флешка.

Заказывать или где то покупать spi-микросхему не стал, вспомнил, что дома валяется не рабочая материнская плата, и на ней есть заветный чип 25q64fva1g памяти на 8mb (64mbit), для хранения bios. Он создан в корпусе DIP-8, и на МВ не распаян, а сидит в кроватке, что очень удобно, так что и я тоже решил сделать слот-кроватку для апельсина, тем более, что все-равно возникала необходимость в переходнике DIP-8 to SOIC-8.

Сначала, я хотел просто подогнуть ноги Socket-a, и распаять его прямо на контактные площадки, выводы удачно могли расположиться на места пайки, но это оказалось очень плохой идеей, и в процессе пайки я сорвал одну из площадок, прямо до дорожки, так что будьте аккуратны, видимо медные проводники на плате очень слабые, впрочем они же очень тонкие!

Пришлось распайку произвести с помощью короткого шлейфа, и с его же помощью восстановить оборванный контакт. Выводы кроватки разогнул по сторонам, чтобы они были подальше от платы, так и паять удобнее. Ключ микросхемы совместить просто и понятно, для разных корпусов он совпадает.

Возможно, в дальнейшем я немного изменю конструкцию.

 

Flashrom.

Память распаяна, и уже поддерживается Armbian-ом. Но, чтобы залить образ в память, понадобится утилита под названием Flashrom.

О том как ее установить и использовать, думаю можно найти достаточно информации. Но о том что понадобилось мне, далее:

Armbian на нашем “апельсине” уже запущен с SD карты с бортового SD/MMC слота. Устанавливаем утилиту (я, залогинившись под root пользователем, в терминале ввел):

apt-get install flashrom

далее даем ей команду, и проверяем флешку:

flashrom -p linux_spi:dev=/dev/spidev0.0

ответ:

flashrom v0.9.9-rc1-r1942 on Linux 3.4.113-sun8i (armv7l)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop… OK.
Found Winbond flash chip “W25Q64.V” (8192 kB, SPI) on linux_spi.
No operations were specified.

Видим нашу флешку – Winbond W25Q64.V (8192 kB, SPI)

Перед записью очищаем память чипа:

flashrom -E -p linux_spi:dev=/dev/spidev0.0

-E означает запись Erase, есть и другие команды, о них можно узнать из руководства к использованию flashrom.

Ответ утилиты:

flashrom v0.9.9-rc1-r1942 on Linux 3.4.113-sun8i (armv7l)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop… OK.
Found Winbond flash chip “W25Q64.V” (8192 kB, SPI) on linux_spi.
Erasing and writing flash chip… Erase/write done.

Записываем в память образ:

flashrom -w /home/u-boot_8.bin -p linux_spi:dev=/dev/spidev0.0

Я положил фаил в папку home, в директории armbiana, если вы положите его в другую папку, то измените путь. Не забудьте распаковать его из архива 🙂

-w означает запись образа.

Подсказка новичкам: мне было проще оперировать (копировать, перемещать) файлами через десктоп, доступ к которому я получил через vncserver. О том как просто можно получить десктопную версию Armbian, читайте описании Orange Pi Zero.

Получаем ответ:

flashrom v0.9.9-rc1-r1942 on Linux 3.4.113-sun8i (armv7l)
flashrom is free software, get the source code at https://flashrom.org
Calibrating delay loop… OK.
Found Winbond flash chip “W25Q64.V” (8192 kB, SPI) on linux_spi.
Reading old flash chip contents… done.
Erasing and writing flash chip… Erase/write done.
Verifying flash… VERIFIED.

 

Образ U-Boot.

U-Boot_8Mb – вес архива 215 КБ

Образ с U-Boot-ом, я нашел на форуме 4pda, в теме про “апельсин”, его туда выложил человек с ником hyphop. Но утилита, так просто его не принимает, ругается:

Error: Image size (448413 B) doesn’t match the flash chip’s size (8388608 B)

Видимо ей нужен точный размер образа, соответствующий снятому с данной флешки. Поэтому мы рискнули добить его “нолями” в HEX редакторе, и к моему великому удивлению – это заработало!

Этот образ имеет размер 8388608 байт, что соответствует объему моей флешки Winbond W25Q64, имейте это ввиду, если программа будет выдавать подобную ошибку.

 

Перезагрузка, загрузка с USB и SSD.

Чтобы осуществить все операции, Armbian_5.25 (для Orange Pi One) был загружен c SD флешки из SD слота, теперь можно освободить этот слот, и установить эту же самую SD флешку в USB картридер, и загрузится с USB порта, всё должно работать! Так же можно записать свежую чистую прошивку Armbian или Ubuntu или Debian (На данный момент я проверял родной Armbian_5.24 для Zero, но кажется у него какие то проблемы с поддержкой USB носителей, поэтому он не загрузился) на USB флешку или SSD диск установленный в USB-mSATA адаптер, ради чего я все и делал!

 

SSD диски.

На данный момент проверены в работе два накопителя, установленные в USB 3.0 адаптер:

OCZ NOCti 30G

SSD Netac N5M 120 Gb mSATA

 

 

27 февраля 2017