我使用LPC2368开发板,开发一款以SD卡为存储介质的大U盘,现在读写速度慢
我使用LPC2368开发板,开发一款以SD卡为存储介质的大U盘,开发板上带有SD卡模块和USB模块,我使用的编译器为KEIL,所使用的代码为KEIL编译器携带的两个例子程序,一个是USBMEM程序,他是用LPC2368的内部存储器来模拟一个14K的U盘,另一个是SD-FILE程序,这个也是编译器带的SD卡的读写例子程序,我把这两个程序合并后,现在编译完全通过,没有错误也没有警告,但是现在的开发板连到电脑后,读取一个32M的压缩包需要一分钟,而写入需要十分钟,这个速度请问是不是过慢?我测试普通的U盘32M的压缩包读写基本不需要一分钟,SD卡的时钟频率脚现在是3M,SD卡的读写程序有两个时钟频率,高速模式选择代码如下
static void mci_set_speed (U32 speed) {
/* Set a MCI clock speed to desired value. */
U32 i,clkdiv;
if (speed == HIGH_SPEED) {
/* Max. 20 MBit used for Data Transfer. */
clkdiv = 1;
}
else {
/* Max. 400 kBit used in Card Initialization. */
clkdiv = 128;
}
MCI_CLOCK = (MCI_CLOCK & ~0xFF) | 0x300 | clkdiv;
/* delay 3MCLK + 2PCLK before next write */
for ( i = 0; i < 100; i++ );
}
分频应该已经选择到最高频率,我看了其他的SD卡程序,时钟频率也在3M,这个应该没有问题吧,USBMEM模拟U盘这个程序在不连接SD卡程序的时候写32M用时为1分钟,SD卡读写10M为一分钟,那么这两个程序合并后读写32M的速度应该是在3分钟吧,为什么我现在读写32M确要10分钟之久,合并处的代码如下
USB读处改写后的函数:
void MSC_MemoryRead (void) {
DWORD n;
if (Length > MSC_MAX_PACKET) {
n = MSC_MAX_PACKET;
} else {
n = Length;
}
if ( Offset+64> (HH*512)+512 || Offset <HH*512 )//此处为修改处,简单的判断下然后读
{
HH=Offset/512;
mci_read_sect(HH,Memory);
}
USB_WriteEP(MSC_EP_IN, &Memory[Offset%512], n);
Offset += n;
Length -= n;
CSW.dDataResidue -= n;
if (Length == 0) {
BulkStage = MSC_BS_DATA_IN_LAST;
}
if (BulkStage != MSC_BS_DATA_IN) {
// FIO2CLR = LED_RD;
CSW.bStatus = CSW_CMD_PASSED;
}
}
USB写处修改后的函数:
void MSC_MemoryWrite (void) {
DWORD n;
if( dd!=0 || (Offset+64)> ((de*512)+512) || Offset <(de*512) )//此处为修改处,判断下然后写SD卡
{
if(dd!=1)
{
mci_write_sect(de,Memory);
}
de=Offset/512;
dd=0;
}
for (n = 0; n < BulkLen; n++) {
Memory[Offset%512 + n] = BulkBuf[n];
}
Offset += BulkLen;
Length -= BulkLen;
CSW.dDataResidue -= BulkLen;
if ((Length == 0) || (BulkStage == MSC_BS_CSW)) {
mci_write_sect(de,Memory);
// FIO2CLR = LED_WR;
CSW.bStatus = CSW_CMD_PASSED;
MSC_SetCSW();
}
}
请做过的朋友给点提示,谢谢了
发表时间:2008年7月3日10:17:20