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
Είμαι διασυνδέεται με κάρτα 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