TA的每日心情 | 奋斗 2021-7-30 11:40 |
---|
签到天数: 1792 天 连续签到: 1 天 [LV.Master]伴坛终老
|
前面发了3个帖子实现了SD卡的初始化,获取SD卡容量,及读取,本帖实现SD的写功能,
实现写,就要先实现写的函数,依然是拷贝f767的写代码
u8 SD_WriteDisk(u8*buf,u32 sector,u32 cnt)
{
u8 sta=SD_OK;
u32 n;
long long lsector=sector;
if(CardType!=STD_CAPACITY_SD_CARD_V1_1)lsector<<=9;
if((u32)buf%4!=0)
{
for(n=0;n<cnt;n++)
{
memcpy(SDMMC_DATA_BUFFER,buf,512);
sta=SD_WriteBlocks(SDMMC_DATA_BUFFER,lsector+512*n,512,1);//单个sector的写操作
buf+=512;
}
}else sta=SD_WriteBlocks(buf,lsector,512,cnt); //单个/多个sector
return sta;
}
然后写个test_write函数
void sd_test_write(u32 secaddr,u32 seccnt)
{
u32 i;
u8 *buf;
u8 sta=0;
buf=(u8 *)malloc(512*sizeof(u8)); //从SDRAM申请内存
for(i=0;i<seccnt*512;i++) //初始化写入的数据,是3的倍数.
{
buf=0xff;
}
sta=SD_WriteDisk(buf,secaddr,seccnt);//从secaddr扇区开始写入seccnt个扇区内容
if(sta==0)
{
printf("Write over!\r\n");
}else printf("err:%d\r\n",sta);
free(buf); //释放内存
}
本函数也是在f767的代码基础上更改实现的
在while(1)中添加如下代码
sd_test_write(0,1);
delay_ms(1000);
sd_test_read(0,2);
delay_ms(1000);
打印到串口助手内容见图
果然都实现了,今天收获颇丰啊,下周开始移植fatfs文件系统
发帖与2018年3月9日
|
|