Archiv verlassen und diese Seite im Standarddesign anzeigen : M16C und EEPROM bzw. FeRAM
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
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
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
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
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)?
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
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
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.