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

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

[复制链接]
stary666 发布时间:2018-3-9 15:53
之前发了2个帖子,实现了SD卡的初始化和获取sd卡是容量及类型,下面开始读取SD卡的内容: a, C! A3 U! O0 j- \
首先要实现SD卡的read函数1 i! L9 E, D' x" p: Y
研究了一下f767的例程,完全可以使用,复制过来0 B" ?0 B. b" U$ ^2 v- {
u8 SD_ReadDisk(u8*buf,u32 sector,u32 cnt)
; X1 g) b+ S  V: |{7 q: ~7 {/ y: H6 f5 Q
        u8 sta=SD_OK;
- m9 \- U/ L6 l6 ]: t2 ^( j6 O( s        long long lsector=sector;" Y. \/ |# n( N8 v1 I% g
        u32 n;
  J7 p; j* Q2 S! E( B# Y        if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;6 n) \) b5 {& M. ~* h; C
        if((u32)buf%4!=0)
) L0 q5 f: C. t& x; }/ C. t        {
& p% O  U5 @( w+ Z+ [3 O                for(n=0;n<cnt;n++)9 D7 e, T: ~# ]9 C& C6 c
                {
) E2 i& j4 j  K                        sta=SD_ReadBlocks(SDMMC_DATA_BUFFER,lsector+512*n,512,1);//单个sector的读操作% T3 m# E5 g2 \, ~1 M7 G. s
                        memcpy(buf,SDMMC_DATA_BUFFER,512);
3 a, a! D1 S9 c% _/ k$ {" {                        buf+=512;
" [5 T' D6 f$ I! [# j                }
: g' g$ X& p( ?9 a        }else sta=SD_ReadBlocks(buf,lsector,512,cnt);        //单个/多个sector   * w7 E: s9 x" `- G" M
        return sta;& _$ F5 G+ J) P6 ^( W3 a
}' s# b* q' R0 N+ J! I( A* d
然后在写一个test_read函数,实现读取,串口发送. A) o$ D5 |. q+ h
依然是把f767的代码复制过来更改一下即可; f6 X/ B+ X4 t+ B  d3 X4 d
void sd_test_read(u32 secaddr,u32 seccnt)
, g# @4 W6 m; z% F{
" [0 A4 T7 [' f. ~+ e        u32 i;
( L* s/ A/ F" N( r. R! `        u8 *buf;
8 O9 S9 ?4 I6 l9 C" g        u8 sta=0;6 `- x- D& u) U- q
        buf=(u8 *)malloc(512*sizeof(u8));        //申请内存,从SDRAM申请内存1 N2 J7 C, N& @; l$ @
        sta=SD_ReadDisk(buf,secaddr,seccnt);//读取secaddr扇区开始的内容
  h: k+ C4 B; s, d" ~/ p        if(sta==0)                        
% R2 C. ~7 T8 J& S        {        
; J. @  v4 L+ a' B, `                printf("SECTOR %d DATA:\r\n",secaddr);
9 f, |. |! @" |2 n$ U$ K                for(i=0;i<seccnt*512;i++)printf("%x ",buf);//打印secaddr开始的扇区数据               
4 T1 J# O: m2 y- ~$ K                printf("\r\nDATA ENDED\r\n");
; a8 D- [( Q& i% k        }else printf("err:%d\r\n",sta);
: \& s( Y4 x; T* u* _" [        free(buf);        //释放内存           
4 A/ J. a8 _9 A9 k+ l, m% g}
' I! _& T; F- A$ V# n这是我更改之后的函数- ^$ O; H! ^5 r$ z6 C. I
在while(1)里面加上此函数的调用即可
9 |6 p. S7 L. t! h9 ]4 a) Csd_test_read(0,1);
: i% n+ v: i3 P7 i! K  k输出见下图, A  s1 L, Q# v' j4 o, C$ e8 z

) M9 V( x- |7 N6 i, H
! E0 u" @0 N4 Q. P2 z6 |' F有输出,虽然不知道什么意思,但是又输出,说明读取SD卡实现了。/ y0 K. n1 ~; F( [9 d* Z4 ?

8 ?- w. M1 W4 ^) q; Y# C, p  ~3 G" V' i
                                                                发稿与2018年3月9日

' J, `8 R" b; v4 e8 d
收藏 评论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 手机版