 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Tor Sep 23, 2008 9:50 pm Naslov sporočila: LPC24xx SDRAM |
|
|
Ima kdo delujočo zadevo: kateregakoli LPC24xx in SDRAM? Zanima me inicializacija. Dokumentacija na NXP strani ni ravno najboljša, tista na ARM pa še manj. _________________ Answers: $1, Short: $5, Correct: $25, dumb looks are still free. |
|
Nazaj na vrh |
|
 |
silica Član

Pridružen-a: Ned 29 Avg 2004 20:01 Prispevkov: 360 Aktiv.: 1.52 Kraj: Logatec
|
Objavljeno: Tor Sep 23, 2008 10:29 pm Naslov sporočila: |
|
|
A ni mel Mare to na svojem bordu? Jutri vprasaj urosa, mislim da ima se en bord
na lpc24 in sdram.
lpt Tomaz _________________ Za www.quectel.com |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Tor Sep 23, 2008 11:08 pm Naslov sporočila: |
|
|
Ja, ampak konfiguracija se lahko precej razlikuje.
Torej, imam 2x MT48LC8M16A2, ki sta zvezana v 32bitno vodilo.
Datasheet: http://download.micron.com/pdf/datasheets/dram/sdram/128msdram.pdf
V nxpjevi kodi je precej nedoslednosti. Vseeno sem jo vzel za primer. Spremenil sem address mapping nastavitev:
Recimo EMC_DYN_CFG0 = 0x00004480;
Potem pa ostane še problem logičnega naslova mode registra, kjer je potrebno prebrati dummy vrednost z nastavitvijo.
Recimo dummy = *((volatile DWORD *)(SDRAM_BASE_ADDR | (0x21 << 12)));
Kako točno določit to šiftanje pa tudi ni nikjer dobro napisano. Zaradi slabih opisov tudi težko naredim "reverse"
Anyway, sem pa poskušal malce "uganit" pa nič ne pomaga. Samo upam, da SDRAM ni preveč pameten in pomaga samo power-off, če je slučajno narobe nastavljen.
P.S.
Pa je tisti SDRAM dejansko stestiran (mislim na maretov board, ima uros maretov board). Aja, ce ne uganes kaj ozivljam, ti povem jutri.  _________________ Answers: $1, Short: $5, Correct: $25, dumb looks are still free. |
|
Nazaj na vrh |
|
 |
Glitch Član

Pridružen-a: Pet 07 Apr 2006 11:40 Prispevkov: 1477 Aktiv.: 6.32
|
Objavljeno: Pet Sep 26, 2008 11:44 pm Naslov sporočila: |
|
|
Rešil problem, namesto pull-up upora je bil pull-up kondenzator. Ko sem ga odstranil, je zadeva začela delat kot mora. _________________ Answers: $1, Short: $5, Correct: $25, dumb looks are still free. |
|
Nazaj na vrh |
|
 |
PeterC Član

Pridružen-a: Tor 14 Dec 2004 20:22 Prispevkov: 204 Aktiv.: 0.86
|
Objavljeno: Čet Apr 16, 2009 1:43 pm Naslov sporočila: |
|
|
Se ukvarjam z Maretovim bordom, SDRAM mi napol brca.
Bega me tale stvar v nastavitvah ki sem jo našel v "Sample Code Bundle for LPC23xx/LPC24xx Peripherals using Keil's μVision":
Koda: |
dummy = *((volatile DWORD *)(SDRAM_BASE_ADDR | (0x33 << 12))); |
Kolikor razumem naredimo dummy read na tem naslovu in s tem obenem nastavimo ram. Ampak če pogledam Mode Register Definition na ramu, bi ustrezala adresa 0x33, zakaj torej šiftamo adreso za 12 bitov v levo?
Pa še nekaj, ali je tale koda v redu za testiranje enojnega vpisa čez cel ram:
Koda: |
volatile DWORD *wr_ptr;
DWORD i;
int j=0;
wr_ptr = (DWORD *)SDRAM_BASE_ADDR;
for ( i= 0; i < SDRAM_SIZE; i++ )
{
printf(" -> W: %X on Addr.: %X\n", j, wr_ptr);
*wr_ptr= j;
delayMs(1,200);
printf(" -> R: %X on Addr.: %X\n", *wr_ptr, wr_ptr);
wr_ptr++;
delayMs(1,200);
} |
_________________ Time is like a fuse, short and burning fast |
|
Nazaj na vrh |
|
 |
