Sari la conținut
ELFORUM - Forumul electronistilor

PIC 18F452 si 25C080 EEPROM


Mar

Postări Recomandate

Am inceput sa testez comunicatia prin SPI a unui eeprom (25C080) cu un 18F452. Am testat programul de mai jos si nu pot sa scriu si sa citeasc memoria. Am verificat pe osciloscop si in timpul comunicatiei am SCK si date pe SI dar memoria tot analfabeta este. Nu stiu insa daca memoria a fost scrisa dar nu poate fi citita sau daca memoria este citita bine dar nu am nimic in locatia de memorie. Va rog daca ati reusit comunicatia cu 25CXXX prin SPI sa imi citeva sfaturi.Va multumescCBLOCK 0x000 ; alocare memorie High_Add Low_Add outbyte out_data ENDC bsf CS (Chip select este pe RC2) movlw 0x80 movwf SSPSTAT clrf SSPCON1 movlw 31h movwf SSPCON1 movlw 00h movwf High_Add movlw 03h movwf Low_Add bcf CS movlw 06h ;write enable movwf outbyte call write_byte bsf CS call delay_01 bcf CS movlw 02h ;write command movwf outbyte call write_byte movf High_Add,0 movwf outbyte call write_byte movf Low_Add movwf outbyte call write_byte movlw 32h ; scriu cifra 0 la locatia 3 de memorie movwf outbyte call write_byte call delay_01 bsf CS ;;;;;;;;;;;;;;;;;;;;;;;;;;; bcf CS movlw 03h ;read enable movwf outbyte call read_byte movf High_Add,W movwf outbyte call read_byte movf Low_Add,W movwf outbyte call read_byte bsf CS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;write_byte movf outbyte,W movwf SSPBUF loop btfss SSPSTAT, BF bra loop returnread_byte movf outbyte,W movwf SSPBUF loop1 btfss SSPSTAT, BF bra loop1 movf SSPBUF,W ;copiez din SSPBUF in acumulator movwf out_data return

Link spre comentariu
  • Răspunsuri 10
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Mar

    5

  • Liviu M

    5

  • kit

    1

Top autori în acest subiect

Sters, ca era o prostie.

 

LE Cred ca ai probleme la citire, nu "clockuiesti" suficient ca sa si citesti datele.

Cred ca secventa de citire (cu functiile tale) ar fi:

bcf CSmovlw 03h ;read enablemovwf outbytecall write_bytemovf High_Add,Wmovwf outbytecall write_bytemovf Low_Add,Wmovwf outbytecall write_byte             ;pana aici "comanzi" memoriacall read_byte             ; abia aici citesti efectivbsf CS

cu read_byte ceva mai "scurta" (aproximativ, ca nu stiu prea bine asm); ideea e sa-i dai clock memoriei atunci cand ea ar vrea sa verse datele:

read_bytemovf 0,W                       ;aici poate sa fie oricemovwf SSPBUFloop1 btfss SSPSTAT, BFbra loop1movf SSPBUF,W ;copiez din SSPBUF in acumulatormovwf out_datareturn
Link spre comentariu

Am citit datele alea technice si am inteles ca trebuie sa fac urmatorii pasi ca sa scriu o memorie.CS low trimit WREN (06h)CS highDelay 5msCS lowtrimit WRITE (02h)trimit High_Addrestrimit Low_Addrestrimit dateledelay 5ms (deoarece trebuie 5ms sa scrie memoria)CS highPentru a citi o memorie situatia e ma simplaCS lowtrimit READ (03h)trimit High_Addrestrimit Low_AddresCS highSi pe SO voi primi datele de la memorieSpune-mi te rog daca am inteles bine

Link spre comentariu

Eu cred ca la delay 5ms poate fi dupa CS high.

 

 

CS low

trimit WREN (06h)

CS high

Delay 5ms

CS low

trimit WRITE (02h)

trimit High_Addres

trimit Low_Addres

trimit datele

CS high

delay 5ms (deoarece trebuie 5ms sa scrie memoria)

 

Pe de alta parte, la citire CS TREBUIE sa fie LOW pe toata durata comunicatiei, inclusiv la citire.

De asemenea, cum ziceam si mai sus, daca te uiti la formele de unda in cazul citirii din memorie (data sheet pagina 8, fig. 3.1), dupa ce trimiti adresa trebuie sa mai generezi 8 pulsuri de ceas, pulsuri pe care vin datele din memorie. Pentru asta, dupa ce scrii Low_Address trebuie sa faci picul sa mai clockuiasca de 8 ori - comanda ta read.

Asa ca mie-mi da (ca in postul meu de mai sus)

Pentru a citi o memorie situatia e ma simpla

CS low

trimit READ (03h)

trimit High_Addres

trimit Low_Addres

 

generezi 8 pulsuri pe SCK - call read_byte - si pe SO vei primi datele de la memorie

CS high

 

Link spre comentariu

DA, am vazut figura indicata de tine dar ma gindesc ca protocolul SPI functioneaza la fel ca si RS232 (nu ne intereseaza cum transmite datele sau daca trebuie sa dam clock un alt pentru a transmite datele). Important este sa respectam datele technice ale memoriei.

Link spre comentariu

Nu ti-am inteles ideea de mai sus.

 

3.2 Read Sequence

The device is selected by pulling CS low. The 8-bit READ

instruction is transmitted to the 25XX080 followed by

the 16-bit address, with the six MSBs of the address

being "don’t care" bits. After the correct READ instruction

and address are sent, the data stored in the memory at

the selected address is shifted out on the SO pin. The

data stored in the memory at the next address can be

read sequentially by continuing to provide clock pulses.

Citatul e din data-sheetul memoriei.

Cu alte cuvinte memoria sta de vorba cu tine (read/write) cat timp are CS low.

Memoria e dispozitiv slave. Face ce trebuie sa faca atata timp cat are clock (pe sck). Clockul il genereaza masterul - adica picul. Nu-l are, nu face nimic.

Oricum, nu e nevoie sa ma crezi. Incearca si zi-mi si mie cum a functionat. Sunt chiar curios, pentru ca desi cu SPI m-am mai jucat, cu PIC si SPI nu m-am jucat inca.

Link spre comentariu

In secventa de program postata prima data (asa cum este setat SPI) pot obtine clock pe SCL (pin 18) si datele pe SO de la PIC.Asta am verificat cu osciloscopul pina acum. Din cite am observat semnalul de clock apare numai cind transmiti sau receptionezi date, nu este permanent asa cum arata in figura 3.1. De exemplu daca am 4 octeti de trimis la memorie (write, High_Addres, Low_Addres, date) voi vedea pe osciloscop 4 pachete de clock care se trimit la memorie.Deocamdata cercetam ..

Link spre comentariu

Pai fix de aia-ti zic ca trebuie ca dupa ce trimiti comanda si cei doi bytes de adresa trebuie sa mai trimiti si un pachet de date "fake" (acel *read* din posturile mele anterioare), ca sa generezi clockul necesar memoriei ca sa puna datele pe SDO-ul ei (SDI la pic). Memoria va ignora datele pe care tu i le trimiti in pachetul fake (ea stie acum ca are de de trimis date, asa ca nici nu se uita la SDI-ul ei/SDO-ul pic-ului).LE Si nu conteaza ca CLK are pauze; din punctul de vedere al memoriei, cat timp nu are clock, timpul "sta pe loc" (ce bine ar fi sa fie si la noi la fel). :da

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări