sdio 驱动框架可能存在的一个问题?

发布于 2020-08-03 23:53:50

问题详细描述:
使用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

存疑

  1. 作者加上RT_DEVICE_FLAG_STANDALONE这个字段是不是有特殊考量?
  2. 我的解决方法,简单粗暴,虽然现在测试下来,可以两个线程同时读写SD卡(一个是sd_sample, 一个是我应用程序),但这样做,不知道会不会有其他问题?
  3. 针对存疑的第2点,不知道有没有其他问题, 我做了这样的一个测试,发现会有异常出现:上电,应用程序正常读写SD卡, 同时,在shell终端执行sd_sample, 读写sd卡, 连续几次后, 执行reboot命令, 重启后,发现SD卡 已经损坏,需要重新格式化成FAT32,才可以正常被mount

查看更多

关注者
0
被浏览
633
qq_还没想好
qq_还没想好 2020-08-24

理论上 SD 被挂载成文件系统后,就不应该再其他地方读写 SD 设备。可能会造成数据不同步。

其次异常掉电,概率造成文件丢失,文件系统损坏等问题。FAT 文件系统不支持掉电。

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览