Hardware | Flash ROM 복구기

|

1. 시작

PC 의 BIOS 를 업데이트 했습니다.

기종은 "IPMSB-H61-PEGA".


찾아보니 유통업체에서 바이오스를 공개하고 있더군요.


헤헤헷~ 하면서 다운로드 받았습니다.

뭐 항상 하던거... 하면서 실행했죠.


뭔가 잠깐 주의사항이 있었던것 같은데, 신나게 엔터를 두둘기다 보니 어느새 주의 문구는 지나가 버리고 실행이 되어버렸죠.


뜨헉!!!

부팅이 안되네요~!!!


눈 튀어나올 상황을 진성시키며... 아까의 주의사항이 뭔지를 잠깐 떠올려 봤습니다.

"용량이... " 어쩌고 했던것 같아요.


내가 뭘 실행시킨거지? 하면서 다른 컴으로 다운로드를 받은 링크를 확인해 봤습니다.



그랬습니다.

동일한 보드이지만, 하나는 8M 짜리고, 하나는 4M 짜리의 BIOS.

즉, 보드명은 같지만 용량의 차이가 있었네요.


이걸 어떻게 처음부터 아냐고...




2. 어떻게 하지?

PC가 벽돌이 된건 작년 2016년 11월 25일.

그 동안, 용산으로 가서 수리를 의뢰할까, Flash Rom 굽는 제품을 살까, 동일 보드를 살까 (아니 왜?) 등을 고민했습니다.


그렇게 시간이 흘러간 후, Arduino 를 가지고 놀다가 흠칫 생각이 떠올랐습니다.

Arduino 로 못할게 없는데, 혹시 Flash Rom 굽는게 가능할까?


검색을 하니, 여러가지 Arduino sketch 가 있네요!

이때가 올해 2017년 3월입니다.


아래는 그 여러 사례들 입니다.


* Unbricking the MSI 890FXA-GD70 after BIOS flashing failure with an Arduino

https://sinetek.io/2011/05/27/unbricking-the-msi-890fxa-gd70-after-bios-flashing-failure-with-an-arduino/


ArduinoでSPIシリアルフラッシュメモリW25Q64を使ってみる(1)

http://nuneno.cocolog-nifty.com/blog/2014/03/arduinospiw25q6.html


* SPI Flash programmer

https://github.com/nfd/spi-flash-programmer


* SPIFlash

https://github.com/Marzogh/SPIFlash


하늘이 무너져도 쏟아날 구멍은 있네요.




3. Flash Chip


우선 보드에서 BIOS 칩을 분리합니다.



사진을 찍으니 제품은 Winbond 사의 "25Q32BV" 입니다.

Datasheet 정보는 다음과 같습니다.


- w25q32bv_datasheet.pdf


Pin Configuration 은 아래와 같이 되어 있네요.


이게 제가 마주해야 할 Flash Chip 입니다.




4. Layout

Arduino 와 flash chip 의 배선 정보 입니다.


  W25Q32BV | Arduino Nano
---------------------------
    Pin 1  |     D10
    Pin 2  |     D12
    Pin 3  |     3.3V
    Pin 4  |     GND
    Pin 5  |     D11
    Pin 6  |     D13
    Pin 7  |     3.3V
    Pin 8  |     3.3V
---------------------------


동일한 칩은 아니지만,

일본 어떤 분이 winbond 사의 8M 짜리 flash chip 을 가지고 read/write 실험을 하신 분이 제작한 배선도 입니다.


- http://nuneno.cocolog-nifty.com/blog/2014/03/arduinospiw25q6.html



사양서와 동일한 Pin 배열인 것을 보니, 이 구성이 틀림이 없는것 같습니다.






5. Serprog/Arduino flasher

꽤 많은 분들이 Arduino로 flashrom 하고 있었습니다.


* Flashing a bios chip with an Arduino

https://tomvanveen.eu/flashing-bios-chip-arduino/


가장 깔끔한 방법은,

Linux 상에서 "frser-duino" 라는 어플을 이용하는것 같습니다.


* frser-duino

https://www.flashrom.org/Serprog/Arduino_flasher


위에 열거 했던 SPI Flasher 를 사용하면, read/write/erase 등이 모두 되지만,

ROM 파일을 address 0 번지부터 flashing 해주지는 못했습니다.


"소스코드를 분석하여 Windows 용 frser-duino 를 만들어 볼꺼야!" 라고 했지만,

저에게는 너무 어려웠습니다.

좀더 공부가 필요합니다.




6. Linux 머신을 만들자

Windows 용이 없으니, "frser-duino" 를 돌리기 위하여 우선 Linux 용 머신이 있어야 합니다.

PC의 여분은 없으나, 괜찮은 성능의 laptop 이 있어, Windows 10 상에서 Oracle Virtualbox 를 설치하고 Ubuntu 16.04 를 올립니다.


"frser-duino" 에서 설명된 대로 모든 패키지를 깔고 실행을 시키면,


