www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

LPC24xx SDRAM

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Glitch
Član
Član



Pridružen-a: Pet 07 Apr 2006 11:40
Prispevkov: 1477
Aktiv.: 6.32

PrispevekObjavljeno: Tor Sep 23, 2008 9:50 pm    Naslov sporočila:  LPC24xx SDRAM Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
silica
Član
Član



Pridružen-a: Ned 29 Avg 2004 20:01
Prispevkov: 360
Aktiv.: 1.52
Kraj: Logatec

PrispevekObjavljeno: Tor Sep 23, 2008 10:29 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Glitch
Član
Član



Pridružen-a: Pet 07 Apr 2006 11:40
Prispevkov: 1477
Aktiv.: 6.32

PrispevekObjavljeno: Tor Sep 23, 2008 11:08 pm    Naslov sporočila:   Odgovori s citatom

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" Smile

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. Smile

_________________
Answers: $1, Short: $5, Correct: $25, dumb looks are still free.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Glitch
Član
Član



Pridružen-a: Pet 07 Apr 2006 11:40
Prispevkov: 1477
Aktiv.: 6.32

PrispevekObjavljeno: Pet Sep 26, 2008 11:44 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
PeterC
Član
Član



Pridružen-a: Tor 14 Dec 2004 20:22
Prispevkov: 204
Aktiv.: 0.86

PrispevekObjavljeno: Čet Apr 16, 2009 1:43 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
bpavsic
Član
Član



Pridružen-a: Pet 03 Apr 2009 20:45
Prispevkov: 354
Aktiv.: 1.79
Kraj: Maribor

PrispevekObjavljeno: Čet Apr 16, 2009 2:28 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> ARM arhitektura Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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