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
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.
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
Achtung PIC-Falle: Port A4 ist ein open collector Ausgang und benötigt unbedingt einen externen Pull-up Widerstand.
Komisch, das Ding will einfach nicht... Sind die den so Heikel auf die Timings, oder kanns sein das es defekt ist...?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.