"Reading old flash chip contents ..."


여기서 막혀 도저히 그 앞으로 진행이 되지 않습니다.


뭐가 문제일까 구글링 하다가 어느 사이트에선가 이런 문구를 보게 됩니다.

"CH340 칩을 쓴 Arduino clone 중국 제품은 buffer 에 문제가 있다..." 그래서 flashrom 을 성공시킨 사례가 없다.


그럼 정품 Arduino 를 구입해야 겠네? 정품을 구입합니다.


* Hardware | Arduino Micro 구입기

http://chocoball.tistory.com/entry/Hardware-Arduino-Micro-purchase


자 제품도 도착했고 준비가 모두 끝났으니 추가 진행을 서두릅니다.


음... make 명령을 이용하여 frser-duino 를 컴파일 하는 과정에서 뭔가 진행이 잘 되지 않습니다.

특히 Virtualbox 에서는 USB 연결시 미리 꽂아놓고 Windows 상의 설정에서 등록 후 Linux 를 띄워야 제대로 동작했죠.


그러던 중, 응? 주위를 둘러보니 MediaWiki 를 돌리는 Raspberry Pi 3 가 있네요 !!!!!!!!!

이것도 Linux 잖아! 참... 머리가 나쁘면 손발이 고생입니다.


바로 Raspberry Pi 3 의 Ubuntu Mate 에서 "frser-duino" 실행 준비를 합니다.

결과는...


성공 !!!


입니다. ㅠㅠ

그것도 그냥 Arduino Nano 의 중국 Clone 으로요.


Virtualbox 를 통한 Linux 에서는 외부 기기와의 buffer 문제가 있었던것 같습니다. 

문제의 원인은 CH340 이 아니였어요. ㅠㅠ




7. Flashrom 진행

여기서부터는 Raspberry Pi 3 에서 진행한 command 중심으로 기록을 남겨 봅니다.


먼저 필요한 package 들을 인스톨 합니다.



그 다음, frser-duino 를 git 으로 땡겨 옵니다.



USB 에 Arduino Nano clone 을 꼽습니다.

여러 site 들에서는 따로 driver 를 잡아줘야 한다고 하지만, Raspberry Pi 3 + Ubuntu Mate 에서는 자동으로 잡아줍니다.



device 로는 /dev/ttyUSB0 로 잡히는 것을 알 수 있습니다.

참고로 Arduino Micro 는 /dev/ttyACM0 로 잡힙니다.



Makefile 에서 device target 을 USB0 로 변경해 줍니다.



make 를 통하여 컴파일 및 Arduino 에 구동 프로그램을 밀어 넣어 줍니다.



필요한 ROM 파일을 다운로드 받습니다.



이제 대망의 마지막 단계인 flashrom 명령어로 Flash ROM 에 write 합니다.



위에서처럼 마지막에 "VERIFIED" 라고 뜨면 정상적으로 끝이 납니다.


아래 사진은 writing 시에 Arduino 의 RX LED 가 지속적으로 점등되는 모습입니다.

얼마나 감격스럽던지.



writing 시에 위에서 한컷.

궂이 Arduino Micro 는 필요가 없었습니다. ㅠㅠ



아쉬우니 동영상으로도 찍었습니다.





8. Commands

위에서 실시한 command 의 모음 입니다.

ROM 파일을 다운로드 하는 것은 PC 보드 기종에 따라 다르므로, 그 부분만 뺐습니다.


apt-get install flashrom gcc-avr binutils-avr gdb-avr avr-libc avrdude git

git clone --recursive git://github.com/urjaman/frser-duino

make ftdi
make flash-ftdi

flashrom -p serpgrog:dev/dev/ttyUSB0:115200 -w 2210.ROM




9. 부활한 PC 메인보드

이제부터는 승리의 기쁨인 부활한 보드 사진들 입니다.


Flash ROM 을 뽑았던 소켓입니다.



위아래를 알 수가 없어, 해당 보드를 판매했던 회사 홈피에서 이쪽 부분이 나와있는 사진을 참고 했습니다.

1번 pin 이 밑으로 가 있네요.



위의 사진 그대로 똑같이 꼽아 줍니다.



전원을 넣어 봅니다. 두둥!!!

오~~~~~ 켜졌습니다. 이때의 짜릿함을 위해 7개월을 기다렸습니다.



DEL 키를 눌러서 BIOS 진입합니다.

모두 정상으로 동작되네요. ㅠㅠ



참고로, 벽돌되기 전에 찍어 놓은 BIOS 화면이 아래 사진 입니다.

최신버전으로 구웠더니 자동으로 upgrade 가 되었습니다.



여기까지 온 김에 Windows 10 을 인스톨 해봅니다.

언제 고장났냐는 듯 잘 깔렸습니다.



CPU-Z 결과 입니다.



시스템 기본 정보 입니다.

이 화면을 봄으로써 이 작업은 종료입니다.





FIN

Arduino 생활은 즐겁습니다!

And