2018年7月7日土曜日

flashromの吸出し

Raspberry-piのSPIに3.3vSPIタイプのFlashromを直結し吸出しを行う

SPIインターフェイスは、MOSI,MISO,SCLKの3線Busに各デバイスをぶらさげ
デバイスセレクトを各個に接続する。raspiはCE0,CE1があるので2つのデバイスを接続可能。
/dev/spidev0.0 /dev/spidev0.1 に割付られる



結線は以下の通り
■ raspi側 P1コネクタ (1番ピンに印あり)
 1= 3.3V POWER                  2= 5.0V POWER
 3= GPIO0 / SDA(I2C)            4= 5.0V POWER
 5= GPIO1 / SCL(I2C)            6= GND
 7= GPIO4 / GPCLK0              8= GPIO14 / TXD(SCI)
 9= GND                        10= GPIO15 / RXD
11= GPIO17                     12= GPIO18 / PCM_CLK
13= GPIO21 / PGM_DOUT          14= GND
15= GPIO22                     16= GPIO23
17= 3.3V POWER                 18= GPIO24
19= GPIO10 / MOSI(SPI)         20= GND
21= GPIO9 / MISO(SPI)          22= GPIO25
23= GPIO11 / SCLK(SPI)         24= GPIO8 / CE0(SP1)
25= GND                        26= GPIO7 / CE1(SPI)
pin1-26は全機種共通(pin27-40は省略)

■ FlashROM側 (1番ピンに印あり)
1=CS        8=Vcc(3.3v)
2=DO        7=/HOLD
3=/WP       6=CLK
4=Gnd       5=DI

■結線
 raspi側               FlashROM側
24= GPIO8  / CE0 ------ 1=CS
19= GPIO10 / MOSI ----- 5=DI
21= GPIO9  / MISO ----- 2=DO
23= GPIO11 / SCLK ----- 6=CLK
25= GND --------------- 4=Gnd
17= 3.3V POWER ----+--- 8=Vcc(3.3v)
                   +--- 3=/WP
                   +--- 7=/HOLD
WP,HOLDはpullupする。



flashromのインストール
sudo apt-get -y install build-essential pciutils usbutils libpci-dev libusb-dev libusb-1.0-0 libusb-1.0-0-dev libftdi1 libftdi-dev zlib1g-dev subversion
svn co https://code.coreboot.org/svn/flashrom/trunk flashrom
cd flashrom
sudo make
sudo make install
Rasbian Stretch(Debian9)でSPIが安定しない(変な値が返る)ので、
1つ前のJessie(Debian8)を入れなおして使う



読み出しコマンド
flashrom -V -p linux_spi:dev=/dev/spidev0.0 -c "GD25Q128C" -r rom.bin
rom.binが作成され128Mbit(16MB)の読み出しが10分程度で完了する

FlashROMは製品によってコマンドなど異なる為、チップネームをパラメーターとして与える。
チップタイプは3byteのマニュファクチャIDで判別する。
chip        ID1 ID2
MX25L12845E C2 2018
MD25Q128SIG C8 4018 < 未対応だったがGD25Q128Cで読めた
W25Q128FVSG EF 4018



エンディアン変換

FlashROM readerにもバイトオーダー指定はあるが、short/long指定が無く常に2byte wordでの変換になるようなので、4byte word変換を行う簡単なツールを書いてこれを行った。

以下のように順番を入れ替える
ABCD|ABCD|ABCD|ABCD|ABCD|...

DCBA|DCBA|DCBA|DCBA|DCBA...

ubootのconfigと思われるubootenv
生ROM
_mraqerf0x0=2110 230duabetar511= 002toob=dmc nurobfsb todtooyaleb 2=ftoo=eliamIzb egisbs2=ezoc Mlosnvedeytt=0KGShte =tca17kge 10daht3=rd79:C:E0:E:2241:1lif ddae1C=r0000f...
エンディアン変換
arm_freq=0x10112032 baudrate=115200 bootcmd=run sfboot bootdelay=2 bootfile=zImage bsbsize=2M consoledev=ttySGK0 ethact=gk7101 ethaddr=3C:97:0E:22:E1:14 fileaddr=C100000...



ブロックに分割

ROMのパーテーションブロックは起動メッセージに表示されるので、これを頼りに分割をおこなう
[    0.640000] 0x000000000000-0x000000040000 : "uboot"    256k   0x40000
[    0.640000] 0x000000040000-0x000000050000 : "ubootenv"    64k   0x10000
[    0.650000] 0x000000050000-0x000000200000 : "kernel"   1728k  0x1B0000
[    0.660000] 0x000000200000-0x000001000000 : "rootfs"  14336k  0xE00000
[    0.670000] 0x000000000000-0x000001000000 : "all"  16384k 0x1000000

DDコマンドで切り出し
dd if=rom.bin bs=1024 skip=0 count=256 of=uboot.bin
dd if=rom.bin bs=1024 skip=256 count=64 of=ubootenv.bin
dd if=rom.bin bs=1024 skip=320 count=1728 of=kernel.bin
dd if=rom.bin bs=1024 skip=2048 count=14336 of=rootfs.bin

0 件のコメント:

コメントを投稿

NBD8008Rケース完成

コントロールパネル作成して、ダイソーのスタックボックスに収めました。 HDDは2.5インチ500GBが余ってたのでそれ使いました。静かで良いです。 カメラ3台H.246常時録画で40日くらい持ちそう。 マウス用にUSBコネクタをフロント出ししても良かったかも PP樹脂の...