初级会员

- 积分
- 190
- 金钱
- 190
- 注册时间
- 2016-11-30
- 在线时间
- 92 小时
|
10金钱
论坛各位大侠好:
小弟项目中用到SPI FLASH 模拟U盘。选用STM32F103 + W25Q128
参考原子哥的代码,原子哥把 SPI FLASH的扇区设置为512字节,SPI FLASH的最小擦除单位是4K字节。所以存在读修改写的问题,导致一个扇区重复写。U盘拷贝的速度只有7KBytes/s。
我把扇区设置成4K字节,最小擦除单位也是4K字节。去掉了重复写的问题,U盘拷贝的速度提高到了50KByes/s。 我还是觉的拷贝速度慢。
相同容量的flash,使用越小的擦除单位,那么擦除完整块flash就越耗时,因此我想能不能一次擦32K或64K,目的是提高拷贝速度。
我修改程序以后,在32k下无法格式化U盘。64K下都不会蹦出U盘。
下面是相应的配置修改。
- Mass_Memory_Size[0]=1024*1024*16; //前16M字节
- Mass_Block_Size[0] =1024*32; //设置SPI FLASH的操作扇区大小为4096
- Mass_Block_Count[0]=Mass_Memory_Size[0]/Mass_Block_Size[0];
-
- Data_Buffer=malloc(BULK_MAX_PACKET_SIZE*512); //在堆区为USB数据缓存区申请内存
- if (Data_Buffer == NULL) //如果申请内存失败卡死在这里
- {
- while(1);
- }
- Bulk_Data_Buff=malloc(BULK_MAX_PACKET_SIZE); //在堆区申请内存
- if(Bulk_Data_Buff == NULL) //如果申请内存失败卡死在这里
- {
- while(1);
- }
复制代码 debug调试发现没有进入uint16_t MAL_Write(uint8_t lun, uint64_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)函数。该函数都没有进入,暂且不用考虑flash底层驱动,我认为更多的可能是USB配置或是别的地方出问题了。希望原子哥以及论坛各位大神拔刀相助。
CAN_Loader_USB_APP.rar
(7.49 MB, 下载次数: 22)
|
|