我是最近才开始看关于SD卡的知识,看的是库函数版的 实验38 SD卡实验。
看到SD卡初始化函数 SD_Init()函数中的 SD_EnableWideBusOperation(SDIO_BusWide_4b) 这个函数,感觉有点问题,所以想请原子哥答疑一下。
首先 有个宏定义 #define SDIO_BusWide_4b ((uint32_t)0x00000800)
然后到EnableWideBusOperation(u32 WideMode) , 这个函数中去,这个函数调用了另外一个函数, 为 SDEnWideBus(WideMode),也就是在这个
函数里面,通过发送ACMD6这个命令来 改变SD卡的 数据总线的宽度,但是这个函数的 参数 是 u8型的,所以SDIO_BusWide_4b 这个参数最后
传递到 SDEnWideBus()这个函数的时候,已经变为0了, 会导致发送ACMD6这个命令时,是不会改变SD卡的数据总线的宽度的,这个看函数的代码
就可以知道,就是,执行完这个命令,SD卡的数据总线宽度还是1位, 但是在EnableWideBusOperation()这个函数中,在调用完SDEnWideBus()函数后,
检查SD卡没有错误后, 会将STM32F407的SDIO接口的数据总线 宽度 配置为4位, 这样子会和SD卡 不匹配呀, 但是后来的实验,通过串口可以读到
数据,所以,关于这个部分, 有点迷茫, 求原子哥解答一下。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
好的, 我看一下 寄存器版本的。
一周热门 更多>