PDA

Επιστροφή στο Forum : AVR spi flash memory



GeorgeK
05-12-07, 03:31
Παιδιά αν μπορείτε μια μικρή βοήθεια.
Χρησιμοποιώ την AT25F2048 μνήμη και γράφω στο CodeVision .
Το πρόβλημά μου είναι πως δεν μπορώ να πάρω καμιά απόκριση
από τη μνήμη . Μήπως κάνω κάτι λάθος ?

Οι συνδέσεις που έχω κάνει είναι
//B7-MOSI B6-MISO B5-SCK B4-SS
//B3-Vcc

Ο κώδικάς μου είναι :

/********************************************/
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 31,250 kHz
// SPI Clock Phase: Cycle Half
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR0=0x53;
SPSR0=0x00;

PORTB= (PORTB | 0x08);//power up mem
DDRB= (DDRB | 0x08);

delay_ms(4);


PORTA=spi(00010101);//Read Manufacturer and Product ID
DDRA=PORTA;
/*********************************************/

Δεν θα έπρεπε στην πόρτα Α να μην είναι όλα LOW ?

Ευχαριστώ .

th_shak
05-12-07, 12:48
DDRA=PORTA; Αυτό τι το θες; (Ορίζει τα pin της PORTA σε εισόδους ή εξόδους)

GeorgeK
06-12-07, 00:59
Την εντολή DDRA=PORTA; την θέλω για να δω τι μου επέστρεψε η μνήμη .

Στο εγχειρίδειο της μνήμης λέει :

READ PRODUCT ID (RDID): The RDID instruction allows the user to read the manufacturer
and product ID of the device. The first byte after the instruction will be the
manufacturer code (1FH = ATMEL), followed by the device code, 63H.

Στην πόρτα Α με αυτά που κάνω τι θα έπρεπε να δώ ? Κατά τη γνώμη μου θα έπρεπε
να δω το 1F σε binary στις ακίδες της Α .
Είμαι καινούριος στο spi interface και μάλλον κάτι δεν κάνω σωστά .

th_shak
06-12-07, 11:28
Το DDRA=PORTA είναι σίγουρα λάθος. Έγραψα έναν κώδικα υποθέτοντας ότι χρησιμοποιείς τον ATmega8515. Δεν ξέρω αν έχεις κάνει σωστά το configuration αν θες δώσε περισσότερες πληροφορίες και ίσως μπορέσω να σε βοηθήσω. (Τι μcontroller χρησιμοποιείς, πως έχεις συνδέσει τη μνήμη κ.α.)


#include<spi>
#include<delay>

void main &#40;void&#41;
&#123;
PORTB=0x00;
DDRB=0xB0;
PORTA=0x00;
DDRA=0xFF;
SPCR0=0x53; // DEN KSERW AN EINAI SWSTA
SPSR0=0x00;

delay_ms&#40;4&#41;;
PORTA=spi&#40;0x15&#41;;
&#125;

GeorgeK
06-12-07, 14:52
O ελεγκτής είναι ο 644 . Οι συνδέσεις είναι :(Απο ΑΤmega644 προς ΑΤ25F2048)
//B7-MOSI B6-MISO B5-SCK B4-SS
//B3-Vcc

To configuration είναι για mode 0

th_shak
06-12-07, 17:14
Αν έχεις κάνει τη σύνδεση της μνήμης με τον μικροελεγκτή όπως λες, τότε με το πρόγραμμα που έστειλα θα πρέπει να δουλέψει. Το configuration είναι σωστό όπως το είχες και το μόνο λάθος ήταν το DDRA=PORTA;. Μη ξεχάσεις να εισάγεις στην αρχή του προγράμματος και τη βιβλιοθήκη του mega644 δηλαδή #include<mega644>.

GeorgeK
09-12-07, 17:49
Δυστυχώς δεν καταφέρνω να βγάλω άκρη .
Μήπως φταίει η αρχικοποίηση της θύρας ?

PORTB=0x00;
DDRB=0xB0;//B7-MOSI B6-MISO B5-SCK B4-SS

Αν έχει κάποιος κάποιον έτοιμο κώδικα που να κάνει έστω
κάτι με spi ας δώσει κανα link γιατι έψαξα στο internet και
δεν βρήκα τίποτα .

th_shak
09-12-07, 19:25
Αν έχει κάποιος κάποιον έτοιμο κώδικα που να κάνει έστω
κάτι με spi ας δώσει κανα link γιατι έψαξα στο internet και
δεν βρήκα τίποτα .

Δές αυτό: http://instruct1.cit.cornell.edu/courses/ee476/SPI/index.html

GeorgeK
10-12-07, 04:37
Ευχαριστώ πολύ !!! Τελικά δούλεψε .
Το πρόβλημα μάλλον ήταν και από την τροφοδοσία .
Είχα ένα 7805 και έδινα τροφοδοσία μετά από τρείς 1Ν4148
για να έχω τάση κοντά στα 3V αλλά μάλλον αυτό δεν έκανε
και έβαλα 317 .

Και πάλι ευχαριστώ για το χρόνο σου .