Re: Tips eller Samköp? SPI-Flash SST25VF080B

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av BEEP »

Jag har precis börjat med att försöka tolka hieroglyferna i databladet :) och om jag inte har helt fel så ska man kunna ändra byte för byte.
• Fast Erase and Byte-Program:
– Chip-Erase Time: 35 ms (typical)
– Sector-/Block-Erase Time: 18 ms (typical)
– Byte-Program Time: 7 µs (typical)
Byte-Program
The Byte-Program instruction programs the bits in the
selected byte to the desired data. The selected byte must
be in the erased state (FFH) when initiating a Program
operation. A Byte-Program instruction applied to a pro-
tected memory area will be ignored.
Edit:
Inläggen är flyttade från Tips eller Samköp? SPI-Flash SST25VF080B
Senast redigerad av BEEP 15 mars 2009, 21:52:24, redigerad totalt 3 gånger.
Användarvisningsbild
gurgalof
EF Sponsor
Inlägg: 1311
Blev medlem: 18 februari 2004, 22:15:06
Ort: Göteborg
Kontakt:

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av gurgalof »

The selected byte must
be in the erased state (FFH) when initiating a Program
operation.
• Flexible Erase Capability
– Uniform 4 KByte sectors
– Uniform 32 KByte overlay blocks
– Uniform 64 KByte overlay blocks
Jag skulle snarare tolka det som att man kan programmera byte för byte, men att man måste radera i minst 4kB sektorer.
JustNeed
Inlägg: 799
Blev medlem: 7 november 2007, 22:07:01
Ort: 08

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av JustNeed »

Skulle det inte fungera att skriva 0xFF till den byten man vill radera bara?
Användarvisningsbild
AndLi
Inlägg: 18285
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av AndLi »

Jn: Nä, det är det som är "problemet" med flash. Att ställa om en bit till 0 är inga problem ,men att få den till 1 behövs en riktig erase.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av vfr »

Det är väl ofta så också att flash kan bara raderas blockvis, medans man kan ändra I EEPROM byte för byte?

Det varierar kraftigt med vad det är för typ av flash. Allt från radering av hela kretsen till enstaka byte. Jag har stött på båda dom varianterna, och mycket däremellan.
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av BEEP »

AndLi skrev:Jn: Nä, det är det som är "problemet" med flash. Att ställa om en bit till 0 är inga problem ,men att få den till 1 behövs en riktig erase.
Så det går att fylla en 4 KByte sektor i SST25VF080B med ettor för att senare skriva in byte för byte? Om inte så förmodar jag att man behöver ha en processor med minst 4 KByte RAM eller EEPROM-minne för att kunna lagra all data som ska skrivas till sektorn?
Användarvisningsbild
AndLi
Inlägg: 18285
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av AndLi »

Beep: det är så det brukar funka ja, jag har inte läst databladet för detta specefika chip dock. (man behöver altså inte 4KByte minne i µC)
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av squiz3r »

BEEP: Det finns ju flera såna sektorer i minnet, (250 stycken?), så man behöver ju inte ha 4kb i µC'n utan genom att flytta runt sakerna mellan olika sektorer måste man ju kunna få en bit till 1. (Man flyttar över all data till en annan sektor, sen raderar man sektor 1, sen flyttar man tillbaks allt till sektor 1 från den temporära sektorn (utom den som ska raderas)). Men det blir ju väldigt mycket mera jobb!
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av jesse »

Beep: Nej, varför ska du behöva ha all data lagrad i förväg? Jag antar att datan genereras på något vis , t.ex en insignal som ska loggas eller tider/händelser som ska registreras. Du kan ju också fylla på med text, ljud eller bilder via interface från en PC (t.ex. RS232, genom mikroprocessorn).

Se till att flash-minnet är raderat till att börja med. sedan kan du ju fylla på byte för byte tills det är fullt. Det är ju inget RAM och är alltså inte lämpligt att ändra i hur som helst när man väl lagrat datan. Sedan när du läst av informationen och vill ha in ny data så kör du chip-erase och börjar om från början igen. Det är väl det allra enklaste sättet att använda minnet på.
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av BEEP »

squiz3r: Det där var alldeles för enkelt för att jag skulle komma på det själv :)

jesse: Jag ska fylla en stor del av flashminnet med färdig data som ska kunna ändras vid behov så den data som inte ändras måste ju lagras någon annanstans under tiden när sektorn raderas.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av jesse »

OK , då hänger jag med. Då får du helt enkelt ha en ledig sektor som "arbetsminne".
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av Micke_s »

Har fått mina för en stund sedan, snabbt och bra.

rätt så dålig mobilbild men visar hur jag tänkte testa den i experiment-plattan.
Bild
Användarvisningsbild
gurgalof
EF Sponsor
Inlägg: 1311
Blev medlem: 18 februari 2004, 22:15:06
Ort: Göteborg
Kontakt:

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av gurgalof »

Är det någon som har börjat koda för dessa än?

Jag försöker att koda iaf, men jag kan för lite C programmering så google får många frågor under tidens gång. Det känns som att det kommer att ta ett bra tag för mig det här...

Det skulle vara trevligt om någon mer kunnig än mig skulle visa en kodsnutt, känns som att många frågetecken skulle redas ut då. :vissla:

Men jag tvingar ingen, det är önskedrömmar :D
Användarvisningsbild
BEEP
EF Sponsor
Inlägg: 1593
Blev medlem: 21 januari 2006, 16:57:56
Ort: Mölndal

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av BEEP »

