- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 16

Thema: Pic Mikrocontroller + externer Flash-Speicher

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    07.01.2005
    Beiträge
    10

    Pic Mikrocontroller + externer Flash-Speicher

    Hallo
    Ich möchte mit einem Pic-Mikrocontroller einen Flash-Speicher lesen und beschreiben(nur einfache Variablenwerte) und habe bis jetzt noch nie mit dem SPI-Bus gearbeitet.
    Leider klappt es nicht, obwohl ich jetzt schon 2 Wochen experimentiere:
    Pic 18F4620 - 8MHZ-Quarz
    Flash ist das Flash-Click von Mikros mit einem M25P80
    Ich poste meinen C-Code und 3 Bilder vom Oszilloskop.

    Beim SDI_CLOCK des Flash sieht man das 0x06 Byte, welches zum Flash gesendet wird im Vergleich zur Clock. Sollte eigentlich passen: bei steigender Flanke liegt Bit1+Bit2 an, Bit0 wieder 0.
    Klicke auf die Grafik für eine größere Ansicht

Name:	SDI_CLOCK.jpg
Hits:	10
Größe:	32,0 KB
ID:	26198
    den SDO des Flash(ALLES.Jpeg) hab ich als Gesamtbild aller 5 übertragenen Bytes, damit man sieht, dass da gar nichts passiert, ausser ein leichtes Ansteigen am Anfang.
    Klicke auf die Grafik für eine größere Ansicht

Name:	ALLES.jpg
Hits:	6
Größe:	31,7 KB
ID:	26199
    Beim CS-Bild sieht man das Clock-Signal im Vergleich zum CS-Signal.
    Klicke auf die Grafik für eine größere Ansicht

Name:	CS.jpg
Hits:	8
Größe:	31,1 KB
ID:	26200
    Für das Beschreiben, Löschen, aber auch Write Nable Bit Setzen steht Folgendes im Datenblatt:
    Chip Select (S) must be driven High exactly at a byte boundary, otherwise the instruction is rejected, and is not executed. That is, Chip Select (S) must driven High when the number of clock pulses after Chip Select (S) being driven Low is an exact multiple of eight.

    Passt mein Clock-CS Verhalten(nach allen 8 Bits auf High, oder muss das genau gleichzeitig sein? Was könnte ich am Code falsch haben oder was ist mein Verständnisfehler beim Flash-Speicher?
    Ich habe die meisten Zeilen kommentiert, damit man meine Gedankengänge vielleicht verstehen kann
    Vielen Dank für eure Hilfe.
    claus

    #pragma config OSC = HS // Oscillator HS
    #pragma config WDT = OFF // Watchdog Timer Enable (WDT disabled)
    #pragma config PWRT = ON // Power-up Timer Enable (PWRT enabled)
    #pragma config MCLRE = OFF // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)

    #include <p18f4620.h>
    #include <delays.h>

    #define RS LATBbits.LATB4 // LCD
    #define RW LATBbits.LATB3 // LCD
    #define E LATBbits.LATB2 // LCD
    #define LCD_DATA LATD // LCD
    #define CS LATCbits.LATC2 // CS Flash //
    #define HOLD LATCbits.LATC1 // HOLD Flash
    #define SDI PORTCbits.RC4 // SDI Flash
    #define SDO LATCbits.LATC5 // SDO Flash
    #define CLK LATCbits.LATC3 // CLK Flash

    /*VARIABLEN*/
    char i;
    int ergebnis;
    unsigned char byte;
    char tempvar;
    /***********/

    /*PROTOTYPEN*/
    void command(void); // LCD
    void data(void); // LCD
    void LCD_INIT(void); // LCD
    unsigned char ReadSPI( void ); // Flash
    unsigned char WriteSPI( unsigned char data_out ); // Flash
    void Init_SPI(void); // Flash
    unsigned char sendSPI (unsigned char byte); // Flash
    void LCD_AUSGABE(int ergebnis);
    /************/

    void main()
    {
    /***********FLASH-SPEICHER***********/
    //TRISCbits.TRISC1=0; // HOLD - Flash
    TRISCbits.TRISC2=0; // CS - Flash
    TRISCbits.TRISC3=0; // SCK - Flash
    TRISCbits.TRISC4=1; // SDI - Flash
    TRISCbits.TRISC5=0; // SDO - Flash

    /***********LCD-DISPLAY***********/
    TRISD=0; // Set Port B as output port
    TRISBbits.TRISB4=0; // RS (Register select signal)
    TRISBbits.TRISB3=0; // R/W (Data read/write)
    TRISBbits.TRISB2=0; // E (Enable signal)

    /******INITIALISIERUNGEN******/
    LCD_INIT(); // LCD initialization
    Init_SPI(); // Initialisieren des SPI

    while(1)
    {
    sendSPI(0x06); // instruction code: Write enable bit setzen
    sendSPI(0x01); // instruction code: write status register
    sendSPI(0b00011100); // instruction code: BP1(Block Protect Bit) setzen
    sendSPI(0x05); // instruction code: read status register
    ergebnis=sendSPI(0x00); // dummy senden; Auslesen des Status Registers

    LCD_AUSGABE(ergebnis); // Ausgeben des gelesenen SPI-Wertes am LCD-Display
    }
    }

    /************Funktionen************/
    void Init_SPI(void)
    {
    SSPCON1bits.SSPEN=0; // Synchronous Serial Port disabled
    SSPSTATbits.CKE=1; // Daten werden beim Wechsel von Aktive zu Leerlauf der SCK-Leitung gesendet
    SSPCON1bits.SSPEN=1; // Synchronous Serial Port enabled
    }

    unsigned char sendSPI (unsigned char byte)
    {
    unsigned char tmp;
    CS = 0; // Clock Select auf low gesetzt, damit aktiv
    SSPBUF = byte; // byte(zu sendende Daten) wird in SSPBUF geschrieben
    while(!SSPSTATbits.BF); // warten bis Buffer beschrieben(BF wird gesetzt)
    SSPSTATbits.BF=0; // Buffer full - Bit wird gelöscht
    tmp = SSPBUF; // SSPBUF wird gelesen
    CS = 1; // Clock Select auf high gesetzt, damit inaktiv
    return tmp; // der ausgelesene Wert wird zurückgegeben
    }

    Flash-Speicher: http://www.mikroe.com/downloads/get/...ick_manual.pdf

    Datenblatt M25P80:
    http://www.google.at/url?sa=t&rct=j&...,d.Yms&cad=rja
    Geändert von clauszoechling (11.08.2013 um 21:59 Uhr)

Ähnliche Themen

  1. Externer Speicher (RAM)
    Von Furti im Forum AVR Hardwarethemen
    Antworten: 9
    Letzter Beitrag: 10.09.2006, 21:18
  2. externer Speicher
    Von Static im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 20.05.2005, 19:21
  3. Externer Speicher
    Von httpkiller im Forum AVR Hardwarethemen
    Antworten: 14
    Letzter Beitrag: 04.03.2005, 16:34
  4. Externer Speicher für Mega32 etc?
    Von Astrofreak im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 30.01.2005, 16:56
  5. externer Speicher
    Von Gottfreak im Forum AVR Hardwarethemen
    Antworten: 5
    Letzter Beitrag: 30.04.2004, 08:32

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen