打印
[STM32]

振南ZN-X开发板【STM32M3版】模块实验之 SD卡IO模拟/硬件SPI比速

[复制链接]
2825|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
znmcu|  楼主 | 2014-10-10 13:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 znmcu 于 2014-10-10 14:16 编辑

振南网站还在继续美化改进,暂时提供一个平台来发布振南的实验和相关资料!
http://www.znmcu.cn/znx_m3_exp_sd_speed_test.html
振南QQ:987582714  群:198521880

SD卡物理扇区读写IO模拟SPI与硬件SPI
两种驱动方式速度性能比较【STM32 M3版】
实验说明:
SD卡物理扇区读写实验》中我们使用了两种SPI接口方式,即IO模拟SPI方式与硬件SPI方式。它有各有利弊,但是很多人更关心它们的数据读写速度。此实验主要针对此方面进行测试和评估。
所需硬件:
此实验中需要的硬件有:
ZN-X开发板基板(STM32 M3)【也可使用自己的开发板,需要将SD卡模块与开发板通过导线相连,还需要在IO上加10K上拉电阻】
ARM-OBJLINK仿真器(用于仿真与程序下载)
USB转串口模块(用于串口通信与程序下载)
SD卡读写模块与SD
【注:此实验中使用的是SD2接口SD1连接的STM32IO,没有硬件SPI功能,因此SD1只能使用IO模拟SPI方式。】
电路原理图及详解:
同《SD卡物理扇区读写实验》。
实验方法与流程:
主要代码如下:读写SD卡的连续10000个扇区,同时使用定时器记录所花费的时间,最终分别计算得到它们的数据读写速度。
unsigned char pbuf[512]; //数据缓冲区
extern unsigned int counter;

int main(void)
{         
int i=0,res=0,cnt=0;
u32 tt_sec=0;
delay_init();
uart_init(9600);                 //串口初始化为9600
printf("串口设置完毕\r\n");
SD2_IOSPI_Init();
TIM3_Int_Init(10000,7200);
while(SD2_Init())
{
cnt++;
printf("SD卡2初始化已尝试%d次\r\n",cnt);
if(cnt>=3) printf("振南ZN-X开发板SD卡2初始化失败\r\n");while(1);
  }
printf("振南ZN-X开发板SD卡2初始化成功\r\n");
tt_sec = SD2_GetTotalSec();
printf("SD卡2总扇区:%d\r\n",tt_sec);
printf("SD卡2总容量(MB):%d\r\n",tt_sec>>11);

for(i=0;i<512;i++) pbuf=i;

printf("开始计时....\r\n");
counter=0;
TIM_Cmd(TIM3, ENABLE);
for(i=0;i<10000;i++)
{
SD2_Write_Sector(1000+i,pbuf);
}
TIM_Cmd(TIM3, DISABLE);
printf("停止计时....\r\n");
printf("SD卡2写扇区完成,共花费%d秒\r\n",counter);
printf("扇区数据写速度约为%dKBps\r\n",5120/counter);

printf("开始计时....\r\n");
  counter=0;
TIM_Cmd(TIM3, ENABLE);
for(i=0;i<10000;i++)
{
SD2_Read_Sector(1000+i,pbuf);
}
TIM_Cmd(TIM3, DISABLE);
printf("停止计时....\r\n");
printf("SD卡2读扇区完成,共花费%d秒\r\n",counter);
printf("扇区数据读速度约为%dKBps\r\n",5120/counter);

while(1);            
}  
实验结果如下图所示:
图中左边是IO模拟SPI方式,右边是硬件SPI方式,显然右边比左边速率要高得多。
IO模拟SPI方式,最大的好处就是简单通用,只要有IO操作就可以实现SD卡驱动。而且可以灵活控制SPI的速度。硬件SPI虽然速度较快,但它也有它的麻烦之处。硬件SPI的时钟是由芯片时钟经过硬件分频得到的,它最大的问题在于不能无限降低时钟速率,比如最大设置为128分频或256分频。SD卡在初始化的时候对SPI的速率是比较敏感的,如果SPI过快,则可能导致初始化失败,一般来说要低于400KHz,甚至更低。如果硬件SPI的速率即使设置到最低,仍然不能满足SD卡初始化对SPI的速率要求,那么就会使得SD卡初始化操作无法成功完成。在此实验中,STM32 M3芯片的实际工作频率为72MHz,硬件SPI的时钟为工作频率的1/2,预分频最低可设置256分频,即SPI最低速度可以达到72000/(2*256)=141KHz。所以SD卡初始化可以顺利进行(其实再低一些,初始化会更稳定,但是它已经无法再低了)。成功初始化之后,SPI时钟将被重新设置为最高,即2分频,约为18MHz,用以提高数据读写速率。
源代码下载:



相关帖子

沙发
lkl0305| | 2015-1-10 13:43 | 只看该作者
学习下,正需要

使用特权

评论回复
板凳
yinhaix| | 2015-6-2 16:55 | 只看该作者

使用特权

评论回复
地板
technicxie888| | 2016-3-10 21:49 | 只看该作者
垃圾!

使用特权

评论回复
5
ACM| | 2016-4-6 17:12 | 只看该作者
请问楼主解压密码是多少?

使用特权

评论回复
6
ACM| | 2016-4-6 17:13 | 只看该作者
请问楼主解压密码是多少?

使用特权

评论回复
7
Ketose| | 2016-4-6 21:28 | 只看该作者
请问楼主解压密码是多少?

使用特权

评论回复
8
znmcu|  楼主 | 2016-4-7 11:44 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
9
znmcu|  楼主 | 2016-4-7 11:44 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
10
znmcu|  楼主 | 2016-4-7 11:44 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
11
znmcu|  楼主 | 2016-4-7 11:44 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
12
znmcu|  楼主 | 2016-4-7 11:44 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
13
znmcu|  楼主 | 2016-4-7 11:44 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
14
znmcu|  楼主 | 2016-4-7 11:45 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
15
znmcu|  楼主 | 2016-4-7 11:45 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
16
ccmj4708| | 2021-4-19 22:22 | 只看该作者
进群 群号码:198521880

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:振南的znFAT -- 单片机上上的FAT32文件系统 www.znmcu.cn

4474

主题

5195

帖子

33

粉丝