你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f769 寄存器配置SD卡--读取SD信息

[复制链接]
stary666 发布时间:2018-3-9 15:53
之前发了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)
  M' c; e- N! b' h{2 s$ D" X! g: M9 l) V' O& i  @
        u8 sta=SD_OK;* c8 M4 V: C* G' F
        long long lsector=sector;
! j5 R: e3 Y: f        u32 n;7 z1 e* {  |$ Y8 \! K3 r8 I7 C8 A' r
        if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;
  |. M, V! Q0 I& g& |; ~5 I$ A        if((u32)buf%4!=0)
6 f; N2 p  j' N% M        {
; e$ Z* k: r& k" J( H                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的读操作
8 q1 Y% ?5 s, x                        memcpy(buf,SDMMC_DATA_BUFFER,512);
2 F7 z$ R1 f- W4 P: i8 ?& ]* y                        buf+=512;) i4 p+ R$ `; Y% y
                } % ]+ g. x2 j7 J; D! z
        }else sta=SD_ReadBlocks(buf,lsector,512,cnt);        //单个/多个sector   
( \1 F; z0 `5 ]$ B2 q5 Y        return sta;/ @2 V& t9 S& B/ R/ P+ J6 h! i
}
/ l* u3 A( X4 x) {3 q6 v8 ?8 F然后在写一个test_read函数,实现读取,串口发送
$ j1 Z6 c, e+ S. }* |) U依然是把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
{
# P" g% N: s( d9 d& I        u32 i;
; @2 P, Z2 M( r3 F6 g$ X        u8 *buf;
7 C/ J4 U0 h7 }- t# t) W3 y# L        u8 sta=0;
! a6 G6 \1 ^3 k. c        buf=(u8 *)malloc(512*sizeof(u8));        //申请内存,从SDRAM申请内存4 p% B- r  j8 y
        sta=SD_ReadDisk(buf,secaddr,seccnt);//读取secaddr扇区开始的内容
9 _# E  w8 v( S. r; r# e, G( t' D        if(sta==0)                        , u" [3 m4 ]; W) p% j, E$ A1 j
        {        
* k; d! n. G6 ]8 N                printf("SECTOR %d DATA:\r\n",secaddr);
: t8 z# e" [5 a2 i                for(i=0;i<seccnt*512;i++)printf("%x ",buf);//打印secaddr开始的扇区数据               
. F8 U( Y  Q' H& x( @: a% K                printf("\r\nDATA ENDED\r\n");
7 h4 v: A+ O, y: N: B, H+ _7 H        }else printf("err:%d\r\n",sta);
6 p" c0 c% T( J7 b! O/ o        free(buf);        //释放内存           
& x; V# Z/ y: S( B' R/ r+ T: y}
% r% `5 ^& K+ b: q. \% o7 i; i这是我更改之后的函数5 E) \7 k  ~: I4 d
在while(1)里面加上此函数的调用即可- H* r. H0 V) c
sd_test_read(0,1);
8 e6 N* r, P' M, H3 I4 j. s3 c8 [# w输出见下图# e8 k, m8 \" }1 ]3 k

1 W$ Y4 L* }( h1 C5 x) q  D& w, u" s8 V# m
有输出,虽然不知道什么意思,但是又输出,说明读取SD卡实现了。
/ U# l9 O4 y3 o$ U1 s, n, N0 g, E; B* S

% D% |7 D4 ^- g& x                                                                发稿与2018年3月9日
- t1 F! i1 m& J" v* n- n- p
收藏 评论3 发布时间:2018-3-9 15:53

举报

3个回答
zero99 回答时间:2018-3-9 17:27:10
我也来支持下~
bigheadbaby 回答时间:2018-3-9 18:52:21
谢谢楼主的强大资源
stary666 回答时间:2018-3-10 11:23:52
谢谢支持的啊

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版