之前发了2个帖子,实现了SD卡的初始化和获取sd卡是容量及类型,下面开始读取SD卡的内容: g. O( K; i( `; ] 首先要实现SD卡的read函数5 ?' z2 A. I8 p1 w 研究了一下f767的例程,完全可以使用,复制过来- _7 H5 v. a8 `* X5 x u8 SD_ReadDisk(u8*buf,u32 sector,u32 cnt) {2 s$ D" X! g: M9 l) V' O& i @ u8 sta=SD_OK;* c8 M4 V: C* G' F long long lsector=sector; u32 n;7 z1 e* { |$ Y8 \! K3 r8 I7 C8 A' r if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9; if((u32)buf%4!=0) { for(n=0;n<cnt;n++)4 q, Y* I& R/ R {2 {# ~# p) I' _( S# m+ Z; v9 Y sta=SD_ReadBlocks(SDMMC_DATA_BUFFER,lsector+512*n,512,1);//单个sector的读操作 memcpy(buf,SDMMC_DATA_BUFFER,512); buf+=512;) i4 p+ R$ `; Y% y } % ]+ g. x2 j7 J; D! z }else sta=SD_ReadBlocks(buf,lsector,512,cnt); //单个/多个sector return sta;/ @2 V& t9 S& B/ R/ P+ J6 h! i } 然后在写一个test_read函数,实现读取,串口发送 依然是把f767的代码复制过来更改一下即可5 Z- s3 b: c* J void sd_test_read(u32 secaddr,u32 seccnt)6 N' H6 t, Q3 v9 N' |9 h" I/ Q { u32 i; u8 *buf; u8 sta=0; buf=(u8 *)malloc(512*sizeof(u8)); //申请内存,从SDRAM申请内存4 p% B- r j8 y sta=SD_ReadDisk(buf,secaddr,seccnt);//读取secaddr扇区开始的内容 if(sta==0) , u" [3 m4 ]; W) p% j, E$ A1 j { printf("SECTOR %d DATA:\r\n",secaddr); for(i=0;i<seccnt*512;i++)printf("%x ",buf);//打印secaddr开始的扇区数据 printf("\r\nDATA ENDED\r\n"); }else printf("err:%d\r\n",sta); free(buf); //释放内存 } 这是我更改之后的函数5 E) \7 k ~: I4 d 在while(1)里面加上此函数的调用即可- H* r. H0 V) c sd_test_read(0,1); 输出见下图# e8 k, m8 \" }1 ]3 k 1 C5 x) q D& w, u" s8 V# m 有输出,虽然不知道什么意思,但是又输出,说明读取SD卡实现了。 1 s, n, N0 g, E; B* S 发稿与2018年3月9日- t1 F! i1 m& J" v* n- n- p |
我也来支持下~ |
谢谢楼主的强大资源 |
谢谢支持的啊 |