PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : M16C und EEPROM bzw. FeRAM



prem
07.11.2006, 15:13
Hallo Zusammen,

Ich will gerne Daten von EEPROM(93LC76/86) bzw. FeRAM(FM25640-S) auslesen und drauf schreiben.

PS:Das soll über UART2 gehen und mein Mikrocontroller ist ein M16c6n-Group.

Weil ich in diesem Bereich Einsteiger bin und nicht viele Erfahrung damit habe,hoffe ich mal ,dass jemand mir hier dabei helfen kann,der schon Erfahrung damit hat.
Dankefür Eure Hilfe im Voraus.
Gruss Prem

gunzelg
07.11.2006, 19:57
Der FM25640-S hat eine SPI-Schnittstelle. Im datenblatt steht auch, wie man diese simulieren kann. Eine UART-Schnittstelle funktioniert da vermutlich nur, wenn man sie auf 8 Bit zwingen kann, also kein Start- und kein Stopbit, kein CRC, nur 8 Datenbit. Bist du sicher, dass dein Mikrocontroller keine SPI (TWI) Schnittstelle haz ?

Gerhard

prem
08.11.2006, 01:59
Hallo,

Der M16C6n hat doch eine SPI Schnittstelle,wieso denn?

In der App-Note steht ein Beispiel mit dem UART2,aber bei dem feht die wichtigste Methode "write()",so sieht meine Methode aus,aber geht immer noch nicht.

char FR_main_write( u16 addr , u08 daten)
{
unsigned char status;
if(addr>=FRAM_SIZE || daten >= (char)FRAM_SIZE){
status = CONTROLLER_ERROR_BAD_ADDRES;
return status;
}else {
FR_write_enable();
uart_begin(WRITE);
uart_tx(addr);
//FR_write_enable();
uart_tx(daten);
status=CONTROLLER_WRITE_OK;
uart_end();
}


return status;
}

wobei FRAM_SIZE=2048 ist.

Vielen Danke im Voraus :)

Gruß
PREM

gunzelg
08.11.2006, 16:16
Hallo

wie hast du den denn angeschlossen ? UART arbeitet mit einem eignen Clock (Baudrate), die musst du ja irgendwie rausgeführt haben und an das Bauteil anschliessen. Und wie ist deine UART-Schnittstelle konfiguriert ? Ein Takt wird bei SPI nur generiert, wenn Daten übertragen werden. Wo kommt also der Takt her ?

Gerhard

prem
08.11.2006, 21:50
Hallo,


Hallo

wie hast du den denn angeschlossen ? UART arbeitet mit einem eignen Clock (Baudrate), die musst du ja irgendwie rausgeführt haben und an das Bauteil anschliessen. Und wie ist deine UART-Schnittstelle konfiguriert ? Ein Takt wird bei SPI nur generiert, wenn Daten übertragen werden. Wo kommt also der Takt her ?

Gerhard

Also ich hab folgendes gemacht:

Portinitaliesierung:



void initPort (void) {


write_protect=0;
prc2=1; //Enable writing to port p9 directions register
pd9_3=port_ausgabe; //p9 direction register



chipselect=0;
prc2=1; //Enable writing to port p9 directions register
pd9_4=port_ausgabe; //P9 direction register

return;
}


Clockinitialisierung:



void initClock(void)
{
prc0 = 1; // unprotect cm1&0

cm0 = 0x18; // div-by-1 mode *High-speed mode (BCLK.)

prc0 = 0; // protect all

return;

}


UART2initialiesierung:



void Uart2_init(void)
{


// configure UART2 to be compatible with SPI Mode 3

special_mode_register = 0x00;

transmit_receive_mode_register = 0x01;

transmit_receive_mode_register_0 = 0x90;

transmit_receive_mode_register_1 = 0x00;

bit_rate_generator = 0x05;

return;


}



Chipselect(CS) ist mit dem P9_3 und Programenable(PE) ist mit dem P9_4 angeschlossen.

Hab ich hier was falsches gemacht?
muss man den Port von Clock auch initialiesiren (SKL mit p9_0)?

gunzelg
09.11.2006, 07:09
Dass eine Initialisierung des UART für SPI bereits vorgesehen ist, stimmt ja optimistisch, allerdings weiss ich jetzt immer noch nicht, wie du physikalisch den Speicherchip angeschlossen hast. Der Speicherchiop braucht einen Clock, wo kommt der her, und wie wird der erzeugt. Der muss synchron zu den daten des UART erzeugt werden. Also idealerweise ist das der audrate-Clock, so wie er für synchrone serielle datenübertragungen verwendet wird.

Gerhard

prem
09.11.2006, 21:24
Hallo,


Dass eine Initialisierung des UART für SPI bereits vorgesehen ist, stimmt ja optimistisch, allerdings weiss ich jetzt immer noch nicht, wie du physikalisch den Speicherchip angeschlossen hast. Der Speicherchiop braucht einen Clock, wo kommt der her, und wie wird der erzeugt. Der muss synchron zu den daten des UART erzeugt werden. Also idealerweise ist das der audrate-Clock, so wie er für synchrone serielle datenübertragungen verwendet wird.

Gerhard

Danke Dir ertsmal für deine Fragen,im Anhang sthet einen Teil von dem Schaltbild was man in dieser Stelle braucht.

Wenn Du schon mit ähnlicher Entwicklung/Impementierung befasst hast ,vielleicht kannst Du mir eine andere Möglichkeit mit einem Beispiel nennen,das wäre ganz nett von Dir :)

Gruss Prem

gunzelg
09.11.2006, 21:47
Soviel kann ich da nicht berichten. ich habe bisher nur einen SPI-Temperaturwandler an einen uC angeschlossen. Ein EEPROM steht mir demnächst bevor. Der uC den ich verwende hat aber einen SPI-Mode. Da werden nur die dazugehörigen register konfiguriert und fertig.

Von SPI weiss ich halt, dass dort z.B. nur ein Takt erzeugt wird, wenn Daten übertragen werden. Evtl musst du da mal ein oszi bemühen und überprüfen, ob beim daten senden auf der E_SIN-leitung was kommt und ob da auch die dazugehörigen Taktpulse erzeugt werden. Wenn man bestimmte Bitmuster schickt, z.B 0x55, kann man überprüfen, ob der Takt auch synchron mit jedem Datenbit erzeugt wird.

Gerhard

prem
09.11.2006, 22:15
Ich hab den Clock auch initialiesiert p9_0 ,Mit Oscilo. wird sich aber keine Änderung auf die Leitunf davon geben.

Deinen Vorschlag werde ich jetzt probieren,bis dann

Prem