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

stm32f769 寄存器配置SD卡--SD卡写与读

[复制链接]
stary666 发布时间:2018-3-9 16:42
前面发了3个帖子实现了SD卡的初始化,获取SD卡容量,及读取,本帖实现SD的写功能,( L7 z8 c6 X% l; N
实现写,就要先实现写的函数,依然是拷贝f767的写代码
  F8 O; l# [. E5 k6 [u8 SD_WriteDisk(u8*buf,u32 sector,u32 cnt)
- w- W8 j; v3 Z{
* J. y- L+ P5 }5 Z. _9 T7 J1 K        u8 sta=SD_OK;' V# M! {7 d2 k- u* u
        u32 n;# ^+ ~" p- q( {! b/ ~+ t# W+ n0 L
        long long lsector=sector;1 Y- w0 f2 f9 l/ i- o' G% \& t  k
        if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;2 W$ c9 c' f) ~' |+ ^+ C6 g
        if((u32)buf%4!=0). U6 I# }1 n  o
        {" _8 a5 a% V( @" t0 L; Q$ X6 e0 j
                for(n=0;n<cnt;n++)2 [) O$ V8 s% Z& X
                {
4 `# M! @) W0 T& B4 d% C$ n( i) R. s                        memcpy(SDMMC_DATA_BUFFER,buf,512);
% j0 y6 T4 w4 X                        sta=SD_WriteBlocks(SDMMC_DATA_BUFFER,lsector+512*n,512,1);//单个sector的写操作3 O6 R, ]( K0 z; j
                        buf+=512;
0 x+ F* a! j8 e5 o& @4 B2 M% N                }
/ o* O- ]1 T+ v! o        }else sta=SD_WriteBlocks(buf,lsector,512,cnt);        //单个/多个sector   4 X/ `0 s; k: X9 \4 C
        return sta;4 q! c' i1 U# `1 q( G1 w0 }
}
) i7 Q$ x: b7 ~0 x1 N! S( H2 O1 b" k然后写个test_write函数4 [; q4 B$ ]. |' [7 P% ^
void sd_test_write(u32 secaddr,u32 seccnt)
" a  N. `3 |" n5 u, a{
5 v3 t# O1 Y2 I3 Z1 P        u32 i;
, D7 \5 v9 [3 P0 i. b        u8 *buf;
" m$ ~0 Z6 F& z# F* Q. s        u8 sta=0;; f1 W+ q( A: ]2 Y
        buf=(u8 *)malloc(512*sizeof(u8));        //从SDRAM申请内存
( n! I; P; k2 ^5 S1 K- d/ u: ~8 l        for(i=0;i<seccnt*512;i++)                         //初始化写入的数据,是3的倍数.5 b& V2 V1 l2 V* r3 r+ l+ U) v
        {6 `0 O" j& C0 t# g2 P& o/ c6 Y. ~
                buf=0xff;3 d; I0 H% U# e" m& a$ Z' j2 C
        }
8 _. D, v$ `; k- l        sta=SD_WriteDisk(buf,secaddr,seccnt);//从secaddr扇区开始写入seccnt个扇区内容
" ]5 M/ Y' V& y: {' b        if(sta==0)                                                        / x# [2 y' w) X8 e: l
        {        
* ]. z* _! v# ^5 E6 y                printf("Write over!\r\n");
! J$ h. W% h6 A! R        }else printf("err:%d\r\n",sta);2 X0 b# Y7 k3 L7 I* P
        free(buf);                                        //释放内存           
  W( X  K# g7 b& g* Y}) J0 C6 t7 }. V( W! h; e
本函数也是在f767的代码基础上更改实现的
# b" [  G0 @) e/ d: \, o在while(1)中添加如下代码
4 s3 p! g0 V# g; X/ P6 G  zsd_test_write(0,1);
3 Z- B1 U. q% i: c8 h. L3 Q        delay_ms(1000);
% `" r  y! g9 ?  {        sd_test_read(0,2);
. U. |/ p2 w; G. D: {, w) bdelay_ms(1000);
5 o) a4 W/ J. ]打印到串口助手内容见图. z% A: @% W* G: C3 l/ R7 S
; }/ _( Q, h9 u. p) |
果然都实现了,今天收获颇丰啊,下周开始移植fatfs文件系统9 J$ S1 Z$ H' Z/ g' o
+ Q/ L" E% F( f" S7 H" O* Y: d
1 I% b1 r( J8 o4 ~6 u  Z% A" b
                                                             发帖与2018年3月9日
8 K- o( C3 H& \* N4 C2 _/ U# Q
收藏 评论2 发布时间:2018-3-9 16:42

举报

2个回答
琦子 回答时间:2018-3-9 16:46:47
支持 沙发
stary666 回答时间:2018-3-9 17:13:15
谢谢支持啊

所属标签

相似分享

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