高中生
最后登录1970-1-1
在线时间 小时
注册时间2015-9-21
|
本帖最后由 赵董 于 2020-8-6 08:42 编辑
论坛各位大侠好:
小弟项目中用到SPI FLASH 模拟U盘。选用STM32F103 + W25Q128
参考火哥的代码,U盘的拷贝速度大约在50KBytes/s。火哥代码中,设置SPI flash的块大小是4K字节。先擦除4K,然后写入。代码如下。
- uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
- {
- switch (lun)
- {
- case 0:
- Memory_Offset+=(770*4096);//扇区偏移,外部Flash文件系统空间放在外部Flash后面5M空间
- //printf("write add =%d.length=%d\n",Memory_Offset/4096,Transfer_Length/4096);
- SPI_FLASH_SectorErase(Memory_Offset);
- SPI_FLASH_BufferWrite((uint8_t *)Writebuff,Memory_Offset,Transfer_Length);
- break;
- default:
- return MAL_FAIL;
- }
- return MAL_OK;
- }
复制代码 拷贝速度主要受flash的擦除速度限制,我们看一下这个表格
相同容量的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*/
|
|