SRAM Write / Read Cycle

Gast #468869
Lesenswert?
• ▲
▼
Hallo miteinander

Ich probiere ein SRAM der Firma NEC ( uPD431000A-70LL) 128Kbyte mittels 
einen PIC18 anzusteuern. Die Addressen A0 - A7 sind an PORTE , A8-A15 an 
PORTF, A16 ist noch an PORTG bit 0. Die Datenleitug ist PORTD

Hier der C-Code

void write_to_ram(unsigned long RAM_Address, unsigned char data)
{
  //1. Set data Port to Output
  TRISD = 0x00;

  // 2. Do Addressing

  if(RAM_Address > 0x0000FFFF)
  {
    PORTAbits.RA0= 1;
  }
  else PORTAbits.RA0 = 0;

  PORTE = RAM_Address & 0x000000FF;
  PORTF = ((RAM_Address>>=8) & 0x000000FF);



  PORTAbits.RA4 = 0; //CE1 LOW
  PORTAbits.RA3 = 0;  // OE LOW
  PORTAbits.RA2 = 0; // Write = LOW
  PORTAbits.RA1 = 1; // CE2 HIGH

  putchhex(data); // RS-232 output for debug
  PORTD = data; // Put data to PORTD

  PORTAbits.RA1 = 0; // CE2 Low


}

unsigned char read_from_ram(unsigned long RAM_Address)
{
  unsigned char data;

  //1. Set data Port to Input
  TRISD = 0xFF;

  if(RAM_Address > 0x0000FFFF)
  {
    PORTAbits.RA0= 1;
  }
  else PORTAbits.RA0 = 0;

  PORTE = RAM_Address & 0x000000FF;
  PORTF = ((RAM_Address>>=8) & 0x000000FF);

  PORTAbits.RA4 = 0; //CE1 LOW
  PORTAbits.RA1 = 1; // CE2 HIGH
  PORTAbits.RA3 = 0;  // OE LOW
  PORTAbits.RA2 = 1; // WE HIGH   (noted in remark)

  data = PORTD;
  putchhex(data);

return data;

}

was sicher auffällt ist das ich gar keine Delays eingebaut habe, den das 
SRAM ist ein 55ns. Der PIC wird mit 10Mhz betrieben, als habe ich mal 
angenommen das ich keine verzögerungen in den ns bereiche brauche, hier 
noch der Link zum Datasheet:

http://pdf1.alldatasheet.com/datasheet-pdf/view/97595/NEC/UPD431000ACZ-70LL.html

Irgendwie kann ich wenn ich zuerst schreibe, dann lese, nichts lesen...
An was könnte das liegen, elektrisch scheint es in Ordnung zu sein...

Mfg
Gast #468960
Lesenswert?
• ▲
▼
Ein CE reicht aus, also CE2 dauerhaft auf 1 pinnen.
"CE controlled write" reicht aus, also /OE fest auf 0 pinnen.

Write:

PORTAbits.RA2 = 0; // WE LOW
PORTAbits.RA4 = 0; // CE1 LOW
...
PORTAbits.RA4 = 1; // CE1 HIGH

Read:

PORTAbits.RA2 = 1; // WE HIGH
PORTAbits.RA4 = 0; // CE1 LOW
...
PORTAbits.RA4 = 1; // CE1 HIGH


Mit dem Timing der PICs nicht ich nicht so vertraut, aber bei AVRs würde 
das so nicht ohne Verzögerung vor dem Lesezugriff funktionieren, da 
deren Inputs durch eine stark verzögernde Register/Latch Kombi laufen, 
und daher in einer out/in Befehlsfolge kaum Zeit bleibt.
Gast #469013
Lesenswert?
• ▲
▼
 A.K. (Gast)

> Mit dem Timing der PICs nicht ich nicht so vertraut, aber bei AVRs würde
> das so nicht ohne Verzögerung vor dem Lesezugriff funktionieren, da
> deren Inputs durch eine stark verzögernde Register/Latch Kombi laufen,
> und daher in einer out/in Befehlsfolge kaum Zeit bleibt.

Nanana, was heisst hier "stark verzögernde Register/Latch Kombi"? Das 
ist genau 1 Takt den man zwischendurch Pause machen muss. Da kann man 
irgendwas sinnvolles erledigen oder zur Not NOPen. ;-)

MfG
Falk

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.