LPC23x8 MCI interface support patch
Brought to you by:
flecxie,
lennartyseboodt
Hi,
this patch implements the support for the dedicated MCI interface that can be found on the LPC2368, LPC2378 and also on the LPC24xx and LPC31xx. It should work with minor tweaks on all of these but it was tested only with the LPC2378.
Support for MMC cards and HCSD cards should be working, but I could only test it with SCSD cards.
Cheers,
Juri
Logged In: YES
user_id=105141
Originator: YES
I attached a patch to the lpc23x8.c file to fix the stalling writes. It was a wrong check for a timeout value and I also had to increase the timeout value to not abort on very slow writes.
File Added: lpc23x8.patch2
Logged In: YES
user_id=1951679
Originator: NO
hello,
I'm also trying to implement a SD / MMC inferface on LPC2468 and looking for sample code.
the download link doesn't seem to work.
how can i dowload the files?
thanks.
Logged In: NO
Works for me. Just click on the words "download" on the right side of the page.
Logged In: NO
Only patch and diff file is downloadable. Where is original file?
Thx.
Logged In: YES
user_id=105141
Originator: YES
It's on my laptop and in my non-public cvs repository. If you're not able to produce the files out of the diff and patch, then wait until Monday, as I plan to publish a new version over the weekend.
Cheers,
Juri
Logged In: YES
user_id=105141
Originator: YES
File Added: efsl-0.2.8-lpc23x8.diff
Logged In: YES
user_id=105141
Originator: YES
This new patch fixes a number of problems regarding writes. It includes some changes by Martin Thomas (see also http://www.siwawi.arubi.uni-kl.de/avr_projects/arm_projects/efsl_arm/index.html\).
It furthermore includes fixes for the extraction of the card size.
This patch to the original efsl-0.2.8 source tree supersedes all former patches that I published. It was tested with:
SanDisk 128MB MMC
Hama 128MB RS-MMC
Hama 512MB MMCmobile
noname 1GB SD
noname 1GB microSD
A-Data 4GB SDHC
Have fun,
Juri
revised patch for new LPC23x8 MCI support, obsoletes older patches
Logged In: YES
user_id=105141
Originator: YES
File Added: efsl-0.2.8-lpc23x8.diff
LPC23x8 MCI support, stand-alone files, same as diff
Logged In: YES
user_id=105141
Originator: YES
File Added: efsl-lpc23x8.tar.gz
Logged In: YES
user_id=105141
Originator: YES
For all of those who want the "real files", not patches, I upload an archive with the files. It's equivalent to the patch (*.diff).
Cheers,
Juri
Logged In: NO
Hey pktomo
Thanks for your interface saved me alot of time, but I found a small bug in the mci_read_block function:
/* read the data from the bus and store it in the buffer */
count = 0;
do {
while ((MCI_STATUS & MCI_STAT_RX_DATA_AVLBL) && (count < (MMC_BLOCK_SIZE / sizeof(euint32)))) {
ex_setb32(buf, count * 4, MCI_FIFO);
count++;
}
} while (!(MCI_STATUS & (MCI_STAT_DATA_TIMEOUT | MCI_STAT_RX_OVERRUN | MCI_STAT_DATA_END | MCI_STAT_DATA_BLOCK_END)) && (count < (MMC_BLOCK_SIZE / sizeof(euint32))));
In rare cases its posible to miss 1 read. If you exit the first loop and recives the last bytes of a block before the 2nd loop.
A quick and dirty fix could be:
count = 0;
do {
status = MCI_STATUS;
while ((status & MCI_STAT_RX_DATA_AVLBL) && (count < (MMC_BLOCK_SIZE / sizeof(euint32)))) {
ex_setb32(buf, count * 4, MCI_FIFO);
count++;
status = MCI_STATUS;
}
} while (!(status & (MCI_STAT_DATA_TIMEOUT | MCI_STAT_RX_OVERRUN | MCI_STAT_DATA_END | MCI_STAT_DATA_BLOCK_END)) && (count < (MMC_BLOCK_SIZE / sizeof(euint32))));
But thank again for your interface.
Best regards
Jonad Christensen
Denmark
Logged In: YES
user_id=105141
Originator: YES
Hi Jonad,
thanks for your comment. Yes, after looking twice at your patch I see now where the problem is and that your solution not really solves it (it might just get optimized away by the compiler).
The right fix would be to ignore any of MCI_STAT_DATA_END or MCI_STAT_DATA_BLOCK_END if MCI_STAT_RX_DATA_AVLBL is set. I'll provide a fix for this in the next couple of weeks.
Cheers,
Juri