完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
有个32G的eMMC,分成了4个盘。
连上usb只会显示其中的一个盘,用户可以去操作这个盘。 希望在未显示u盘或者显示了u盘但是未进行读写的情况下判断另外几个盘是否存在文件并上传到服务器。 目前已经实现了连上u盘只显示一个盘的功能,读写也正常。退出u盘后,上传文件也正常。 目前的问题是u盘显示出来的情况下,同时进行文件上传就会出现disk error。 我知道是SDIO操作冲突了,想问下这个有好的方案么? 裸机开发,未使用操作系统。 我想到的是弄2个标志位(u盘读写和fatfs上传),u盘读写优先级要高于fatfs上传。 想问下大佬,这个标志位的判断裸机应该怎么写,或者有没有其他更好的方案? /** * @brief Reads Sector(s) * @param pdrv: Physical drive number (0..) * @param *buff: Data buffer to store read data * @param sector: Sector address (LBA) * @param count: Number of sectors to read (1..128) * @retval DRESULT: Operation result */DRESULT USER_read( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */){ /* USER CODE BEGIN READ */ if (usbd_inuse) { return RES_NOTRDY; } fatfs_inuse = 1; DRESULT res = FATFS_read(pdrv, buff, sector, count); fatfs_inuse = 0; return res; /* USER CODE END READ */}/** * @brief Writes Sector(s) * @param pdrv: Physical drive number (0..) * @param *buff: Data to be written * @param sector: Sector address (LBA) * @param count: Number of sectors to write (1..128) * @retval DRESULT: Operation result */#if _USE_WRITE == 1DRESULT USER_write( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */){ /* USER CODE BEGIN WRITE */ /* USER CODE HERE */ if (usbd_inuse) { return RES_NOTRDY; } fatfs_inuse = 1; DRESULT res = FATFS_write(pdrv, buff, sector, count); fatfs_inuse = 0; return res; /* USER CODE END WRITE */}#endif /* _USE_WRITE == 1 *//** * @brief Reads data from the medium. * @param lun: Logical unit number. * @param buf: data buffer. * @param blk_addr: Logical block address. * @param blk_len: Blocks number. * @retval USBD_OK if all operations are OK else USBD_FAIL */int8_t STORAGE_Read_HS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len){ /* USER CODE BEGIN 13 */ UNUSED(lun); usbd_inuse = 1; if (fatfs_inuse) { return USBD_BUSY; } DRESULT res = FATFS_read(lun, buf, blk_addr, blk_len); usbd_inuse = 0; return res == RES_OK ? USBD_OK : USBD_FAIL; /* USER CODE END 13 */}/** * @brief Writes data into the medium. * @param lun: Logical unit number. * @param buf: data buffer. * @param blk_addr: Logical block address. * @param blk_len: Blocks number. * @retval USBD_OK if all operations are OK else USBD_FAIL */int8_t STORAGE_Write_HS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len){ /* USER CODE BEGIN 14 */ UNUSED(lun); usbd_inuse = 1; if (fatfs_inuse) { return USBD_BUSY; } DRESULT res = FATFS_write(lun, buf, blk_addr, blk_len); usbd_inuse = 0; return res == RES_OK ? USBD_OK : USBD_FAIL; /* USER CODE END 14 */} |
|
相关推荐
1个回答
|
|
为了解决STM32F429 USB和FATFS同时操作eMMC冲突问题,我们可以采取以下步骤:
1. 定义两个标志位:`usb_operation` 和 `fatfs_upload`。这两个标志位分别表示USB设备操作和FATFS文件上传的状态。 2. 在初始化阶段,将两个标志位都设置为0。 3. 当USB设备连接时,设置 `usb_operation` 标志位为1,并暂停FATFS上传操作。 4. 当USB设备断开连接时,设置 `usb_operation` 标志位为0,并恢复FATFS上传操作。 5. 在FATFS上传操作开始前,检查 `usb_operation` 标志位。如果为1,则暂停上传操作,等待USB设备断开连接。 6. 在FATFS上传操作过程中,定期检查 `usb_operation` 标志位。如果发现标志位变为1,立即停止上传操作,等待USB设备断开连接。 7. 在USB设备读写操作过程中,如果需要访问eMMC,可以设置 `fatfs_upload` 标志位为1,以通知FATFS上传操作暂停。 8. 在USB设备读写操作完成后,将 `fatfs_upload` 标志位设置为0,以恢复FATFS上传操作。 通过以上步骤,我们可以确保在USB设备连接时,FATFS上传操作会被暂停,从而避免SDIO操作冲突。同时,在USB设备断开连接后,FATFS上传操作可以继续进行。 这种方法的优点是简单易实现,不需要使用操作系统。但缺点是可能存在一定的延迟,因为需要在FATFS上传操作过程中定期检查 `usb_operation` 标志位。如果对实时性要求较高,可以考虑使用中断或轮询的方式提高检查频率。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1935浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
728浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
567浏览 3评论
593浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
551浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 09:45 , Processed in 1.192807 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号