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

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

[复制链接]
stary666 发布时间:2018-3-9 16:42
前面发了3个帖子实现了SD卡的初始化,获取SD卡容量,及读取,本帖实现SD的写功能,7 y1 U' E8 x6 z! ?
实现写,就要先实现写的函数,依然是拷贝f767的写代码, `5 A9 y4 n/ Y% O, y
u8 SD_WriteDisk(u8*buf,u32 sector,u32 cnt)
  `. H! P; h; Q$ i0 z{" p, \2 b' s  A" A
        u8 sta=SD_OK;
9 v) T- B0 N% B# f; N6 }3 I! M        u32 n;' x7 \4 U+ W. [
        long long lsector=sector;# \# \1 a. Z' d% I! b
        if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;/ M0 `  g1 k. n2 N+ s. g9 q5 J
        if((u32)buf%4!=0)
7 z( S- f$ E- {2 I4 E4 q7 h        {
" ~0 X+ }( I* D6 E( D0 j/ }                for(n=0;n<cnt;n++)
' x% h( @: y6 m                {  }3 P7 k1 B$ F9 D+ f
                        memcpy(SDMMC_DATA_BUFFER,buf,512);, X, p! ?: ]9 [
                        sta=SD_WriteBlocks(SDMMC_DATA_BUFFER,lsector+512*n,512,1);//单个sector的写操作9 ^7 r6 F; u) L
                        buf+=512;
0 J/ I: u; ~! j/ g& v3 ~                }
/ a- s; T% V2 V! f        }else sta=SD_WriteBlocks(buf,lsector,512,cnt);        //单个/多个sector   " Z# e4 C8 p5 z
        return sta;; [  ~# _5 O1 o4 e2 l- p( ]- k
}
9 F, W% L9 r1 P$ X+ P然后写个test_write函数
  ?0 p# m; [) g3 Q* ]$ `void sd_test_write(u32 secaddr,u32 seccnt)- y3 W8 h4 o- P. W
{
/ J0 c5 {4 b  ^1 z        u32 i;3 I* h: U" Z; t( q6 J
        u8 *buf;
# |! n0 u/ h' h- H8 [        u8 sta=0;  y/ l% S: }0 E: j
        buf=(u8 *)malloc(512*sizeof(u8));        //从SDRAM申请内存
; N. o6 D' b& ^6 z7 Q1 ^        for(i=0;i<seccnt*512;i++)                         //初始化写入的数据,是3的倍数.
) `7 V+ b; B! N9 `4 G% Y  h        {
/ I2 b& Q$ {% g5 A& R/ P  W2 H                buf=0xff;# A2 n5 n  J/ Y! H# E9 u9 D% ]
        }. \: D- V. N9 \! v; ?6 k
        sta=SD_WriteDisk(buf,secaddr,seccnt);//从secaddr扇区开始写入seccnt个扇区内容  q8 [" N; h. R" r+ M
        if(sta==0)                                                        ; I& p& _+ n" h' L& y0 Z
        {        
" z  W0 ]& f5 }) x, V& x                printf("Write over!\r\n");
* P  E* _+ {/ l( V1 o4 q        }else printf("err:%d\r\n",sta);
7 q, L' Y, ?/ G/ o1 H+ c        free(buf);                                        //释放内存           
5 g7 e* r, o* K3 n/ g}
9 N* Q2 Z7 e" K# e本函数也是在f767的代码基础上更改实现的
; E8 e$ O! j# j1 G在while(1)中添加如下代码3 j1 _& Y" l- p- t4 z
sd_test_write(0,1);
* R1 u" w5 U- w7 a- Q2 _) f        delay_ms(1000);
' o% E$ Y# @9 ^  J/ s        sd_test_read(0,2);5 F* R3 I/ ]9 @: R" a/ k7 t% Y
delay_ms(1000);0 g) m( s/ e6 D3 h/ I* X+ U
打印到串口助手内容见图
2 L7 q% n; W2 L- q% s0 Y% R' i
4 r! a% q( {4 y果然都实现了,今天收获颇丰啊,下周开始移植fatfs文件系统
' K- T; P6 v; a' N# U2 y- g5 a
8 ^4 Z% }& V+ U: k
2 e$ F# S& Y% A# m6 T" f                                                             发帖与2018年3月9日

4 L2 z" h% Q$ H' b
收藏 评论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 手机版