STM32Cube SDIO better SD driver

仅作个人纪录

st写的sd卡bsp就是一坨大的,遇上了cache跟dma全是灾难

包括但不限于:

因为源地址并没有dma对齐,所以需要scratch缓冲区,结果scratch缓冲区没有对齐,幽了个大默
cache的数据需要32字节对齐,这厮用memcpy操作了数据,最后缓冲区维护的办法还错了

ff更新到0.15-patch3了,还在0.12c

故自行移植ff,参考sd_driver写的sd驱动,仅在h7 sdmmc dma下测试:

## FATFS的buffer并没有保证STM32的对齐要求  建议不要启用CACHE  或传入的数据32字节对齐

启用CACHE后有许多乱七八糟的问题,比如CACH需要为32Byte对齐,所以app传入的缓冲区也需要32byte对齐,同时鉴于fatfs内部也有自己的缓冲区,很难控制缓冲区的32b对齐一致性,故建议关闭DCACHE。

比较麻烦的办法是在底层处理对齐问题,根据不同的大小、对齐选择不同的传输方式,并进行一次memcpy来对上层透明。在这里就不搞了

不方便粘贴代码,仅粘贴readme

## FATFS的buffer并没有保证STM32的对齐要求  建议不要启用CACHE  或传入的数据32字节对齐

启用CACHE后有许多乱七八糟的问题,比如CACH需要为32Byte对齐,所以app传入的缓冲区也需要32byte对齐,同时鉴于fatfs内部也有自己的缓冲区,很难控制缓冲区的32b对齐一致性,故建议关闭DCACHE。

比较麻烦的办法是在底层处理对齐问题,根据不同的大小、对齐选择不同的传输方式,并进行一次memcpy来对上层透明。在这里就不搞了

## 在启动了DCACHE的平台上,兼容的办法是启用SCRAH缓冲区,反而效率变低了

## CACHE 写的只写  读的只读  就可以避免写回擦除  用户层注意

## 说明:

SCRATCH缓冲区:DMA对齐需要

CACHE_MAINTEIN: CACHE需要

## 区别:

SCRATCH 4字节改成了32字节对齐

FATFS对象和FIL对象新增对齐(未验证可行性)

SD_write slow path 对缓冲区操作有问题 删除invalid,增加每个的clean

## 附:

CACHE的维护在最底层实现,维护scratch或者用户传入的数组。

用户层传入数据的时候,依然需要注意读的只读,写的只写。若不满足自行clean,invalid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值