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

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

[复制链接]
stary666 发布时间:2018-3-9 16:42
前面发了3个帖子实现了SD卡的初始化,获取SD卡容量,及读取,本帖实现SD的写功能,
2 D1 Z7 L$ K- k: U实现写,就要先实现写的函数,依然是拷贝f767的写代码: O6 c( r/ q% I# p4 t
u8 SD_WriteDisk(u8*buf,u32 sector,u32 cnt)- a! Z$ d) J9 u- J( {
{9 a, t$ U) x" R" |4 U. g0 v0 y
        u8 sta=SD_OK;# b9 w/ Z( w4 z; }. Y2 S
        u32 n;
' h( |. a' T) a, v: i5 J        long long lsector=sector;9 G% o) G/ w8 @( b9 w
        if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;8 _) f0 O' p0 c. j9 S
        if((u32)buf%4!=0)
- H% D# n* N) N        {
& O9 ]. V, l& ]: k- E                for(n=0;n<cnt;n++)
# |! O4 U1 T8 Y9 {                {  e) L$ T/ i/ a" H
                        memcpy(SDMMC_DATA_BUFFER,buf,512);
# L6 ~* a6 U- o1 a9 o                        sta=SD_WriteBlocks(SDMMC_DATA_BUFFER,lsector+512*n,512,1);//单个sector的写操作+ g+ n: I9 |# C2 W: {, D; W
                        buf+=512;4 D% _% O6 D- p: o- J: g+ g
                } 1 m# ?) a% A4 T+ J9 S3 q3 G
        }else sta=SD_WriteBlocks(buf,lsector,512,cnt);        //单个/多个sector     {9 ?8 g0 C- S
        return sta;
7 b) F1 h7 z2 g1 `, H  h, _) m}* T1 q$ }* O3 `7 `& Y& u( s) |0 v
然后写个test_write函数/ S" |( c6 I) o9 ~
void sd_test_write(u32 secaddr,u32 seccnt)
% s1 s3 Y9 n, [6 ~! d' F{
& X6 v3 U8 U: \4 E5 a6 r+ S        u32 i;7 N3 ?% l: s6 K3 s! U" B6 C( \
        u8 *buf;
$ r8 U/ F7 N6 H3 L* P7 a9 n  b3 A        u8 sta=0;
  p2 m+ m: b( N- G# g9 x1 V        buf=(u8 *)malloc(512*sizeof(u8));        //从SDRAM申请内存7 n3 V) w$ j# V+ `0 b, F" l
        for(i=0;i<seccnt*512;i++)                         //初始化写入的数据,是3的倍数.
6 w* E& l, k# d! p        {
( S3 ^2 p! v  A3 s; Y8 Z; r  a                buf=0xff;. H5 e0 y1 M3 |
        }: n/ y- E' ?  g5 k
        sta=SD_WriteDisk(buf,secaddr,seccnt);//从secaddr扇区开始写入seccnt个扇区内容+ \/ C" U# o' z- n
        if(sta==0)                                                        * O# l/ F  g4 m; |6 _% [
        {        
0 _: s; t8 l6 w9 ]* m/ D4 m                printf("Write over!\r\n"); 0 `2 q0 T6 b8 N5 _7 [: x
        }else printf("err:%d\r\n",sta);
" Q% _; R9 m7 W4 p0 x& Z        free(buf);                                        //释放内存           
* a  B0 H+ ^8 L' @8 I6 K}0 [$ ]) x  M$ q* }0 d, B1 J: C
本函数也是在f767的代码基础上更改实现的
: X! U$ A. K% O: O4 l1 x3 S在while(1)中添加如下代码
4 u5 Q  H* A' T: Q; {sd_test_write(0,1);/ e1 i6 S0 H$ E: F
        delay_ms(1000);
+ B! n6 F$ v- J8 j8 N  w# b        sd_test_read(0,2);. D- ~4 D" i+ A5 R- s8 R
delay_ms(1000);
  O# u: l' L' J5 f0 Q: Y) |# A打印到串口助手内容见图  V( k4 ~) v/ `; v

$ j# v% ]- h4 f- S- p' p& \果然都实现了,今天收获颇丰啊,下周开始移植fatfs文件系统
/ Z" c' c; ~9 i! x/ o
5 C$ s  L1 |, z* y/ }. G
6 @" |  ~' V+ G. N- Z+ A                                                             发帖与2018年3月9日
: v: E* Y/ e  l: {$ X7 a
收藏 评论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 手机版