当前位置: 首页 > news >正文

HAL库通过FATFS和SDIO+DMA写入SD卡数据错误

 HAL库F4版本 1.28.1

     最近在使用HAL库配置SDIO+DMA并通过FATFS向SD卡写入数据,但是发现写入的数据经常有错误,不是少了一部分就是多了一部分,写入的数据为csv格式,通过循环向缓冲区写入"100100,12.345678\r\n"数据来观察问题,测试代码大概如下:

DoubleBuffer_Write(&DoubleBuffer, "100100,12.345678\r\n", (sizeof("100100,12.345678\r\n")-1));  //写入双缓冲区
if(DoubleBuffer.ready == true)
{DoubleBuffer.ready = false;res = f_write(&SDFile, DoubleBuffer.buf_proc, DoubleBuffer.proc_len, &bytesWritten);  // 批量写入文件if (res != FR_OK) {} else {res = f_sync(&SDFile);     }}

    循环写入后将写入SD卡的数据导出,观察到写入数据经常发生错误,如下:

     排除掉缓冲区的问题后,将问题定位到HAL库的FATFS和SDIO+DMA驱动上,

上网查阅相关资料也发现在stm32标准库中该驱动确实存在问题,

带FatFS的SD卡写数据出错情况测试记录,及其解决办法 - 第2页 - 文件系统 - 硬汉嵌入式论坛 - Powered by Discuz!

F4系列标准库库SDIO的FatFS例子修改一个bug,可提升4线SDIO的DMA稳定性 - STM32F429 - 硬汉嵌入式论坛 - Powered by Discuz! 继续提升STM32F4的4线SDIO DMA方式的读写稳定性,发布新版案例(2020-06-30) - STM32F429 - 硬汉嵌入式论坛 - Powered by Discuz!

     但是说明了HAL库中关于驱动的问题都已经解决了,那为什么我向SD卡写入的时候还存在问题呢?最后在cubemx中发现我的SDIO TX的DMA突发传输配置有问题, 我的写缓冲区是char类型,而我的cubemx配置的内存date witdh为word类型如下:

   由于DMA 每次取 4 字节写入,而我的缓冲区是字节排列,这就导致可能访问未分配内存,这也解释了我上面数据错乱的问题,而且每次错乱的部分都不超过三字节;后面修改DMA配置的内存date witdh为char类型,和缓冲区保持一致,如下:

 后再次测试,连续写入1M字节未出现任何问题;

/**********************************补充**************************/

          后面测试,当DMA配置的内存date witdh仍然保持为word类型时,如果char类型写入缓冲区大小小于512字节时写入也不会出现错误,大于512字节时就会出现和前面描述的一样的错误情况;原因未知。

相关文章:

  • MSTP+VRRP+DHCP(ENSP)
  • docker 部署服务工具记录
  • 1. python开发小笔记
  • Python(23)Python异常处理完全指南:从防御到调试的工程实践
  • Jenkins 简易使用记录
  • 天梯赛数据结构合集
  • Qt官方案例知识点总结(图形视图——Colliding Mice)
  • 极狐GitLab 账号限制有哪些?
  • 从数字化到智能化,百度 SRE 数智免疫系统的演进和实践
  • 第 5 期(进阶版):训练第一个 DDPM 模型(使用 CIFAR-10 数据集)
  • Kafka 时间轮
  • 杭州小红书代运营公司-品融电商:全域增长策略的实践者
  • U盘实现——双盘符实现
  • AI当前状态:有哪些新技术
  • 深入理解分布式缓存 以及Redis 实现缓存更新通知方案
  • Leetcode 2158. 每天绘制新区域的数量【Plus题】
  • 复现SCI图像增强(Toward fast, flexible, and robust low-light image enhancement.)
  • 高安全低功耗MCU:机器人控制系统的智能化与可靠性提升
  • Kubernetes》》k8s》》Namespace
  • 评测 Doubao-1.5-thinking-pro | 豆包·深度思考模型
  • 北京理工大学:教师宫某涉嫌师德失范,暂停其一切职务活动
  • “这是本届政府的态度”,英国明确拒绝与中国脱钩
  • 航行警告!南海部分水域进行军事训练,禁止驶入
  • 杭州:调整个人购买家庭住房享受契税优惠住房套数查询规则
  • 专业纯粹,安静温暖,上海古籍书店明日重新开张
  • 宋涛会见洪秀柱一行:维护台海和平稳定,扩大两岸交流合作