振南ZN-X开发板【STM32M3版】模块实验之 SD卡IO模拟/硬件SPI比速
本帖最后由 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-OB或JLINK仿真器(用于仿真与程序下载)USB转串口模块(用于串口通信与程序下载)SD卡读写模块与SD卡【注:此实验中使用的是SD卡2接口,SD卡1连接的STM32的IO,没有硬件SPI功能,因此SD卡1只能使用IO模拟SPI方式。】http://www.znmcu.cn/znx_m3_exp_sd_speed_test.files/znx_m3_exp_sd_speed_test-359.png 电路原理图及详解:同《SD卡物理扇区读写实验》。 实验方法与流程:主要代码如下:读写SD卡的连续10000个扇区,同时使用定时器记录所花费的时间,最终分别计算得到它们的数据读写速度。
unsigned char pbuf; //数据缓冲区extern unsigned int counter;
int main(void){ int i=0,res=0,cnt=0;u32 tt_sec=0;delay_init();uart_init(9600); //串口初始化为9600printf("串口设置完毕\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); }
实验结果如下图所示:http://www.znmcu.cn/znx_m3_exp_sd_speed_test.files/znx_m3_exp_sd_speed_test-1569.pnghttp://www.znmcu.cn/znx_m3_exp_sd_speed_test.files/znx_m3_exp_sd_speed_test-1570.png 图中左边是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,用以提高数据读写速率。 源代码下载:
振南ZN-X开发板SD卡IO模拟SPI实现方式数据读写速率测试
振南ZN-X开发板SD卡硬件SPI实现方式数据读写速率测试
学习下,正需要 垃圾! 请问楼主解压密码是多少? 请问楼主解压密码是多少? 请问楼主解压密码是多少? 进群 群号码:198521880 进群 群号码:198521880 进群 群号码:198521880 进群 群号码:198521880 进群 群号码:198521880 进群 群号码:198521880 进群 群号码:198521880 进群 群号码:198521880 进群 群号码:198521880
页:
[1]