1576|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

基于MSP430学习开发系统的SD卡FAT16读写程序 [复制链接]

基于MSP430学习开发系统的SD卡FAT16读写程序这个工程

介绍了SD卡的基本结构和技术特征,详细说明了使用MSP430单片机和SD卡设计的FAT16文件系统,给出了接口电路和相应的软件系统设计。

该系统适用于大容量的现场数据采集、存储,并在动态心电图记录系统中得到了应用。

此工程有SCH,程序等。。。。。

########################################################################

以下是SCH图:

 

###########################################################################

以下是代码,对于MSP430开发主要是多做项目,希望这个项目对大家有用。。。。。

 

主函数如下:

 

void main(void)

    hwInterface sdNow;  

uint8 ok,i;

uint8 Name[12]="SD_FAT16TXT";

uint8 buffer[54]=

"If you look this content,the file was created success!";    

    uint8 rBuf[128];

    

    initMcu(); 

    

    UCTL1 |= SWRST;                       // Initialize USART state machine

    UCTL1 |= CHAR + SYNC + MM;            // 8-bit SPI Master **SWRST**

    UTCTL1 = CKPH + SSEL1 + SSEL0 + STC;  // SMCLK, 3-pin mode

    UBR01 = 0x04;                         // UCLK/4

    UBR11 = 0x00;                         // 0

    UMCTL1 = 0x00;                        // no modulation

  

    ME2 |= USPIE1;                        // Enable USART1 SPI mode

    UCTL1 &= ~SWRST;                      // Initialize USART state machine   

  

    P5DIR |= SDCS;                        //SD cs pin as output 

    P5SEL |= 0x0E;                        // P5.1-3 SPI option select      

    

    sdNow.sectorCount = 1;

    sd_Init(&sdNow);

    

    InitFat16();

    

//    memset(rBuf,0,128);

//    sd_readSector(&sdNow,0,rBuf,128);

//    rBuf[1] = 0;

 

ok=CreateFile(Name,(uint32)54); //建立长度为54的空文件

if(ok!=SD_FAIL)  //文件已存在,退出

    {

WriteFile(Name,(uint32)0,(uint32)54,buffer); //将buffer写入文件

    };

    

/*

for(i=0;i<54;i++)buffer[i]=0;

ReadFile(Name,(uint32)0,(uint32)54,buffer); //将文件读入buffer

 

EreaseFile(Name); //删除文件

*/

    while(1);

}

SD卡读程序如下 :

 

int8 sd_readSector(hwInterface *iface,uint32 address, uint8* buf, uint16 len)

{

uint8 cardresp;

uint8 firstblock;

uint8 c;

uint16 fb_timeout=0xffff;

uint32 i;

uint32 place;

 

/*DBG((TXT("sd_readSector::Trying to read sector %u and store it at %p.\n"),address,&buf[0]));*/

place=512*address;

sd_Command(iface,CMDREAD, (uint16) (place >> 16), (uint16) place);

cardresp=sd_Resp8b(iface); /* Card response */ 

 

/* Wait for startblock */

do

firstblock=sd_Resp8b(iface); 

while(firstblock==0xff && fb_timeout--);

 

if(cardresp!=0x00 || firstblock!=0xfe){

sd_Resp8bError(iface,firstblock);

return(-1);

}

for(i=0;i<512;i++){

c = if_spiSend(iface,0xff);

if(i<len)

buf[i] = c;

}

 

/* Checksum (2 byte) - ignore for now */

if_spiSend(iface,0xff);

if_spiSend(iface,0xff);

 

return(0);

}

 

SD写程序如下:

int8 sd_writeSector(hwInterface *iface,uint32 address, uint8* buf)

{

uint32 place;

uint16 i;

uint16 t=0;

/*DBG((TXT("Trying to write %u to sector %u.\n"),(void *)&buf,address));*/

place=512*address;

sd_Command(iface,CMDWRITE, (uint16) (place >> 16), (uint16) place);

 

sd_Resp8b(iface); /* Card response */

 

if_spiSend(iface,0xfe); /* Start block */

for(i=0;i<512;i++) 

if_spiSend(iface,buf[i]); /* Send data */

if_spiSend(iface,0xff); /* Checksum part 1 */

if_spiSend(iface,0xff); /* Checksum part 2 */

 

if_spiSend(iface,0xff);

 

while(if_spiSend(iface,0xff)!=0xff){

t++;

/* Removed NOP */

}

/*DBG((TXT("Nopp'ed %u times.\n"),t));*/

 

return(0);

}

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表