|
楼主 |
发表于 2019-3-14 19:46:22
|
显示全部楼层
本帖最后由 orta1986 于 2019-3-14 20:02 编辑
SD_Error SD_ReadMultiBlocks(uint8_t *readbuff, uint64_t ReadAddr, uint16_t BlockSize, uint32_t NumberOfBlocks)
我使用SD_ReadMultiBlocks 这个函数,申请一个 8192 字节的数组(SD_TEST_ARRAY), 也就是 512 X 16个扇区
while(1)
{
STM32_DEBUG0_L;
SD_ReadMultiBlocks(SD_TEST_ARRAY,0,512,16); Status = SD_WaitReadOperation();
while(SD_GetStatus() != SD_TRANSFER_OK);
STM32_DEBUG0_H;
}
采用以上方式观察信号,发现 IO 为低的时长是1.1ms, 也就是 1000/1.1 * 8192 = 7.4M字节/秒,的确,比单个512字节传输要快不少呢。
但是大大,这个SD_ReadMultiBlocks 我是直接从扇区读数,不是通过FATFS打开的文件。
我自己做的一个子函数如下:
也就是 打开一个文件,选择偏移地址,然后读出多少个字节。因为这个二进制文件是2的整次幂,所以,都按512字节为一个单位偏移。
然后测试方法改为: while(1)
{
STM32_DEBUG0_L;
SD_FILE_READ(STM32_DEBUG1_PORT,STM32_DEBUG1,"0:BACK",0,8192,SD_TEST_ARRAY);
STM32_DEBUG0_H;
}
从F_READ 中查看,内部调用了DISK _READ。 然后DISK_READ中,如下
如果我用FATFS, 使用F_OPEN 及 F_READ 来读取 8192字节,则单次需要33MS, 与上面 我直接通过SD_ReadMultiBlocks 读取 速度差好多。
但是从F_READ -> DISK_READ 中看到,好像DISK_READ 也调用了SD_ReadMultiBlocks,但是怎么会差别这么大呢
|
|