野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 19860|回复: 0

STM32F103外部SPI FLASH 模拟U盘拷贝速度问题

[复制链接]
发表于 2020-8-5 16:41:34 | 显示全部楼层 |阅读模式
本帖最后由 赵董 于 2020-8-6 08:42 编辑

论坛各位大侠好:
       小弟项目中用到SPI FLASH 模拟U盘。选用STM32F103  + W25Q128

       参考火哥的代码,U盘的拷贝速度大约在50KBytes/s。火哥代码中,设置SPI flash的块大小是4K字节。先擦除4K,然后写入。代码如下。
  1. uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
  2. {
  3.   switch (lun)
  4.   {
  5.     case 0:
  6.                         Memory_Offset+=(770*4096);//扇区偏移,外部Flash文件系统空间放在外部Flash后面5M空间
  7.                         //printf("write add =%d.length=%d\n",Memory_Offset/4096,Transfer_Length/4096);
  8.                         SPI_FLASH_SectorErase(Memory_Offset);
  9.                         SPI_FLASH_BufferWrite((uint8_t *)Writebuff,Memory_Offset,Transfer_Length);
  10.       break;
  11.     default:
  12.       return MAL_FAIL;
  13.   }
  14.   return MAL_OK;
  15. }
复制代码
拷贝速度主要受flash的擦除速度限制,我们看一下这个表格 1596616627(1).jpg
相同容量的flash,使用越小的擦除单位,那么擦除完整块flash就越耗时,因此我想能不能一次擦32K或64K,目的是提高拷贝速度。
我修改程序以后,在32k下无法格式化U盘。64K下都不会蹦出U盘。
下边的变量也做了相应修改,不知哪里出错了。
Mass_Block_Size[0]  =32768;
#define BULK_MAX_PACKET_SIZE  0x00000040
uint32_t Data_Buffer[BULK_MAX_PACKET_SIZE*512]; /* 32K bytes*/
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 12:44 , Processed in 0.057689 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表