完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
模拟U盘,把USB线连电脑后,像是插上U盘一样,能识别出板上SPI驱动的SD卡,和U盘一样,但很慢,枚举很慢,电脑显示写入时177K/秒也很慢;过程和挂载fatfs基本一样,很简单,就是在接口那里放上出和入的程序,照常满足3个参数。
打上断点后,看到SPI的应答从没出错,问题是从来没连续块读写,觉得应该得有个USB的缓冲区吧,因为单片机的内存挺金贵的,目前应该是默认的安全模式,一个byte一个蹦,节省资源。 usbd_storage_if.c里面增加上SPI的块读写就能识别SD卡容量,前提是SD卡需要先识别出,和fatfs无关。 怎么样让块的连续读写生效,发挥作用啊????SPI速度有18M啊,速度全让单字节读写浪费了。 虚拟串口和HOST+storage还没弄,但是我觉得路数应该一样的,hal库还是挺给力,要养成习惯就是把程序写在用户代码区。 /******************************************************************************* * Function Name : STORAGE_Read_FS * Description : * Input : None. * Output : None. * Return : None. *******************************************************************************/ int8_t STORAGE_Read_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)//这个blk_len长度从来都是1,就不肯大于1,正在找原因。 { /* USER CODE BEGIN 6 */ if(blk_len==1) { if(SD_ReadBlock(buf, blk_addr*512, 512)!=SD_RESPONSE_NO_ERROR) SD_ReadBlock(buf, blk_addr*512, 512); } else SD_ReadMultiBlocks(buf, blk_addr*512, 512, blk_len); return (USBD_OK); /* USER CODE END 6 */ } /******************************************************************************* * Function Name : STORAGE_Write_FS * Description : * Input : None. * Output : None. * Return : None. *******************************************************************************/ int8_t STORAGE_Write_FS (uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len) { /* USER CODE BEGIN 7 */ if(blk_len==1) { if(SD_WriteBlock(buf,blk_addr*512, 512)!=SD_RESPONSE_NO_ERROR) SD_WriteBlock(buf,blk_addr*512, 512); } else SD_WriteMultiBlocks(buf, blk_addr*512, 512, blk_len); return (USBD_OK); /* USER CODE END 7 */ } 那个lun参数其实应该就是DRV,第几个硬件U口而已,既然板上只有1个U插口,当然是0,不用管了; USB的hal库似乎比较新,看那注释是空的,看不到参数的解释。 送上个命令,在电脑的“运行”里输入 chkdsk G:/F ,可以修复被自己读写乱了的SD卡,G是SD卡的盘符,到连格式化都不行时候,这个命令可以救命。 |
|
相关推荐
1个回答
|
|
从您的描述来看,模拟U盘的速度慢可能有以下几个原因:
1. **单片机性能限制**:单片机的处理器速度和内存可能限制了数据传输的速度。如果单片机的性能不足以快速处理USB协议和SPI通信,那么整体速度就会受到影响。 2. **USB协议实现**:USB协议的实现可能不够高效。如果USB协议的实现没有充分利用硬件特性,或者存在一些不必要的延迟,那么速度也会受到影响。 3. **SPI通信速度**:SPI通信速度可能不够快。如果SPI接口的速度较慢,那么在与SD卡通信时,整体速度也会受到影响。 4. **缓冲区管理**:您提到了可能需要一个USB的缓冲区。确实,为了提高数据传输速度,通常会使用缓冲区来减少对单片机内存的访问次数。如果缓冲区管理不当,可能会导致速度变慢。 5. **SD卡性能**:SD卡的性能也可能影响整体速度。如果SD卡的读写速度较慢,那么即使USB和SPI通信速度很快,整体速度也会受到限制。 为了提高速度,您可以尝试以下方法: 1. **优化单片机性能**:尽量选择性能较好的单片机,以提高数据处理速度。 2. **优化USB协议实现**:检查USB协议的实现,看看是否有可以优化的地方,以减少不必要的延迟。 3. **提高SPI通信速度**:尝试提高SPI通信的速度,以提高与SD卡的通信效率。 4. **使用缓冲区**:合理使用缓冲区,减少对单片机内存的访问次数,以提高数据传输速度。 5. **选择高性能SD卡**:使用读写速度较快的SD卡,以提高整体速度。 6. **检查代码**:仔细检查您的代码,看看是否有可以优化的地方,以提高速度。 希望这些建议能帮助您解决速度慢的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1871 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1657 浏览 1 评论
1141 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
757 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
787浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
609浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
589浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-10 12:38 , Processed in 0.714563 second(s), Total 45, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号