Прошивка чипов с SPI интерфейсом при помощи Raspberry Pi
-
Всем привет!
Как-то раз мне потребовалось прошить чип Flash памяти типа 25x40 Если прошивка заливается в чип через SPI интерфейс, то я обычно использую дешёвый китайский программатор CH341A. Но в этот раз чип никак не хотел прошиваться, хотя статусная полоска прогресса записи добегала до 100% без ошибок.
Тогда я решил подключить чип к SPI линии Raspberry Pi и прошить чип при помощи RasPi и программы Flashrom Сделать это оказалось несложно. Для тех, кто захочет использовать RasPi в качестве программатора я приведу в этом блоге небольшую инструкцию.
Подключаем чип к Raspberry Pi
CS - SPI_CE0 DO - MISO WP - 3.3V GND - GND VCC - 3.3V HOLD -3.3V CLK - SPI_CLK DIO - MOSI
Устанавливаем Flashrom
Перед установкой активируем SPI-интерфейс через raspi-config, либо подгружаем spi-модули ядра вручную при помощи modprobe Устанавливаем необходимые пакеты, от которых зависит успешная компиляция Flashrom:sudo apt-get install subversion pciutils pciutils-dev libusb-0.1 libusb-1.0 libusb-1.0-dev
Скачиваем последнюю версию исходников Flashrom из SVN репозитория, компилируем, устанавливаем
$ svn co svn://flashrom.org/flashrom/trunk flashrom $ cd flashrom $ make $ sudo make install
Прошиваем чип
Flashrom умеет определять тип подключенного чипа, стирать чип, записывать/считывать прошивку, верифицировать (проверять соответствие файла прошивки с записанной в чип информацией) чип.
Для прошивки чипа используется команда:
sudo flashrom -w /home/pi/firmware.bin -V -p
здесь -w - команда на запись прошивки (write), после неё указывается путь до файла с прошивкой (/home/pi/firmware.bin), -p - тип программатора. Если в качестве программатора выступает Raspberry Pi, то тип будет linux_spi:dev=/dev/spidev0.0, V - verbose режим (вывод служебных сообщений во время прошивки)
Перед записью чип желательно очистить командой
sudo flashrom -E -p linux_spi:dev=/dev/spidev0.0
Считать прошивку в файл можно командой
sudo flashrom -r /путь_до_файла/ -p linux_spi:dev=/dev/spidev0.0
Верификация
sudo flashrom -v /путь_до_файла/ -p linux_spi:dev=/dev/spidev0.0
Если запустить flashrom без параметров, то он попытается определить тип подключенного чипа
sudo flashrom -p linux_spi:dev=/dev/spidev0.0
Более подробно о командах flashrom можно прочитать тут:
man flashrom
https://www.flashrom.org/Supported_hardware - на этой странице можно найти список чипов, с которыми flashrom реально тестировался
На этом всё. Всем добра!