Jag har portat över "SST - software driver" till SPIN (Parallax - Propeller) och har börjat med att försöka sätta minnet i skrivläge och göra en skrivläges kontroll men tyvärr så får jag inga ettor eller nollor från minnet.

Kod: Markera allt

CON                                                       
  _clkmode = xtal1 + pll16x ' PLL
  _xinfreq = 5_000_000      ' Crystal 5 MHz
                            ' 16*5 = µC 80MHz (PASM: Instruction =>4 Clocks. SPIN: Very slow)
  SI  = 0                   ' Serial Data Input
  SCK = 1                   ' Serial Clock
  SO  = 2                   ' Serial Data Output
  CE  = 3                   ' Chip Enable
  LED_DEBUG = 4             ' Led             
  GND       = 5             ' Led -> GND                
  PIN_MASK = 1<<SI | 1<<SCK | 1<<CE | 1<<LED_DEBUG | 1<<GND

PUB Main
  Init                          ' Set pin and initialize SCK   
  WREN                          ' Enable Write Enable Latch
  if WREN_Check                 ' WEL check
    outa[LED_DEBUG]~~
    
  repeat                                 
                                                                  
PUB Init                                                           
  dira |= PIN_MASK              ' Set output       
  outa[SCK] := 0                ' Set clock to low initial state

PUB WREN
'' This procedure enables the Write Enable Latch.
'' It can also be used to Enables Write Status Register.
  outa[CE] := 0                 ' Enable device, clear CE low
  Send_Byte($06)                ' Send WREN command 
  outa[CE] := 1                 ' Disable device, set CE high 

PUB WREN_Check | byte_
'' This procedure checks to see if WEL bit set before program/erase.
  byte_ := Read_Status_Register ' Read the status register  
  if byte_ == $02               ' Verify that WEL bit is set
    result := true      
  else                  
    result := false    
                        ' add source code or statements for this file to compile
                        ' i.e. option: insert a display to view error on LED? 
                        
PUB Read_Status_Register | byte_          
  outa[CE] := 0                 ' Enable device, clear CE low
  Send_Byte($05)                ' Send RDSR command 
  byte_ := Get_Byte             ' Receive byte 
  outa[CE] := 1                 ' Disable device, set CE high 
  result := byte_
  
PRI Send_Byte(out) | i
  repeat i from 0 to 7          ' for (i = 0 i < 8 i++)    
    if (out & $80) == $80       ' check if MSB is high 
      outa[SI] := 1
    else
      outa[SI] := 0             ' if not, set to low            
    outa[SCK] := 1              ' toggle clock high   
    out := (out << 1)           ' shift 1 place for next bit    
    outa[SCK] := 0              ' toggle clock low   
    
PRI Get_Byte | i,in,temp
  in := 0
  repeat i from 0 to 7          ' for (i = 0 i < 8 i++)  
    in := (in << 1)             ' shift 1 place to the left or shift in 0 
    temp := ina[SO]             ' save input 
    outa[SCK] := 1              ' toggle clock high 
    if temp == 1                ' check to see if bit is high 
      in := in | $01            ' if high, make bit high
    outa[SCK] := 0              ' toggle clock low           
  result := in
                                                  
Senast redigerad av BEEP 15 mars 2009, 12:22:49, redigerad totalt 4 gånger.
Användarvisningsbild
gurgalof
EF Sponsor
Inlägg: 1311
Blev medlem: 18 februari 2004, 22:15:06
Ort: Göteborg
Kontakt:

Re: Tips eller Samköp? SPI-Flash SST25VF080B

Inlägg av gurgalof »

Bra tips att börja med att sätta minnet i skrivläge, och sedan göra en kontroll.

Jag måste skaffa mig en 3,3V spänningskälla, så att jag kan börja labba med min kod.

Kod: Markera allt

#include <avr/io.h>

#define DDR_SPI   DDRB
#define PORT_SPI  PORTB
#define DD_CE     PORTB2
#define DD_MOSI   PORTB3
#define DD_SCK    PORTB5

void SPI_MasterInit(void);
char SPI_MasterTransmit(char);
void CE_High(void);
void CE_Low(void);
void WREN(void);
unsigned char RDSR();
void WREN_Check(void);



int main()
{
	SPI_MasterInit(); //Initiate SPI Master
	WREN(); //Write Enable
	WREN_Check(); //Lights a LED if Write is enabled
}

void SPI_MasterInit(void)
{
	// Set MOSI and SCK output, all others input
	DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK)|(1<<DD_CE);
	// Enable SPI, Master, set clock rate fck/16
	SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
	// Make sure that CE is high(device disabled)
	PORT_SPI |= (1<<DD_CE);
}

char SPI_MasterTransmit(char data)
{
	// Start transmission
	SPDR = data;
	// Wait for transmission complete
	while(!(SPSR & (1<<SPIF)));
	// Return the received byte
	return (SPDR);
}

void CE_High(void)
{
	PORT_SPI |= (1<<DD_CE);
}

void CE_Low(void)
{
	PORT_SPI &= ~(1<<DD_CE);
}

void WREN(void)
{
	CE_Low();
	SPI_MasterTransmit(0x06);
	CE_High();
}


unsigned char RDSR()
{
	unsigned char byte = 0;
	CE_Low();
	byte = SPI_MasterTransmit(0x05);
	CE_High();
	return (byte);
}


void WREN_Check(void)
{
	unsigned char status = 0;
	status = RDSR();
	if (status != 0x02)
	{
		PORTB |= (1<<0);
	}else{
		PORTB &= ~(1<<0);
	}
}
Skrivet för ATMEGA88P med hårdvaru SPI...
Vet ej om den fungerar :P
Skriv svar