MMC root directory Schrijven

P

patrikshah

Guest
hoi,
Ik ben interfacing MMC-kaart met LPC2148 SPI gebaseerd.Ik heb een aanvraag nota van NXP die

laat zien hoe interface SD / MMC (512 MB) met behulp van SPI voor FAT16.

met behulp van die code i am kunnen schrijven
en lezen van gegevens.Dus ik ben in staat om data te lezen van (Sector 0 - Boot

sector, Sector 6 - FAT tabel sector,
de sector 528 - Gegevens sector)

maar wanneer ik toegang tot of het schrijven van data naar Root Directory sector, zijn niet in staat om te schrijven of lezen van gegevens op

& Van die secotr - 496.

Als ik het schrijven ervan tot sector - 496 gegevens wordt steeds opgeslagen op 432 Verschil = 64
Als ik het schrijven ervan tot sector - 498 gegevens wordt steeds opgeslagen op 434 Verschil = 64
Als ik het schrijven ervan tot sector - 510 gegevens wordt steeds opgeslagen op 445 Verschil = 64Dus kan een tell me Is er een andere merhod te schrijven aan bij root directory.

Ik ben verbonden mijn code hierif (mmc_write_block (495, rootdirectory_info) == 0)
(
mmc_read_block (496);
Display_Read_parameter (496);
)
anders
(
while (1); / * Zeer slecht

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

IOCLR0 = SPI_SEL; / * duidelijke SPI SSEL * /

/ * Blok grootte is ingesteld in mmc_init () * /
varl = ((block_number & 0x003F) <<9);
varh = ((block_number & 0xFFC0)>> 7);

/ * Sturen mmc CMD24 (WRITE_SINGLE_BLOCK) om de gegevens aan
MMC-kaart * /
MMCCmd [0] = 0x58;
/ * Hoge blok adres bits, varh High en Low * /
MMCCmd [1] = varh>> 0x08;
MMCCmd [2] = varh & 0xFF;
/ * Lage blok adres bits, varl High en Low * /
MMCCmd [3] = varl>> 0x08;
MMCCmd [4] = varl & 0xFF;
/ * Controlesom niet langer vereist is, maar we sturen altijd 0xFF * /
MMCCmd [5] = 0xFF;
SPI_Send (MMCCmd, MMC_CMD_SIZE);

/ * Als mmc_response retourneert 1 dan hebben we verzuimd om een 0x00
reactie * /
if ((mmc_response (0x00)) == 1)
(
MMCStatus = WRITE_BLOCK_TIMEOUT;
IOSET0 = SPI_SEL; / * set SPI SSEL * /
terugkeer MMCStatus;
)

/ * Stel bit 0 tot 0 wat betekent het begin van de gegevens blok * /
MMCCmd [0] = 0xFE;
SPI_Send (MMCCmd, 1);

/ * Data sturen, patroon als 0x00, waarde 0x01, 0x02, 0x03, 0x04, 0x05 ...*/
SPI_Send (MMCWRDATA, MMC_DATA_SIZE);

/ * Stuur proefpop controlesom * /
/ * Wanneer de laatste controle som wordt verzonden, het antwoord moet komen terug
onmiddellijk.Dus check de SPI FIFO MISO en zorg ervoor dat de status
terugkeer 0xX5, de bit 3 tot en met 0 worden 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; / * set SPI SSEL * /
terugkeer MMCStatus;
)

/ * Als de status is al nul, het schrijven is nog niet afgelopen
Nog kaart en is bezig * /
if (mmc_wait_for_write_finish () == 1)
(
MMCStatus = WRITE_BLOCK_FAIL;
IOSET0 = SPI_SEL; / * set SPI SSEL * /
terugkeer MMCStatus;
)

IOSET0 = SPI_SEL; / * set SPI SSEL * /
SPI_ReceiveByte ();
return 0;
)

Dus u me helpen hoe dit probleem op te lossen

Groeten,
Pratik

 

Welcome to EDABoard.com

Sponsor

Back
Top