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();
}
}
请做过的朋友给点提示,谢谢了