|
发表于 2024-10-29 20:15:05
|
显示全部楼层
我今天也发现了,和楼上不同,我的会在10秒超时后返回FR_DISK_ERR(1)错误,本来我的IWDG只有2秒,老自动复位,把IWDG改超长了,才发现是f_read()的错误。
我的现象:
刚挂载U盘读写都正常,如果f_open后,直接一块块往缓冲区读取,也能从头到尾读完正常。但是如果一边读一遍发往串口(因为串口比较慢),发了几分钟就会不定位置f_read死等在上面那个 while (USBH_MSC_RdWrProcess(phost, lun) == USBH_BUSY)里面,返回的时候已经是10秒(默认)超时了,并且再f_read也直接报错返回(因为FIL结构体里已经置位了1号错误。)
此时f_read再读,f_close,再f_open,f_mount(NULL,再f_mount(&USBHFatFS,..都没有用,永远是错误1返回。只有拔掉U盘,再次插入,再f_mount才能再正常读写一段时间(几分钟)。
每次f_read出错的文件位置不同,时间不定。。。。
搞得我现在临时绕过方法:U盘插上,立刻将U盘文件复制到内部SPI Flash上(也挂载有FatFS),然后打开SPI Flash上的文件,向串口发送,能够从头到尾发完。
如果是U盘上的文件直接发,基本没法发完(4MB的文件,正常要6-7分钟,一般在2-5分钟就出错)。
我上面的说法可能会被误认为只能在U盘插上后几分钟内正常使用,实际不是这样的,实际是插上后不读写没问题,以后任意时间集中短暂读也没问题,慢悠悠长时间读读停停就可能出错,表现为突然在上述超时循环里打转10秒后错误返回,这时候底层为啥不能完成,USB_SCSI类的驱动和接口太复杂,作为一般用户,st的其他驱动还能分析分析,USB,NET之类的实在跟不进去 |
|