学前班
最后登录1970-1-1
在线时间 小时
注册时间2019-3-15
|
野火大大好,小弟最近用 F103RET6 设计了一个板子,用您提供的 SDIO+FATFS 历程进行修改,对一个 二进制文件进行读取测试。
首先,我先不用FATFS, 直接对扇区进行读取:
while(1)
{
STM32_DEBUG0_L;
Status = SD_ReadMultiBlocks(SD_TEST_ARRAY,0,512,16);
Status = SD_WaitReadOperation();
while(SD_GetStatus() != SD_TRANSFER_OK);
STM32_DEBUG0_H;
}
读取的长度是 512x16个 字节,通过一个IO 翻转,用逻辑分析仪测量其读取周期,目前测试到 周期是1.1ms, 也就是 1000/1.1 * 8192 = 7.4M字节/秒。
但是,实际项目使用,还是希望用FATFS,因为这样对文件管理比较方便,然后我修改如下:
while(1)
{
SD_FILE_READ(STM32_DEBUG1_PORT,STM32_DEBUG1,"0:BACK",0,8192,SD_TEST_ARRAY);
}
其中,SD_FILE_READ是我自己做的一个子程序,内容如下:
void SD_FILE_READ(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,u8 *filename, u32 offset_byte, u32 read_num,u8* buffer)
{
GPIO_ResetBits(GPIOx, GPIO_Pin);
f_open(&fnew, filename, FA_OPEN_EXISTING | FA_READ);
f_lseek(&fnew,offset_byte);
f_read(&fnew, buffer, read_num, &fnum);
f_close(&fnew);
GPIO_SetBits(GPIOx, GPIO_Pin);
}
功能就是,调用OPEN打开文件,调用LSEEK 设定偏移地址,用F_READ读取。
如果按以上方法进行测试,发现 读取512x16字节 的周期是 33ms,远远高于第一个测试(直接读扇区)
然后,我追踪F_READ,发现,F_READ内部会调用DISK_READ,然后看到DISK_READ的内容,虽然内部有 SD_ReadMultiBlocks,但是好像实际并没有使用它。
好像第一个条件 if((DWORD)buff&3) 就成立,直接进入内部执行完,就返回了,因此才会特别慢。
所以想请教一下,如何在FATFS下 使用SD_ReadMultiBlocks 对二进制文件高速读取呢?
|
|