Forum: Mikrocontroller und Digitale Elektronik SPI flash GD5F1GQ4UB auslesen


von Robert W. (rwalli)


Lesenswert?

Hallo!

Ich bin Anfänger in diesem Bereich und möchte gerne einen GD5F1GQ4UB SPI 
flash auslesen (http://www.gigadevice.com/product/detail/7/466.html).
Nun hab ich bei der Suche nach passender Hard- und Software nichts 
gefunden: PonyProg und flashrom unterstützen diesen Chip nicht.
Suche ich hier am falschen Ort oder gibt es keine Softwareunterstützung 
für diesen Chip?

könnte mir jemand einen Tipp geben in welcher Richtung ich weitersuchen 
soll, bzw. ob ich das vergessen kann?


Robert

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Robert W. schrieb:
> könnte mir jemand einen Tipp geben in welcher Richtung ich weitersuchen
> soll, bzw. ob ich das vergessen kann?

 So etwas kann (fast) jeder uC, ATMEL MEGA auf jeden Fall.
 Falls du aber nicht programmieren kannst, wird es schon schwieriger.

von Robert W. (rwalli)


Lesenswert?

Marc V. schrieb:

>  So etwas kann (fast) jeder uC, ATMEL MEGA auf jeden Fall.
>  Falls du aber nicht programmieren kannst, wird es schon schwieriger.

Hallo Marc, danke für Deine Antwort!

Ich hab ein wenig Erfahrung mit ATMEL aber nicht mit SPI und hab auf 
Deine Anregung mal schnell quergelesen:
Eine Bibliothek habe ich nur für Winbond Flash Memory Chips gefunden 
(SPIFlash).

Bleibt da nur noch die SPI-Bibliothek mit den Kommandos aus dem 
Datenblatt?


Robert

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Robert W. schrieb:
> Bleibt da nur noch die SPI-Bibliothek mit den Kommandos aus dem
> Datenblatt?

 DaBla für Flash ?
 Falls du das meinst, dann ja.
 Ich kenne dieses Flash nicht, aber es sollte nicht übermässig
 schwer sein - Kommandos raussuchen und probieren, zuerst mit
 irgendeinem Register oder ID auslesen oder so ähnlich...

von hp-freund (Gast)


Lesenswert?

Schade das Du nicht mit STM32 arbeitest.
Für den und deinen Chip gibt es hier etwas:

https://github.com/rgwan/stm32-gcc/blob/master/workspace/src/msc/bsp_nand.c

Vielleicht lässt sich daraus eine abgespeckte Version für AVR machen.

von Robert W. (rwalli)


Lesenswert?

hp-freund schrieb:
> Schade das Du nicht mit STM32 arbeitest.

Einen STM32 hab ich rumliegen.

> Vielleicht lässt sich daraus eine abgespeckte Version für AVR machen.

Da ist ja gleich ein ganzes Dateisystem dabei...
Ich befürchte das macht die Sache kompliziert.

Da fällt mir ganz was anderes ein:

Wie lesen eigentlich die ganzen Minirouter die flash-chips?
Ist das alles closed source oder könnte das mit einem Raspberry mit 
linux "out of the box" funktionieren?

Robert

von hp-freund (Gast)


Lesenswert?

Weißt Du denn was drauf ist?
Vielleicht ein Dateisystem?

Auf jeden Fall gibt es einen Linux Treiber für den Chip.

[dumme Idee]
Was würde der Chip in einem SD Adapter machen?
[/dumme Idee]

von Robert W. (rwalli)


Lesenswert?

hp-freund schrieb:

> Weißt Du denn was drauf ist?
> Vielleicht ein Dateisystem?
>

ja, auch, aber ich möchte ein image file.

>
> Auf jeden Fall gibt es einen Linux Treiber für den Chip.
>

Super! ich probier das mal mit dem raspberry pi!

> [dumme Idee]
> Was würde der Chip in einem SD Adapter machen?
> [/dumme Idee]

Ich habe leider keine Ahnung was ein SD-Adapter macht.

Robert

: Bearbeitet durch User
Beitrag #4981903 wurde von einem Moderator gelöscht.
von Christian U. (christian_u189)


Lesenswert?

Hallo!

Ich möchte bei hp-freund und rwalli herzlich für die guten Ideen 
bedanken!

Mir ist es damit gelungen ein SPI Flash GD5F1GQ4UB von Gigadevice mit 
einem Raspberry Pi (1B) auszulesen.

Den Treiber [1] gibt es aber erst seit 2019 im Mainline-Kernel (5.3).
Der Raspbian Kernel ist derzeit 4.19, also habe ich den den 
Mainline-Kernel (5.4) kompiliert. Support für MTD Block Device und 
SPI-NAND habe ich in der Kernel-Konfiguration aktiviert. Weil der 
Mainline-Kernel keine Device-Tree-Overlays unterstützt habe ich einen 
Eintrag für das SPI-NAND direkt in das DTS gesetzt. Noch ein kleiner 
Bugfix im Treiber und das Flash erscheint als /dev/mtdblock0. Ich 
kopiere es gerade mit dd und sehe bereits gültige Daten.

Bei Interesse kann ich den Prozess und genauer beschreiben und meine 
Patches teilen -- oder gar ein Image für den Raspberry Pi bereitstellen.

Danke nochmal für die Ideen!

Christian

[1] 
https://github.com/torvalds/linux/blob/master/drivers/mtd/nand/spi/gigadevice.c

von Mario (Gast)


Lesenswert?

Hallo Christian,

ich bin sehr an Details zum Prozedere interessiert (besonders am DTS mod 
und Patch) - ich stehe vor dem selben Problem and Daten aus diesem 
Chiptyp zu bekommen.

Danke,
Mario

von Christian U. (christian_u189)


Lesenswert?

Hier sind Binaries: 
https://drive.google.com/file/d/1WoTvIU7dZOQgkUYEzVBCMg9yF_WlHS7y/view?usp=sharing
Patches kommen noch.

Ein kleines Kochrezept dazu:

Die Basis ist Raspberry Pi OS (früher Raspbian genannt) auf einer 
SD-Karte. Ich verwende 2020-05-27-raspios-buster-lite-armhf.zip.

Die SD-Karte muss einmal bis zum Login-Prompt gestartet werden, weil der 
erstmalige Prozess sonst scheinbar nicht funktioniert.

Den Inhalt von rpi1-spinand-v1.zip dann auf die Partition "boot" der 
SD-Karte entpacken. In einem Raspberry Pi Model 1B(+) starten. Andere 
Modelle werden vermutlich nicht alle funktionieren -- sie starten den 
falschen Kernel.

Version prüfen:
pi@raspberrypi:~$ uname -a
Linux raspberrypi 5.4.0+ #3 Wed Jan 22 23:20:14 GMT 2020 armv6l 
GNU/Linux

Kernel-Module entpacken:
pi@raspberrypi:~$ sudo tar xfz /boot/lib_modules_5.4.0+.tar.gz -C 
/lib/modules

Den Kernel-Output mitverfolgen:
pi@raspberrypi:~$ tail -n 0 -f /var/log/kern.log &

Treiber laden:
pi@raspberrypi:~$ sudo modprobe spinand
May 27 09:02:53 raspberrypi kernel: [  311.606977] spi-nand spi0.0: 
GigaDevice SPI NAND was found.
May 27 09:02:53 raspberrypi kernel: [  311.607008] spi-nand spi0.0: 128 
MiB, block size: 128 KiB, page size: 2048, OOB size: 128

spinand versucht die ID auszulesen und erkennt daran den Typ. Es weden 
die SPI-Pins des Raspberry Pi mit 10 MHz und CS0 verwendet.

Falls es Hardware-Probleme gibt kann das wiederholt werden:
pi@raspberrypi:~$ sudo rmmod spinand ; sudo modprobe spinand
May 27 09:04:18 raspberrypi kernel: [  396.260712] spi-nand spi0.0: 
GigaDevice SPI NAND was found.
May 27 09:04:18 raspberrypi kernel: [  396.260742] spi-nand spi0.0: 128 
MiB, block size: 128 KiB, page size: 2048, OOB size: 128

Die ersten 128 Byte lesen:
pi@raspberrypi:~$ sudo head -c 128 /dev/mtd0 | hd
00000000  10 00 00 24 00 00 00 00  80 00 3f 7c 80 00 3f 80 
|...$......?|..?.|
00000010  80 00 40 00 80 00 40 60  80 00 00 00 80 00 40 00 
|..@...@`......@.|
00000020  80 00 bf d0 00 00 00 00  00 00 00 00 00 00 00 00 
|................|
00000030  80 00 21 f0 80 00 22 94  80 00 22 8c 80 00 39 a8 
|..!..."..."...9.|
00000040  80 00 3a 94 80 00 3a 94  80 00 3a 94 80 00 3a 9c 
|..:...:...:...:.|
00000050  80 00 25 98 80 00 3a a4  80 00 3b 5c 80 00 21 50 
|..%...:...;\..!P|
00000060  80 00 16 44 80 00 16 4c  80 00 23 54 80 00 16 24 
|...D...L..#T...$|
00000070  80 00 24 98 80 00 16 54  80 00 22 e0 80 00 3a 94 
|..$....T.."...:.|
00000080

Ein Image erstellen und Fortschritt ansehen:
pi@raspberrypi:~$ sudo dd if=/dev/mtd0 of=/boot/spinand.img bs=16k &
[2] 514
pi@raspberrypi:~$ sudo kill -USR1 514
253+0 records in
252+0 records out
4128768 bytes (4.1 MB, 3.9 MiB) copied, 35.0957 s, 118 kB/s
pi@raspberrypi:~$ sudo kill -USR1 514
581+0 records in
580+0 records out
9502720 bytes (9.5 MB, 9.1 MiB) copied, 80.4399 s, 118 kB/s

von Christian U. (christian_u189)


Lesenswert?

Hier das Ganze in Aktion: 
https://photos.google.com/share/AF1QipP5M9s_O8QJaqFuOtV1GZZSeEtGuUNJW1Fw4fSZsZfwZpwejPcniprRKlQ05TXg8g?key=aU9BRER4aG1CenBsU1kxOWVKTUdqdDJZMTBUNjl3

Es wird der Flash von einem DSL-Router ausgelesen. Damit ich nicht 
auslöten muss habe ich den Router eingeschaltet und per Konsole am UART 
den Startvorgang des Routers im Bootloader gestoppt. Dann klappt der 
Zugriff vom Raspberry Pi.

von Christian U. (christian_u189)


Lesenswert?

Hier sind Patches gegen Mainline Linux 5.4:
https://pastebin.com/bgFDtb40
https://pastebin.com/X6K1EeAK
Sollte sich analog auf alle Kernel ab 5.0 anwenden lassen.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.