MMC ΡΙΖΩΜΑΤΩΔΗ Directory Writing

P

patrikshah

Guest
γεια,
Είμαι διασυνδέεται με κάρτα MMC LPC2148 SPI βάση.Έχω μία αίτηση σημείωμα που NXP

δείχνει τον τρόπο διεπαφής SD / MMC (512 MB) για την κάρτα χρησιμοποιώντας SPI FAT16.

χρησιμοποιώντας τον κωδικό αυτό είμαι σε θέση να γράψετε & Διαβάστε δεδομένων.Έτσι, είμαι σε θέση να διαβάσει δεδομένα από το (0 Τομέας - Boot

τομέα, Sector 6 - πίνακα FAT τομέας, τομέας 528 - Δεδομένα τομέα)

αλλά όταν έχω πρόσβαση ή γραπτά στοιχεία που να Root Directory τομέα, δεν είναι σε θέση να το γράψετε ή να διαβάσετε τα δεδομένα να

& Από ότι secotr - 496.

όταν σας γράφω για να τομέα - 496 δεδομένα να είναι αποθηκευμένο σε 432 Διαφορά = 64
Όταν σας γράφω για να τομέα - 498 δεδομένα να είναι αποθηκευμένο σε 434 Διαφορά = 64
Όταν σας γράφω για να τομέα - 510 δεδομένα να είναι αποθηκευμένο σε 445 Διαφορά = 64Έτσι μπορεί μία πείτε μου Υπάρχει κάποια άλλη merhod για την εγγραφή δεδομένων στο ριζικό κατάλογο.

Είμαι συνδέονται κωδικό μου εδώεάν (mmc_write_block (495, rootdirectory_info) == 0)
(
mmc_read_block (496)?
Display_Read_parameter (496)?
)
άλλος
(
ενώ (1)? / * Πολύ κακή

συνέβη * /
)int mmc_write_block (WORD block_number, BYTE * MMCWRDATA)
(
WORD varl, varh?
BYTE Status?

IOCLR0 = SPI_SEL? / * Σαφές SPI SSEL * /

/ * Μπλοκ έχει μέγεθος που ορίζεται στην mmc_init () * /
varl = ((block_number & 0x003F) <<9)?
varh = ((block_number & 0xFFC0)>> 7)?

/ * Στείλτε mmc CMD24 (WRITE_SINGLE_BLOCK) να γράψει τα στοιχεία για να
MMC card * /
MMCCmd [0] = 0x58?
/ * Μπλοκ υψηλής διεύθυνση bits, varh υψηλής και χαμηλής * /
MMCCmd [1] = varh>> 0x08?
MMCCmd [2] = varh & 0xff?
/ * Μπλοκ διεύθυνση χαμηλά bits, varl υψηλής και χαμηλής * /
MMCCmd [3] = varl>> 0x08?
MMCCmd [4] = varl & 0xff?
/ * Checksum δεν απαιτείται πλέον, αλλά πάντοτε να αποστέλλει 0xff * /
MMCCmd [5] = 0xff?
SPI_Send (MMCCmd, MMC_CMD_SIZE)?

/ * Εάν mmc_response επιστροφή 1 αποτύχει, τότε για να πάρετε μια 0x00
ανταπόκριση * /
if ((mmc_response (0x00)) == 1)
(
MMCStatus = WRITE_BLOCK_TIMEOUT?
IOSET0 = SPI_SEL? / * Που SPI SSEL * /
επιστροφή MMCStatus?
)

/ * Ορισμός bit 0 με 0 γεγονός που δείχνει την αρχή του μπλοκ δεδομένων * /
MMCCmd [0] = 0xFE?
SPI_Send (MMCCmd, 1)?

/ * Αποστολή δεδομένων, ως μοντέλο 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 ...*/
SPI_Send (MMCWRDATA, MMC_DATA_SIZE)?

/ * Αποστολή ανδρεικέλου checksum * /
/ * Όταν ο τελευταίος έλεγχος άθροισμα αποστολή, η απάντηση θα πρέπει να επανέλθω
αμέσως.Συνεπώς, ελέγχει την SPI FIFO ΜΙΣΟ και βεβαιωθείτε ότι το καθεστώς
επιστροφή 0xX5, το bit 3 έως και 0 πρέπει να 0x05 * /
MMCCmd [0] = 0xff?
MMCCmd [1] = 0xff?
SPI_Send (MMCCmd, 2)?

Status = SPI_ReceiveByte ()?
if ((Status & 0x0F)! = 0x05)
(
MMCStatus = WRITE_BLOCK_FAIL?
IOSET0 = SPI_SEL? / * Που SPI SSEL * /
επιστροφή MMCStatus?
)

/ * Εάν η κατάσταση είναι ήδη στο μηδέν, το γράφουν δεν έχει ολοκληρωθεί
ακόμη και η κάρτα είναι απασχολημένος * /
εάν (mmc_wait_for_write_finish () == 1)
(
MMCStatus = WRITE_BLOCK_FAIL?
IOSET0 = SPI_SEL? / * Που SPI SSEL * /
επιστροφή MMCStatus?
)

IOSET0 = SPI_SEL? / * Που SPI SSEL * /
SPI_ReceiveByte ()?
επιστροφή 0?
)

Παρακαλώ λοιπόν να με βοηθήσει πώς να λύσει αυτό το πρόβλημα

Χαιρετισμοί,
Pratik

 

Welcome to EDABoard.com

Sponsor

Back
Top