bpavsic Član


Pridružen-a: Pet 03 Apr 2009 20:45 Prispevkov: 354 Aktiv.: 1.79 Kraj: Maribor
|
Objavljeno: Čet Apr 16, 2009 2:28 pm Naslov sporočila: |
|
|
Sam sem se ravno ukvarjal s testiranjem sdrama na moji AVR ploščici in sem v prvi fazi naredil tak test, ki pa se je izkazal za pomanjkljivega.
primer:
zapisi podatek X na naslov A
preberi podatek iz naslova A
Velika verjetnost je, da bo podatek X, ne ves pa, ce je ta podatek bil dejansko zapisan na naslov A. Pri meni je bil problem, da sem imel "pokvarjeno" eno naslovno linijo (cisto slucajno A8). Zaradi tega AVR ni locil med naslovom npr. 4 in 260 (256 + 4), ker je A8 bil na ramu vedno 0 oz. 1 ne glede na to, kaj je AVR nastavil na naslovno linijo.
Preizkusil sem 2 hitri rešitvi:
- Generiranje datoteke s podatki na PCju, prenos le-te v AVRja (naenkrat) in potem branje in prenos nazaj na PC, kjer sem naredil compare.
- Generiranje podatkov v AVRju na osnovi fibbonaccijevega zaporedja x(n) = x(n-1) + x(n-2), ter nato branje celotnega pomnilnika lokacijo po lokacijo in preverjanje vrednosti v ramu z izračunano za tisto lokacijo.
Obe je rešitvi napolnita celoten ram in ga nato preverita (ne preverjata lokacije eno po eno). Za konec pa se lahko poskusiš ram napolniti s samimi 0 in s samimi 1. Na ta način boš še preveril če ti delujejo vsi biti v vseh pomnilniških lokacijah)
Tu je na hitro napisano testiranje s fibbonaccijem
Koda: |
volatile DWORD *wr_ptr;
DWORD i, v, v1, v2;
int j=0;
wr_ptr = (DWORD *)SDRAM_BASE_ADDR;
v1 = 0;
v2 = 1;
*wr_ptr = v1;
wr_ptr++;
*wr_ptr = v2;
wr_ptr++;
for (i=0; i < SDRAM_SIZE - 2; i++ )
{
v = v1 + v2;
*wr_ptr = v;
v1 = v2;
v2 = v;
wr_ptr++;
}
wr_ptr = (DWORD *)SDRAM_BASE_ADDR;
v1 = 0;
v2 = 1;
if (*wr_ptr != v1) printf("Error: addr - %X, written - %X, read - %X\n", wr_ptr, *wr_ptr, v1);
wr_ptr++;
if (*wr_ptr != v2) printf("Error: addr - %X, written - %X, read - %X\n", wr_ptr, *wr_ptr, v2);
wr_ptr++;
for (i=0; i < SDRAM_SIZE - 2; i++ )
{
v = v1 + v2;
if (*wr_ptr != v) printf("Error: addr - %X, written - %X, read - %X\n", wr_ptr, *wr_ptr, v);
v1 = v2;
v2 = v;
wr_ptr++;
}
|
p.s.:
SDRAM_BASE_ADDR | (0x33 << 12) pomeni SDRAM_BASE_ADDR or 0011 00110000 00000000
S tem postavi 4 bite v naslovu "SDRAM_BASE_ADDR" na 1 (13., 14., 17. in 18. bit)
lp, Bojan
edit: Aha, zdaj sem si se pogledal specifikacije za ram in še malo prebral temo. Verjetno se ne ukvarjaš s HW problemi same ploščice ampak z dejanskim stanjem rama na njej (preverjanje lokacij, ne pa če so address/data linije kje prekinjene itd...). |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 493 dni
Powered by phpBB © 2001, 2005 phpBB Group
|