新手上路
- 积分
- 49
- 金钱
- 49
- 注册时间
- 2018-12-24
- 在线时间
- 33 小时
|
12金钱
本帖最后由 奔驰的战猪 于 2019-4-14 16:51 编辑
板子: STM32 f103zet6(精英板)SD卡 : 8G 的 大容量卡
背景 : 在SD_ReadBlock(读取一个数据块的函数)中,我们先发送了 CMD16 ,设置数据块的大小为 512 字节,又设置好了数据块的格式,然后又发送了CMD17指令,开始读取数据块(一个)。
问题1 : CMD17指令发送完并且得到正确响应以后,读取到的数据是放在 FIFO 寄存器里面吗?
问题2 : 当接收区半满,我们开始循环读取数据,读取了8个字,(32字节)到缓冲数组 buf 里面。但是上面不是设置了块大小为512字节,我只读取了32个字节没有读取完啊。而且整个FIFO寄存器只分了16个地址给接收用,全部放满也才 64字节 的数据而已,远远达不到 一个数据块 512字节这么大, 究竟是怎么回事呢?
问题3 : 如果我要是想多块读取数据的话,那么每个块的入口地址怎么算呢?(因为读取单块指令CMD17要带一个地址参数!!!)是 0 +512 * n 吗?
[mw_shl_code=c,true]while(!(SDIO->STA&((1<<5)|(1<<1)|(1<<3)|(1<<10)|(1<<9))))//ÎTéÏòç/CRC/3¬ê±/íê3é(±êÖ¾)/Æeê¼Î»′íÎó
{
if(SDIO_GetFlagStatus(SDIO_FLAG_RXFIFOHF) != RESET) //½óêÕÇø°ëÂú,±íê¾Öáéù′æáË8¸ö×Ö
{
for(count=0;count<8;count++) //Ñ-»·¶áè¡êy¾Y
{
*(tempbuff+count)=SDIO->FIFO;//FIFOÖDóD32λ£¬Ã¿ò»Î»¶Ôó|ò»¸öμØÖ·£¬ÆäÖDÿ16λÎaò»×飬×ö·¢Ëí/½óêÕ£¬½óêÕ°ëÂú£¬¾íêÇ8×é¡£
} //SDIO_ReadData();
tempbuff+=8;
timeout=0X7FFFFF; //¶áêy¾Yòç3öê±¼ä
}else //′|àí3¬ê±
{
if(timeout==0)return SD_DATA_TIMEOUT;
timeout--;
}
}[/mw_shl_code]
|
|