MMC rodbibliotek Skrivning

P

patrikshah

Guest
hej,
Jeg er graensefladekredsloeb MMC-kort med LPC2148 SPI baseret.Jeg har en ansøgning notat fra NXP som

viser, hvordan du interface SD / MMC (512 MB) kortet ved hjælp SPI til FAT16.

ved hjælp af denne kode Jeg er i stand til at skrive
og læse data.Så jeg er i stand til at læse data fra (Sektor 0 - Boot

sektor, Sector 6 - FAT tabellen sektor, sektoren 528 - Data sektor)

men når jeg er adgang til eller skrive data til rodmappen sektor, dens ikke i stand til at skrive eller læse data til

& Fra at secotr - 496.

Når jeg skriver det til sektor - 496 data bliver lagret på 432 = Forskel 64
Når jeg skriver det til sektor - 498 data bliver lagret på 434 = Forskel 64
Når jeg skriver det til sektor - 510 data bliver lagret på 445 = Forskel 64Så kan enhver en fortæl mig Er der andre merhod til at skrive data ind på rodmappen.

Jeg vedhæfter min kode herif (mmc_write_block (495, rootdirectory_info) == 0)
(
mmc_read_block (496);
Display_Read_parameter (496);
)
anden
(
mens (1); / * Meget dårligt

sket * /
)int mmc_write_block (Word block_number, BYTE * MMCWRDATA)
(
WORD varl, varh;
BYTE Status;

IOCLR0 = SPI_SEL; / * klar SPI SSEL * /

/ * Blokstørrelse er blevet sat i mmc_init () * /
varl = ((block_number & 0x003F) <<9);
varh = ((block_number & 0xFFC0)>> 7);

/ * Sende mmc CMD24 (WRITE_SINGLE_BLOCK) til at skrive data til
MMC-kort * /
MMCCmd [0] = 0x58;
/ * Høj blok adresse bits, varh høje og lave * /
MMCCmd [1] = varh>> 0x08;
MMCCmd [2] = varh & 0xFF;
/ * Lav blokere adresse bits, varl høje og lave * /
MMCCmd [3] = varl>> 0x08;
MMCCmd [4] = varl & 0xFF;
/ * Kontrolsum ikke længere er påkrævet, men vi altid sende 0xFF * /
MMCCmd [5] = 0xFF;
SPI_Send (MMCCmd, MMC_CMD_SIZE);

/ * Hvis mmc_response returnerer 1 og derefter kunne vi ikke få en 0x00
respons * /
hvis ((mmc_response (0x00)) == 1)
(
MMCStatus = WRITE_BLOCK_TIMEOUT;
IOSET0 = SPI_SEL; / * sæt SPI SSEL * /
tilbagevenden MMCStatus;
)

/ * Set bit 0 til 0, som angiver begyndelsen af data blok * /
MMCCmd [0] = 0xFE;
SPI_Send (MMCCmd, 1);

/ * Sende data, mønster som 0x00, 0x01, 0x02, 0x03, 0x04, 0x05 ...*/
SPI_Send (MMCWRDATA, MMC_DATA_SIZE);

/ * Send prøvedukkens checksum * /
/ *, Når den sidste check sum er sendt, svaret skal komme tilbage
straks.Så tjekke SPI FIFO MISO og sørg for, at status
tilbagevenden 0xX5, den bit 3 gennem 0 bør 0x05 * /
MMCCmd [0] = 0xFF;
MMCCmd [1] = 0xFF;
SPI_Send (MMCCmd, 2);

Status = SPI_ReceiveByte ();
hvis ((Status & 0x0F)! = 0x05)
(
MMCStatus = WRITE_BLOCK_FAIL;
IOSET0 = SPI_SEL; / * sæt SPI SSEL * /
tilbagevenden MMCStatus;
)

/ * Hvis status er allerede nul, værdinedskrivningerne er ikke færdig
endnu, og kortet er travlt * /
if (mmc_wait_for_write_finish () == 1)
(
MMCStatus = WRITE_BLOCK_FAIL;
IOSET0 = SPI_SEL; / * sæt SPI SSEL * /
tilbagevenden MMCStatus;
)

IOSET0 = SPI_SEL; / * sæt SPI SSEL * /
SPI_ReceiveByte ();
tilbagevenden 0;
)

Så vær venlig at hjælpe mig, hvordan man kan løse dette problem

Hilsen,
Pratik

 

Welcome to EDABoard.com

Sponsor

Back
Top