Hallo zusammen
Habe hier ein eigenes Board mit einer Allwinner A13 CPU.
Habe für dieses Board nun ein u-boot compiliert und aufgespielt.
Ebenso habe ich den test auch mit einem u-boot bzw. Image von armbian
durchgeführt.
Auf dem Board befindet sich ein 128Mx16 Memory.
Leider zeigt u-boot beim Starten folgendes an:
1
U-Boot SPL 2020.RC
2
DRAM: 0 MiB
3
### ERROR ### Please RESET the board ###
Nun kommt natürlich ein HW-Fehler sehr wahrscheinlich in Frage. Dazu
hätte ich ein paar Fragen an die Experten unter euch.
1) Ich habe die Datenbits untereinander getauscht.
Was heist dies?: D0 = D0 | D1-D7 untereinander vertauscht
D8 = D8 | D9-D15 untereinander vertauscht.
Dies sollte m.M.n kein Problem darstellen. An anderere Stelle habe ich
gelesen, dass das LSB teilweise zur Kalibration herangezogen wird. Daher
D= = D0 und D8=D8.
2) Wie versucht u-boot die Speichergrösse zu bestimmen? Ich sehe an der
diff. ClockLeitung zum DDR3 nach dem Start von u-boot keine Aktivität
ausser dem wechsel von low (vermutlich unkonfigutiert) zu high. Dieser
Pegel bleibt dann auch bestehen. Es findet kein Tatken o.Ä. statt. Ist
dies plausibel?
- Die Beschaltung habe ich mehrfach geprüft. Sollte korrekt sein.
- Habe bereits viele BGA-96 aufgelötet. Bisher immer erfolgreich. Habe
den Chip auch bereits zweimal gewechselt. Dabei immer das selbe
Ergebnis. Daher denke ich mal nicht an einen Lötstellenfehler bzw.
Kurzschluss.
Bin über Vorschläge dankbar.
Grüsse
Krähe
Hi
Also meinen U-Booten geb ich die Speichergröße immer per
#define PHYS_SDRAM_SIZE SZ_256M
mit. Automatisch kann das U-Boot meines Wissens nur wenn Speichermodule
samt SPD-EEPROM verwendet werden.
Matthias
Danke für eure Antworten.
Μαtthias W. schrieb:> Hi>> Also meinen U-Booten geb ich die Speichergröße immer per>> #define PHYS_SDRAM_SIZE SZ_256M
Sehr interessant.
Das könnte sehr gut die Quelle des Übels sein.
Werde ich heute testen.
habeichvergessen schrieb:> https://linux-sunxi.org/Mainline_U-Boot>> Am Ende der Seite gibt es Hinweise zur SDRAM-Konfiguration in u-boot.
Vielen Dank. Hab ich bereits gesehen. Mein U-Boot ist entsprechend
deisem hier:
Μαtthias W. schrieb:> Also meinen U-Booten geb ich die Speichergröße immer per>> #define PHYS_SDRAM_SIZE SZ_256M
Du scheinst ein i.MX board zu verwenden, richtig?
Denn nach dem durchsuchen des u-boot git repos scheint dieses Define
hauptsächlich in Zusammenhang mit i.MX Prozessoren verwendung zu
finden...
Für Allwinner scheint es keine solche Einstellung zu geben... Bzw.
verwendet z.B. Olimex keine solche Definition bei deren Allwinner
Boards.
Holger K. schrieb:> Μαtthias W. schrieb:>> Also meinen U-Booten geb ich die Speichergröße immer per>>>> #define PHYS_SDRAM_SIZE SZ_256M>> Du scheinst ein i.MX board zu verwenden, richtig?>> Denn nach dem durchsuchen des u-boot git repos scheint dieses Define> hauptsächlich in Zusammenhang mit i.MX Prozessoren verwendung zu> finden...>> Für Allwinner scheint es keine solche Einstellung zu geben... Bzw.> verwendet z.B. Olimex keine solche Definition bei deren Allwinner> Boards.
Ja, ist ein iMX. War aber früher™ auch bei anderen ARM Systemen so. Bin
aber ehrlich gesagt nicht auf dem Stand von 2016 vor der Verwendung von
device tree und kconfig im U-Boot.
Matthias
Moin,
Koennt' es sein, dass bei den Allwinners noch vor dem eigentlichen uboot
ein SPL vorgeschaltet wird, der so Zeugs, wie SDRAM-Controller init
macht?
<hibbelhibbel>Ach was freu' ich mich schon auf den naechsten
Ramschkarton vom Pollin mit dem A20 Board drinnen</hibbelhibbel>
Gruss
WK
Dergute W. schrieb:> Koennt' es sein, dass bei den Allwinners noch vor dem eigentlichen uboot> ein SPL vorgeschaltet wird, der so Zeugs, wie SDRAM-Controller init> macht?
Nun, u-boot wird tatsächlich mit einem SPL erzeugt. Daher würd ich mal
sagen, ja.
Aber die frage ist, wo definiert ich nun die Memorygrösse?
Im SPL ja vemutlich. Aber bisher hab ich keinerlei Boardspezifische
Files in den u-boot Sourcen ausfindig machen können.
Holger K. schrieb:> Das ich diesen nicht messen kann, irritiert mich ein wenig.
Mit was misst du denn "den"? So ein paar 100MHz bei ein paar zig
Millivolt - das wird ja mit'm Phasenpruefer, Duspol oder der Zunge etwas
schwierig ;-)
Gruss
WK
Dergute W. schrieb:> Holger K. schrieb:>> Das ich diesen nicht messen kann, irritiert mich ein wenig.>> Mit was misst du denn "den"? So ein paar 100MHz bei ein paar zig> Millivolt - das wird ja mit'm Phasenpruefer, Duspol oder der Zunge etwas> schwierig ;-)>> Gruss> WK
Danke für deine Antwort.
Aktuell messe ich dies mit einem Oszilloskop mit 200MHz Analogbandbreite
sowie einem kapazitätsarmen Tastkopf.
M8 und H1??
VREF alle auf GND?
Da sollte eigentlich ein Spannungsteiler hin der nciht überall auf GND
gezogen ist...
Und ncoh einige andere Pins die irgendwie alle auf GND sind??
IC301A SVREF, IC300B VDD / VDDQ alle GND?
C210 / C211
Wenn das kein Darstellungsfehler ist... Ich dachte du kannst sowas?
Hattest du doch mal irgendwo geschrieben...
Ja, das Board ist Schaltungstechnisch fast 1:1 identisch mit dem Olimex
A13 SOM. Mit der Ausnhamne, dass ich die Datenleitungen des RAMs nicht
1:1 verbunden habe sondern innerhalb einer Lane D0..D7, D8..D15 geswapt
habe...
Wobei ich hier jeweils das LSB (D0, D8) belassen habe, da dies scheinbar
laut JEDEC für das Leveling verwendet wird.
No Y. schrieb:> Wenn das kein Darstellungsfehler ist... Ich dachte du kannst sowas?> Hattest du doch mal irgendwo geschrieben...
Nun ja, ich dachte auch, dass ich sowas kann. Zumindest habe ich bereits
einige vergleichbare Boards entworfen und zum funktionieren bekommen.
Schlussendlich kann man jedoch immer über Probleme stolppern...
Ist Altium oder?
Wir nutzen Mentor daher bin ich mir da jetzt nciht ganz sicher.
Ist es bei Altium egal welches Symbol das Netz hat? Ich meine du hast am
1.5v Schaltregler den Pfeil und überall woanders das "GND" Symbol. Ist
also korrekt so? Nicht das es da Labelfehler oder so gab.
Ansonsten was mir auffällt ich finde deine Abblockkondensatoren Menge
sehr grenzwertig für den RAM.
Wir packen da deutlich mehr dran... Schau lieber nochmal ins Datenblatt
deines RAM...
Wir haben auch eine Terminierung am ende der DRAM CLK...
Das tauschen der DQ Leitungen ist im prinzip ok.
Du solltest trotzdem mal DEINEN Schaltplan posten nciht den OLIMEX..
In der Schaltung da oben ist nämlich nichts geswapt wie du schreibst...
Besser wäre einen Spannungsteiler für RAM + CPU für die Ref Spannung zu
haben...
So hast du mehrere und bist nciht sicher ob die alle die gleiche REF
sehen..
No Y. schrieb:> Ist Altium oder?> Wir nutzen Mentor daher bin ich mir da jetzt nciht ganz sicher.>> Ist es bei Altium egal welches Symbol das Netz hat? Ich meine du hast am> 1.5v Schaltregler den Pfeil und überall woanders das "GND" Symbol. Ist> also korrekt so? Nicht das es da Labelfehler oder so gab.
Danke für deine Antwort.
Ja, das ist irrelevant, welches Symbol da ist. Für Altium ist das nur ne
Grafik. Der Name darüber ist der Netzname. Das stimm auf jeden Fall zu
100%. Das hätte ich sonst beim Layouten bemerkt.
No Y. schrieb:> Ansonsten was mir auffällt ich finde deine Abblockkondensatoren Menge> sehr grenzwertig für den RAM.>> Wir packen da deutlich mehr dran... Schau lieber nochmal ins Datenblatt> deines RAM...
Das stimmt, die ist relativ niedrig. Habe auch mal versuchsweise mehr
angehängt auf dem Board und zugleich auch noch die Spannungsstabilität
mit dem Oszi geprüft. War soweit immer in Ordnung. geringe Einbrüche im
Bereich von 5-10mV waren evtl. zu sehen. Wobei dies eher Rauschen war.
No Y. schrieb:> Wir haben auch eine Terminierung am ende der DRAM CLK...>> Das tauschen der DQ Leitungen ist im prinzip ok.
Das mit der Terminierung könnte durchaus noch ein Punkt sein...
Habt ihr nur den CLK terminiert?
No Y. schrieb:> Du solltest trotzdem mal DEINEN Schaltplan posten nciht den OLIMEX..> In der Schaltung da oben ist nämlich nichts geswapt wie du schreibst...
Das ist mein Schaltplan, so wie das Board von mir umgesetzt wurde.
Doch doch, da ist schon geswapt. Die Netznamen sind der Reihe nach, die
DRAM-Pins jedoch nicht...
No Y. schrieb:> Besser wäre einen Spannungsteiler für RAM + CPU für die Ref Spannung zu> haben...> So hast du mehrere und bist nciht sicher ob die alle die gleiche REF> sehen..
Ok ich sehe was du meinst. Das liesse sich ja durch ein
Litzchen/Drähtchen schnell ändern...
Sorry hab es jetzt gesehen, das die Nummerierung im "Symbol" geändert
wurde..
Ja nur die CLK Terminiert. Mit jeweils 49.9 Ohm und 100nF gegen DDR 1.5V
Quasi T geschaltet...
No Y. schrieb:> Ja nur die CLK Terminiert. Mit jeweils 49.9 Ohm und 100nF gegen DDR 1.5V> Quasi T geschaltet...
macht ihr dann auch allwinner boards oder i.mx6?
? hab in den Schaltplan vom i.MX6 geschaut.
Allwinner haben wir nicht.
Kann noch Rockchip und TI Sitara anbieten nachzuschauen.
Sowie andere i.MXer.
Hab mir auch nicht das Datenblatt deiner CPU angeschaut.
Und wenn Allwinner da nichts speziell gegen hat ist die Drehung der DQ
definitiv i.o. im i.MX6 haben wir es ebenfalls gemacht.
Vielen Dank für deine Unterstützung.
Das Datenblatt des A13 ist leider sehr dürftig.
Ich habe wirklich gehofft, dass ich das Teil so ans laufen kriege...
Ich werde nun also noch versuchen die Leitungen zu terminieren und die
VREFs zu verbinden.
Sehr viel mehr fällt mir dann nicht mehr ein.
Am Ende werdens wohl die vertauschten Datenleitungen sein... Ich sehr
bereits kommen...
Nein DQ vertauschen ist ok. Haben wir beim i.MX6 auch gemacht. D0 und D8
aber 1:1. Wenn die Chinesen daher bei Allwinner nicht das explizit
ausgeschlossen haben sollte es gehen. Dann ist es ggf. doch UBoot
Konfiguration. Aber da endet es bei mir. Hasse UBoot und wir verwenden
fast überall Barebox.
No Y. schrieb:> Nein DQ vertauschen ist ok. Haben wir beim i.MX6 auch gemacht. D0> und D8> aber 1:1. Wenn die Chinesen daher bei Allwinner nicht das explizit> ausgeschlossen haben sollte es gehen. Dann ist es ggf. doch UBoot> Konfiguration. Aber da endet es bei mir. Hasse UBoot und wir verwenden> fast überall Barebox.
Nun D0 und D8 hab ich ja auch 1:1. Leider ist die Doku derart dürftig,
dass ich keinerlei Informationen diesbezüglich gefunden habe. Ich habe
bei meinen Recherchen jedoch kein einizges Schema gefunden, bei welchem
die Datenleitungen vertauscht wurden (Beim A13). Ich dachte mir, komm,
einfach mal testen ^^...
Barebox kenn ich (noch) nicht. Den U-Boot Code habe ich inzwischen
soweit mit printf's ausgestattet, dass ich exakt weiss, wo es hackt..
Nämlich genau hier:
1
reg_val=readl(&dram->csr);
2
if(reg_val&DRAM_CSR_FAILED)
3
return-1;
4
5
return0;
Hier bekomme ich eine -1 retour, bzw. das DQS training ist
fehlgeschlagen. Da kann U-Boot selbst nicht mehr viel dafür...
Ich gehe stark davon aus, dass es ein HW-Problem ist.
Keine Ahnung ob man das beim Allwinner einstellen kann. Wir hatten bei
unser eigenen HW mit i.MX mal ehebliche Probleme mit dem RAM bei zu
hoher 'drive strength'.
Hab mal bei unserem Chinesen (Rockchip) geschaut...
Auch hier CLK terminiert. Aber DQ getauscht. Sogar so das D8 auf D0 und
D0 auf D8 rest ist durcheinander... Also aber nur durcheinander
innerhalb DQ1-DQ7 sowie Gegenstück. Aber hast du ja auch entsprechend
gemacht.
Aber auch hier die REF geht an RAM + Prozessor also selber
Spannungsteiler..
Beim TI AM335 auch gedreht , selber spannungsteiler aber keine CLK
Terminierung..
TI OMAP auch gedreht , selber refspannung, terminierung an clk + A pins.
I.MX7 Terminierung, gedreht, selber spannungsteiler...
Denke bei den ganzen anderen ist es auch so..
vielen Dank fürs nachschauen.
Somit sollte ich es mal mit CLK terminierung und mit gleichem
spannungsteiler versuchen.
Wenns dann immer noch nicht geht, müssen es fast die Datenleitungen
sein.
Wenn es die CLK-Terminierung sein sollte, müsstest Du doch mit dem Oszi
sehen, dass der da einen Takt ausgibt und dann Daten zurückkommen die
nicht passen. Ohne Takt wird der Prozessor es schwer haben
festzustellen, dass mit der Terminierung etwas nicht stimmt.
Auch wenn es die Vrefs sind, müssten erst mal etwas Daten fließen und
die dann durch die Vrefs falsch interpretiert werden.
Bist Du Dir sicher daß es nicht stattdessen irgendeine Lötzinnbrücke
unter dem IC oder ein ähnlicher Lötfehler auf Deinem Board ist? Ich
hatte gestern erst wieder einen Widerstand, der trotz von oben ok
aussehender Lötstelle keinen Kontakt zum Pad hatte...
Gerd E. schrieb:> Wenn es die CLK-Terminierung sein sollte, müsstest Du doch mit dem Oszi> sehen, dass der da einen Takt ausgibt und dann Daten zurückkommen die> nicht passen.
Das hab ich mir eben auch gedacht.
Aber aus irgendeinem Grund, kommt da gar kein Takt.
Gerd E. schrieb:> Bist Du Dir sicher daß es nicht stattdessen irgendeine Lötzinnbrücke> unter dem IC oder ein ähnlicher Lötfehler auf Deinem Board ist? Ich> hatte gestern erst wieder einen Widerstand, der trotz von oben ok> aussehender Lötstelle keinen Kontakt zum Pad hatte...
Eigentlich ja. Hab das IC auch bereits einmal erneut aufgelötet und alle
Pins gefühlte 100 mal überprüft und nochmals nachgelötet...
Daher würde ich mal sagen, dass es da zu 99% keinen Fehler hat.
Ich habe inzwischen neue Chips bestellt und versuche es vielleicht mit
einem zweiten board.
Gleichzeitig habe ich nun endlich mal einen verheissungsvollen Kontakt
zu allwinner erhalten in der Hoffnung, mehr Informationen zum DDR3
Interface zu erhalten.
msp430 schrieb:> Was war jetzt das Problem?
Leider hab ich das Problem bis heute nicht herausgefunden.
Ich kann es mir nicht erklären. Hab auch das Schema an Allwinenr zu
prüfung gesendet. Diese meinten auch, dass die Verdrahtung so ok ist.
Neue Chips aus China zu erhalten dauert immer ne ganze Weile.