STM32F103xxx的官方SDIO驱动移植,终于搞定了

2019-10-15 20:42发布

最近闲了就玩玩STM32的SDIO驱动去了,小有收获

之前移植的是http://www.openedv.com/posts/list/25845.htm这个版本的,发现bug特多,很不正常的那个,头大

后面移植了官方的V4.5.0这个版本,搞定了,建议大伙们想玩这个的话移植这个靠谱一点,呵呵,不过还是有个bug的,对照SD卡的相关资料也很容易找出来,主要就是在读写block函数里面要设置block大小命令CMD16,要不然很容易死在DMA检测上面(如果用DMA控制传输的话)

呵呵,发此帖庆祝一下,嘿嘿

附件是源代码,学习原子的做法,增加
SD_Error SD_ReadDisk(uint8_t *readbuff, uint32_t sector, uint16_t cnt);    //读取磁盘SD_Error SD_WriteDisk(uint8_t *writebuff, uint32_t sector, uint16_t cnt);    //写入磁盘

这两个函数,方便操作,呵呵


卡结构体中SDCardInfo.CardCapacity(卡的容量单位修改为MB)要想得到字节为单位的请将SDCardInfo.CardCapacity<<20即可















友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
49条回答
八度空间
1楼-- · 2019-10-21 19:50
回复【40楼】lansing1648:
---------------------------------
恩,上传了一个搞好的,你测试一下看下能不能编译过去,我试过MDK3.8和MDK4.7的,都是可以编译的
lansing1648
2楼-- · 2019-10-22 00:21
#if !_LFN_UNICODE
w &= 0xFF;
if (IsDBCS1(w)) 
        {                 /* Check if it is a DBC 1st byte (always false on SBCS cfg) */
b = (BYTE)p[si++]; /* Get 2nd byte */
if (!IsDBCS2(b))
return FR_INVALID_NAME; /* Reject invalid sequence */
else w = (w << 8) + b; /* Create a DBC */
}
w = ff_convert(w, 1); /* Convert ANSI/OEM to Unicode */
if (!w) return FR_INVALID_NAME; /* Reject invalid code */
#endif
-----------------------------------------------------------------------------
else w = (w << 8) + b; /* Create a DBC */
 这里我 加了个else编译才通过
八度空间
3楼-- · 2019-10-22 01:30
 精彩回答 2  元偷偷看……
lansing1648
4楼-- · 2019-10-22 02:20
回复【46楼】Badu_Space:

回复【45楼】lansing1648:
---------------------------------
你这个不是文件系统里面的代码么?这里面不用改吧我的编译的时候只是报警,不过不影响使用

---------------------------------
是的 ,有报警,语句执行不下去.这样改一下应该没问题
八度空间
5楼-- · 2019-10-22 08:03
回复【47楼】lansing1648:
---------------------------------
你该了之后试下操作SD卡里面的文件什么的,看下有没什么问题。我这里有个战舰的USB测试工程,你可以试下http://www.openedv.com/posts/list/27484.htm
wgco
6楼-- · 2019-10-22 11:43
我的测试结果:上电后,要等很长时间,才显示SD卡初始化失败!不知道什么原因?求回复

一周热门 更多>