问题详细描述:
使用STM32F413系列单片机, rt-thread的SDIO驱动框架,SD卡已经成功mount, 可以正常读写,擦除等操作, 但是当我运行外设示例sd_sample的时候,发现调用rt_device_open时,返回RT_EBUSY 错误, 跟踪调查,发现在注册sdio/block_dev.c中,注册sd卡设备时,指定了flag中,包含了RT_DEVICE_FLAG_STANDALONE 这个字段, 因为我们mount的时候,已经打开一次了, 在shell中,调用sd_sample命令再次打开时,返回了RT_EBUSY错误。
截图如下:
注册时,指定了RT_DEVICE_FLAG_STANDALONE
sd.png
使用sd_sample再次打开提示错误
sd1.png
解决方法:
在sdio/block_dev.c 注册时,删除了RT_DEVICE_FLAG_STANDALONE 这个字段, 可以正常跑sd_sample
存疑
作者加上RT_DEVICE_FLAG_STANDALONE这个字段是不是有特殊考量?
我的解决方法,简单粗暴,虽然现在测试下来,可以两个线程同时读写SD卡(一个是sd_sample, 一个是我应用程序),但这样做,不知道会不会有其他问题?
针对存疑的第2点,不知道有没有其他问题, 我做了这样的一个测试,发现会有异常出现:上电,应用程序正常读写SD卡, 同时,在shell终端执行sd_sample, 读写sd卡, 连续几次后, 执行reboot命令, 重启后,发现SD卡 已经损坏,需要重新格式化成FAT32,才可以正常被mount