www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI EEPROM 25AA256


Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um einen Spi-EEPROM (25AA265) mit einem Atmega32 anzusteuern verwende 
ich folgenden Code
#include "base.h"
#include "uart.h"
void SPI_MasterInit(void) {

    DDRB = (1<<PB4)|(1<<PB5)|(1<<PB7);      // set PB4(SS), PB5 (MOSI) and PB7 (SCK) output, all others input

    SPCR = (1<<SPE)|(1<<MSTR);           // enable SPI, Master, set clock rate fck/4  
  
    PORTB |= (1 << PB7)|(1 << PB4);
}

unsigned char spi(unsigned char data)
{
    SPDR = data;
    loop_until_bit_is_set(SPSR, SPIF);
 
    return SPDR;
}

int main(void) {
  uart_init();
  SPI_MasterInit();
  spi(0b00000010);
  spi(0x00);
  spi(0x00);
  spi(0x83);
  while(1) {
  spi(0b00000011);
  spi(0x00);
  spi(0x00);
  spi(0xff);
  }
}

Gesendt wird auch, nur die SO Leitung des EEPROMS bleibt ständig low :(

/CS: Wird vor dem Programmieren manuell (Draht umstöpseln) auf high 
gelegt, danach wieder auf low.
SO: An MISO
/WP: Auf high
Vss:GND
VCC: 5V
/HOLD: Auf high
SCK: An SCK
SI: An MOSI

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>/CS: Wird vor dem Programmieren manuell (Draht umstöpseln) auf high
>gelegt, danach wieder auf low.

A Write Instruction requires the following sequence. After
the CS line is pulled low to select the device, the WRITE
op-code is transmitted via the SI line followed by the byte
address and the data (D7 - D0) to be programmed (Refer to
Table 6). Programming will start after the CS pin is brought
high. (The LOW-to-High transition of the CS pin must occur
during the SCK low time immediately after clocking in the
D0 (LSB) data bit.

Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Code schaut jetzt so aus und es will immer noch nicht so recht
#include "base.h"
#include "uart.h"
void SPI_MasterInit(void) {

    DDRB = (1<<PB4)|(1<<PB5)|(1<<PB7);      // set PB4(SS), PB5 (MOSI) and PB7 (SCK) output, all others input

    SPCR = (1<<SPE)|(1<<MSTR);           // enable SPI, Master, set clock rate fck/4  
  
    PORTB |= (1 << PB7)|(1 << PB4);
}

unsigned char spi(unsigned char data)
{
    SPDR = data;
    loop_until_bit_is_set(SPSR, SPIF);
 
    return SPDR;
}

void select(void) {
  PORTB &= ~(1<<PB4);
}

void unselect(void) {
  PORTB |= (1<<PB4);
}  

int main(void) {
  uart_init();
  SPI_MasterInit();
  select();
  spi(0b00000010);
  spi(0x01);
  spi(0x00);
  spi(0b00000010);
  unselect();
  while(1) {
  select();
  spi(0b00000011);
  spi(0x01);
  spi(0x00);
  spi(0xff);
  unselect();
  }
}

Mache ich immer noch was falsch oder ist etwas anderes faul?
PS: bei Adresse 0 bekomme ich 01111100

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WRITE SEQUENCE (WRITE): In order to program the
AT25128/256, two separate instructions must be executed.
First, the device must be write enabled via the Write
Enable (WREN) Instruction. Then a Write (WRITE) Instruction
may be executed.

Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht =]
Der Quelltext
void spieep_write(unsigned char a0, unsigned char a1, unsigned char byte) {
  select();
  spi(0b00000100); //WRDI
  unselect();
  select();
  spi(0b00000110); //WREN
  unselect();
  select();
  spi(0b00000010); //WRITE
  spi(a0);
  spi(a1);
  spi(byte);
  unselect();
}

unsigned char spieep_read(unsigned char a0, unsigned char a1) {
  unsigned char byte;
  select();
  spi(0b00000100); //WRDI
  unselect();
  select();
  spi(0b00000011); //READ
  spi(a0);
  spi(a1);
  byte = spi(0xff);
  unselect();
  return byte;
}

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.