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

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
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 »

Beklagar! :(

Husdjur kan vara nog så tillgivna. Vi har också katt med mycket personlighet. Bävar för den dagen hon inte finns längre...
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 »

Nu har även jag fått tummen ur och börjat leka med minnena. Det var ju inte alls svårt, varför har jag skjutit upp det? Eller tja, det fungerar inte...

Jag försökte att (sätta CE låg) först skicka 06h (WREN) och sedan sätta CE hög och sätta den låg igen varefter jag skickade 05h och en dummybyte (sen satte jag CE hög igen). Men under samtliga av dessa tre sändningar fick jag tillbaks 00111000, dvs BP3, BP2 och BP1 höga, de andra låga. Men så bör det ju inte se ut.. Och jag bör inte få någon data tillbaksskickad då jag sänder 06h och 05h, utan bara när jag sänder dummybyten efter 05h?

Efter detta inträffade en annan lustig sak.. Utgången från minnet blev nertonad så att det bara kommer brus med 0,5v amplitud när den skall sända.. Detta kom och gick i början, sen blev det så på heltid.. Någon glappkontakt kan jag ej hitta och avkopplat är det.. Någon som upplevt något liknande? Jag kör allt på 3,3 volt från Pickit 2. Jag har kört på både ca 1MHz klockfrekvens (Fosc/4, fast detta borde ju bli 2MHz då intosc tickar i 8MHz... men 1MHz enligt oscilloskopet..) och runt 100kHz (Fosc/64).

Min kod till PIC16F886:

Kod: Markera allt

	list			p=16f886
	#include		<p16F886.inc>

	__CONFIG	_CONFIG1,		_FOSC_INTRC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF & _DEBUG_OFF
	__CONFIG	_CONFIG2,		_BOR4V_BOR21V & _WRT_OFF


; Definiera adress till variabler..
dly1	equ			0x20
dly2	equ			dly1 + 1
dly3	equ			dly2 + 1

dat		equ			dly3 + 1

; Definiera pinnar
#define	minneCE		PORTC,2
#define	led			PORTA,0

reset_vector		CODE	0x000
	goto			start

int_vector			CODE	0x004

start				CODE	0x006
start
	banksel			OSCCON
	movlw			0xff
	movwf			OSCCON						; Sätt intern klocka till 8MHz..
	banksel			ANSEL
	clrf			ANSEL						; Alla digitala..
	banksel			TRISA
	clrf			TRISA
	banksel			PORTA
	movlw			0xff
	movwf			PORTA
	call			init_spi					; Initsiera SPI-modulen..
main
	bcf				minneCE						; Sätt Chip Enable hög..
	nop
	nop
	movlw			0x06						; Skicka 06h (WREN)
	call			spi_send_byte
	nop
	nop
	bsf				minneCE
	nop
	nop
	bcf				minneCE
	nop
	nop
	movlw			0x05						; Skicka 05h (Read status-reg)
	call			spi_send_byte
	movlw			0x00
	call			spi_send_byte				; Skicka dummybyte bara för att få en klocksignal (mottag data)
	movwf			dat							; Spara mottagen data.
	nop
	nop
	bsf				minneCE
	call			delay
	goto			main



; **************************************
; SPI-rutiner..

; INIT
init_spi
	banksel			TRISC
	bcf				TRISC,5						; Gör SDO till utgång
	bcf				TRISC,3						; Gör SCK till utgång
	bcf				TRISC,2						; Gör Chip-select till utgång..
	banksel			PORTC
	bsf				PORTC,2
	; Data samlas in av SST25VF080B-minnet på den stigande flanken av klocksignalen (Mode 3 eller Mode 0),
	; därför är läge CKP = 0, CKE = 1 lämpligt. Datautgång på minnet ändras efter fallande flank => läs på stigande flank, SMP = 0.
	banksel			SSPSTAT
	movlw			b'01000000'					; SMP, CKE, .(i2c only).., status (BF)
	movwf			SSPSTAT
	banksel			SSPCON
	movlw			b'00000010'					; SSPEN = 0, CKP = 0, clock = Fosc/4	
	movwf			SSPCON
	bsf				SSPCON,SSPEN
	; (SSPCON ligger i bank 0..)
	return

; SKICKA BYTE
spi_send_byte
	movwf			SSPBUF				; Skicka värde i W-reg.
	banksel			SSPSTAT
spi_send_byte_a
	btfss			SSPSTAT,BF			; Vänta på att Buffer Full flaggan skall sättas (Den gör tydligen det också när den blivit tömd av hårdvaran (data skickad)?)
	goto			spi_send_byte_a
	banksel			SSPBUF
	movfw			SSPBUF				; Lägg mottagen data i arbetsreg.
	return



; **********************************
; Fördröjningsrutiner..
delay
	movlw		0
	movwf		dly2
delay_2
	movlw		0
	movwf		dly1
delay_1
	decfsz		dly1,1
	goto		delay_1
	decfsz		dly2,1
	goto		delay_2
	return

delay_w
	movwf		dly2
delay_w_2
	movlw		0
	movwf		dly1
delay_w_1
	decfsz		dly1,1
	goto		delay_w_1
	decfsz		dly2,1
	goto		delay_w_2
	return
	
	end
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 plockat fram ett minne och gjort ett test.

06h, 05h utan dummy byte returnerar 00000000
06h, 05h med dummy byte returnerar 00011110
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 »

Jag har "drivrutiner" för denna minneskrets för ATmegaxx om någon är intresserad.
Inte helt komplett (saknar vissa funktioner) men duger till att skriva och läsa i alla fall.

Bifogar källkod:

flashmem.h
flashmem.c

Dessa kräver även SPI-drivrutiner:

spi.h
spi.c

SPI-drivrutinerna är utformade lite oflexibelt - de förutsätter att man använder vissa pinnar på PORTB som SS (chip select) och som väljare av SPI-enhet. Men det är ju lätt ändrat om man vill. SPI.h kräver även att det ska finnas en main.h där vissa parametrar anges (macron med SPI-hastighet med mera)

ehh.. nu får jag ungefär en miljon fel när jag försöker kompilera ett minimalistiskt testprogram som skriver och läser från flashminnet.... :(
Ska försöka få ordning på det. Skickar källfilerna i alla fall så länge (de fungerar ju ihop med mitt originalprogram).

EDIT2:
Har nu fixat lite och gjort ett "testprogram" . main.h innehåller en del parametrar man måste ha med. F_CPU måste också vara definierad.
Programmet är gjort för ATMega644A men fungerar nog på de flesta mega-AVR.

Kan hantera bl.a. SST25VF080B och AT25DF041A.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
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 »

@jesse
Är det något fel på min och gurgalofs kod på sidan 4 :)
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 »

Säkert inget fel alls (Men jag hade glömt att det fanns där).
Nu finns det fler alternativ för den som vill välja :)
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 »

Alltid trevligt med mera kod :)
Ska titta på den så fort jag får tid.
Skriv svar