Sida 1 av 5
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 00:46:51
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
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 01:00:17
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.
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 08:13:50
av JustNeed
Skulle det inte fungera att skriva 0xFF till den byten man vill radera bara?
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 08:32:06
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.
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 09:53:21
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.
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 10:54:35
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?
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 10:57:51
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)
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 12:14:31
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!
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 12:44:07
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å.
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 11 mars 2009, 14:14:17
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.
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 12 mars 2009, 15:43:39
av jesse
OK , då hänger jag med. Då får du helt enkelt ha en ledig sektor som "arbetsminne".
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 12 mars 2009, 16:50:47
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.

Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 12 mars 2009, 23:54:02
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å.
Men jag tvingar ingen, det är önskedrömmar

Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 14 mars 2009, 21:41:18
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
Re: Tips eller Samköp? SPI-Flash SST25VF080B
Postat: 14 mars 2009, 23:56:50
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
