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

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

[复制链接]
stary666 发布时间:2018-3-9 15:53
之前发了2个帖子,实现了SD卡的初始化和获取sd卡是容量及类型,下面开始读取SD卡的内容
* n- l  j8 a' O( d9 A" a) Z首先要实现SD卡的read函数
0 p+ m/ y& s" |. R' r研究了一下f767的例程,完全可以使用,复制过来
8 |& |$ Y8 O7 ?+ G( y' W! P7 H6 Su8 SD_ReadDisk(u8*buf,u32 sector,u32 cnt)
$ A3 C3 N* x: ]' @8 h* d{
5 x8 ]9 ^. i" p2 w5 C! z        u8 sta=SD_OK;5 G/ T6 \" n# A. x4 s% E
        long long lsector=sector;
4 j0 ?/ R0 x* ]        u32 n;
4 c1 ]' S2 |" n        if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;3 Z9 y2 v( _* H: X' l3 b" ]9 {7 j
        if((u32)buf%4!=0)
, |1 O5 y. ]! u! L        {
; Q5 ]4 n! t& A, J9 |6 ]                for(n=0;n<cnt;n++)
) o4 C$ s3 _0 e, k* c                {
! J3 Q1 u% d/ V/ [' I2 O2 w6 [                        sta=SD_ReadBlocks(SDMMC_DATA_BUFFER,lsector+512*n,512,1);//单个sector的读操作
) ~# \, m2 L6 q3 @$ I                        memcpy(buf,SDMMC_DATA_BUFFER,512);# X6 [) z3 [) a0 u* F& W4 K& b) v
                        buf+=512;, P. z' v3 ]0 ^+ W9 J
                } & r8 O. B  r" w; ~3 u; R. K
        }else sta=SD_ReadBlocks(buf,lsector,512,cnt);        //单个/多个sector   ( D" [1 G8 y- E' X! y8 Y
        return sta;
  x$ r8 i8 k5 T2 e3 z; P( |}
* n+ ?7 m, w; L$ O% k. ]& `然后在写一个test_read函数,实现读取,串口发送
" a- a& L* o$ Z: `& D0 U, r( L依然是把f767的代码复制过来更改一下即可2 U  K) i  D) i7 @6 P! |. R
void sd_test_read(u32 secaddr,u32 seccnt)& ?( ~8 r$ }( H& @+ t) t
{+ q2 G; f3 s  R
        u32 i;
! J3 t/ t3 B  |" p- X4 d        u8 *buf;' o* T" _. ^) r2 l: d& c. y
        u8 sta=0;
: Y. `9 n( U# [& R        buf=(u8 *)malloc(512*sizeof(u8));        //申请内存,从SDRAM申请内存
% q" _: d* {, t        sta=SD_ReadDisk(buf,secaddr,seccnt);//读取secaddr扇区开始的内容
0 O/ _  s  B5 G  U% V        if(sta==0)                        
9 |7 e5 w* }6 `# w- ]        {        
3 f! G6 f+ A9 M, K) y- q: T/ K4 O                printf("SECTOR %d DATA:\r\n",secaddr);
9 a% n' C, T) y- ]9 T3 \# i: Y                for(i=0;i<seccnt*512;i++)printf("%x ",buf);//打印secaddr开始的扇区数据               
, z8 l% m; Y1 v; c# X                printf("\r\nDATA ENDED\r\n"); # R1 Z' q1 e1 H2 P
        }else printf("err:%d\r\n",sta);' {. N1 P/ C4 G1 H( Y3 ?9 {
        free(buf);        //释放内存           
$ ~+ O2 i- c& g" G/ |}
% ^8 ?9 Z; h7 [6 l, _+ ]" B: S这是我更改之后的函数
$ O3 y$ O8 D+ b: C) a9 G; F在while(1)里面加上此函数的调用即可4 y, p: Z; c9 o, {  S' h0 W
sd_test_read(0,1);
9 G! }. s" N' ~6 W9 I  T& \输出见下图8 Q" ]% j9 V0 ?
5 g; R+ K' d" m8 v& P- c

# b" P! W: B* p' a; b& T有输出,虽然不知道什么意思,但是又输出,说明读取SD卡实现了。$ f5 t5 S- R9 V  J$ h; K

4 k* p1 R$ o9 K# u# i) c* `" I" U* \( N; @
                                                                发稿与2018年3月9日
, }; f4 a3 ^& A- {
收藏 评论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 手机版