Hallo! Ich versuche zur Zeit zweifelhaft einen EEPROM über SPI zu beschreiben (93LC86 von Microchip).Hat jemand zufälliger Weise Erfahrung mit der Thematik? Das senden der Daten vom Pic auf den EEPROM funktioniert. Ich weiss nur nicht ob ich die Freigabe für das beschreiben richtig mache, oder ob es vielleicht timing Probleme gibt. An der clk Freuenz liegt es nicht diese ist unter der maximal erlaubten. Anbei auch noch ein kurzer Auszug aus meinem Programmcode.Hoffe jemand kann mir helfen.Danke! void SPI_init_memory(char chn) { unsigned int config= SPI_CONFIG_MSTEN| //set the Master mode SPI_CONFIG_MODE32; //set 32 bits/char SpiChnOpen(chn, config, 40);//clk 1MHz } void enable_memory() { LATFbits.LATF5=1;//chip select ein LATEbits.LATE0=1;//program enable ein delay_ns(100);//chip select setup time SPI1ACONbits.ON=1;//spi einschalten spi_send_data(0b10011000000000000000000000000000);//Steuerzeichen EN an LATFbits.LATF5=0;//chip select aus SPI1ACONbits.ON=0;//Spi aus delay_ns(400);//Chip select low time LATEbits.LATE0=0;//programm enable aus } void write_memory() { LATFbits.LATF5=1;//chip select ein LATEbits.LATE0=1;//programm enable ein delay_ns(100);//chip select setup time SPI1ACONbits.ON=1;//SPI einschalten spi_send_data(0b10100000000001010101010101010000);//daten schreiben auf 0x0 LATFbits.LATF5=0;//chip select aus SPI1ACONbits.ON=0;//spi aus delay_ns(300);Chip select low time LATEbits.LATE0=0;//programm enable aus } void main(void) { SPI_init_memory(3); enable_memory(); write_memory(); }
Martin schrieb: > Ich versuche zur Zeit zweifelhaft Versuch das mal besser ernsthaft... ;-) > Das senden der Daten vom Pic auf den EEPROM funktioniert. Das ist gut. Denn dann funktioniert bei SPI zwingend auch das Empfangen. > Ich weiss nur nicht ob ich die Freigabe für das beschreiben richtig mache, Meinst du den CS (aka SS)? > An der clk Freuenz liegt es nicht diese ist unter der maximal erlaubten. Das ist auch gut. Was ist also das Problem? Hast du überhaupt ein Problem? Hast du wenigstens deine Frage vor dem Absenden mal durchgelesen? Und? Wirst du schlau draus? > delay_ns(100); //chip select setup time Hmmm... Welchen uC mit welcher Taktfrequenz verwendest du nochmal?
Danke für die schnelle Antwort. Zu dem Problem der Freigabe: Der EEPROM ist schreibgeschützt. Erst durch senden eines bestimmten Datenpakets ist er beschreibbar.Mein Problem ist halt das,ich versuche den EEPROM freizuschalten und danach auf der Adresse 0 Daten zu schreiben und später wieder auszulesen. Und das beschreiben funktioniert halt nicht.Ich lese immer das selbe Ergebnis auf dem Speicherplatz aus, egal was ich hineinschreibe.Ich benutze einen PIC32 und die SPI-clk hat 1MHz.
...nimm einen logic analyser oder scope und schaue dir mal die signale auf den leitungen an ob das so elektrisch+timing alles hinhaut. wie ist z.b. deine spi-send funktion realisiert ? evtl. sind die bits alle noch gar nicht rausgeclockt, wenn du CS abschaltest... ? ist deine spi hinsichtlich msb oder lsb first richtig konfiguriert ? gruss, tom.
Hallo! Die Signale die der µC sendet sehen in Ordnung aus, die habe ich mir angeschaut.Das ist ja gerade das komische.Es wird genau das gesendet was ich will und der CS macht auch das was er soll.Ich habe auch die Hinweise im Datenblatt beachtet wie zum Beispiel aktiv Zustand des clk ist high und übernahme mit steigender clk Flanke.Ich weiss nicht ob ich sonst noch auf irgendwelche timing Sachen achten soll. meine sende Funktion lautet: void spi_send_data(unsigned int dat1) { //wait for the SPI channel to be idle while(SpiChnIsBusy(SPIchn)==1) { } SpiChnPutC(SPIchn, dat1); //wait for the end of transfering data to the SPI channel while(SpiChnTxBuffEmpty(SPIchn)!=1) { } } MfG
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.