6019|18

290

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

F28027用SPI操作SD卡 [复制链接]

大家好,最近在做一个比赛,需要使用SD卡来记录工作状态下的数据。但是对于文件系统和怎样对于SD卡进行操作不是很了解,所以和大家商讨一下。我先把我的两个函数放上来,大家帮我看看。
了、我没有使用FIFO功能,因为我觉得对于SD卡返回的信息的读取必须是实时的,且设定传输协议的长度为8位,为了与SD通信比较简单。
void SPI_init()  //SPI的初始化函数
{
   EALLOW;
   SpiaRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI
   SpiaRegs.SPICCR.all=0x0017;       //8-bit character, Loopback mode
   SpiaRegs.SPICTL.all=0x0006;       //Interrupt disabled, Master
   SpiaRegs.SPISTS.all=0x0000;
   SpiaRegs.SPIBRR=0x0063;           // Baud rate初始化在一个低速的状态下
   SpiaRegs.SPIPRI.all=0x0010;
   SpiaRegs.SPICCR.bit.SPISWRESET=1;  // Enable SPI
   EDIS;
}
void SPI_write(unsigned char data)   //根据状态位进行判断
{
   data=data<<8;   //采用的是左对齐的工作方式
    while(SpiaRegs.SPISTS.bit.BUFFULL_FLAG){}       //上一字节完全移除时该位置为0
    SpiaRegs.SPITXBUF=data;
}

unsigned char  SPI_read()      //状态位需要手动的清除,write 1
{
        unsigned char data;
    while(!SpiaRegs.SPISTS.bit.OVERRUN_FLAG){}          //初始为1,即没有收到数据,则死循环中,为1时,则跳出
    data=SpiaRegs.SPIRXBUF;
        return data;
}

我刚才仿真过, SpiaRegs.SPITXDAT的值在变化,发送应该没问题。

unsigned char  SD_Send_Cmd(unsigned char  cmd, unsigned long arg)    //SD卡发送命令的函数
{
        unsigned char r1;
        unsigned char  retry=0;
        SPI_write(0xff);
        SD_Sel();   //片选
        SPI_write(cmd | 0x40);          //分别写入命令
        SPI_write((unsigned char)(arg>>24));     //与SPI_write配合则是可以实现功能的
        SPI_write((unsigned char)(arg>>16));
        SPI_write((unsigned char)(arg>>8));
        SPI_write((unsigned char)(arg));
        SPI_write(0x95);     //前七位为CRC的校验码,最后一位固定为1

    SPI_write(0xff);
    r1 =SPI_read();

        while(r1== 0xff) //等待响应,
        {
            SPI_write(0xff);
            r1 =SPI_read();
                if(++retry > 100) break;                //超时退出
        }

        SD_deSel();

        return r1;                                //返回状态值
}


大家帮我看看,关键在于读取函数与写命令是unsigned char(16bit)的转换。

完成之后我会把所有的代码奉献出来。

最新回复

可以的,锂电池供电,加个LDO变三点三伏,  详情 回复 发表于 2013-5-25 16:29
 
点赞 关注

回复
举报

290

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
刚查了一下手册,似乎有点问题,TXSSBUF是只读的。有点纠结了。
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

手册截图

这是一个截图,大家帮我看看吧。

截图00.png (82.21 KB, 下载次数: 0)

截图00.png
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

4
 

写SPIDAT

Data written to SPIDAT or SPITXBUF initiates data transmission on the SPISIMO pin, MSB (most
significant bit) first. Simultaneously, received data is shifted through the SPISOMI pin into the LSB (least
significant bit) of SPIDAT. When the selected number of bits has been transmitted, the received data is
transferred to the SPIRXBUF (buffered receiver) for the CPU to read. Data is stored right-justified in
SPIRXBUF.

When the specified number of data bits has been shifted through SPIDAT, the following events occur:
• SPIDAT contents are transferred to SPIRXBUF.

点评

嗯,明白了一点,我尝试一下。之后再把代码贴出来。  详情 回复 发表于 2013-5-15 13:24
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

5
 

回复 4楼 dontium 的帖子

嗯,明白了一点,我尝试一下。之后再把代码贴出来。
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

6
 
在对于SPI_read中我是用了SPIINTFLAG判断是否收到数据。
这是我的仿真结果。

截图00.png (19.44 KB, 下载次数: 0)

截图00.png
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

7
 
这两天没怎么做,但在无意中发现了一个软件中的问题。很简单的一个低级错误,伤心死了。我先把SD卡的底层驱动程序发上来,大家指点一下,有什么不好的地方我再改一下。
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

8
 
我所有的代码都在一个C文件里面,大家可以参考一下。之后可能会深入到FAT32系统中,有兴趣的可以共同探讨一下。

SD卡操作.pdf

103.1 KB, 下载次数: 32

 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

9
 
搞SD卡,要根据SD协议做的,我原来写了一个,http://dontium.blog.163.com/blog/static/342952722009419114113217/
源代码也没有保存

点评

嗯,看了楼主的帖子了。我的SD卡的读写程序完成了,现在在嵌入FAT32文件系统。楼主以前做了一个自行车的导航的,我最近也在做GPS的导航,程序是快写完了,但是我想不到哟偶什么亮点可以体现出来。 我倒是想用根据G  详情 回复 发表于 2013-5-22 10:26
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

10
 

回复 9楼 dontium 的帖子

嗯,看了楼主的帖子了。我的SD卡的读写程序完成了,现在在嵌入FAT32文件系统。楼主以前做了一个自行车的导航的,我最近也在做GPS的导航,程序是快写完了,但是我想不到哟偶什么亮点可以体现出来。
我倒是想用根据GPS的值在TFT液晶上仿真出一个轨迹出来,并且添加地图进去。无奈的是感觉28027的FLASH有点小,不能存储大量的数据。

点评

28027作实时控制有它的优势,而外扩存储器恰是它的不足。如果作GPS导航,可以选择其它更廉价的CPU,  详情 回复 发表于 2013-5-22 11:21
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

11
 

回复 10楼 liuming759 的帖子

28027作实时控制有它的优势,而外扩存储器恰是它的不足。如果作GPS导航,可以选择其它更廉价的CPU,

点评

可惜的是我们比赛指定的开发板是C2000的launchpad。实在不行的话就用2812来做,但是不符合手持式的标准。  详情 回复 发表于 2013-5-22 12:09
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

12
 

回复 11楼 dontium 的帖子

可惜的是我们比赛指定的开发板是C2000的launchpad。实在不行的话就用2812来做,但是不符合手持式的标准。

点评

这样说的话,使用SD卡倒是个方法  详情 回复 发表于 2013-5-22 12:49
貌似2812的功耗和C2000的功耗都比较大啊,手持设备要选中低功耗的处理器哈!:)  详情 回复 发表于 2013-5-22 12:45
 
 
 

回复

1149

帖子

3

TA的资源

五彩晶圆(初级)

13
 

回复 12楼 liuming759 的帖子

貌似2812的功耗和C2000的功耗都比较大啊,手持设备要选中低功耗的处理器哈!

点评

现在还不知道F28027的功耗是多大,也不知道该用什么标准衡量。  详情 回复 发表于 2013-5-24 19:08
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

14
 

回复 12楼 liuming759 的帖子

这样说的话,使用SD卡倒是个方法

点评

楼主,你说的用SD卡是个办法是一个什么情况?有点不理解  详情 回复 发表于 2013-5-24 19:05
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

15
 

回复 14楼 dontium 的帖子

楼主,你说的用SD卡是个办法是一个什么情况?有点不理解

点评

可以使用芯片的SPI来读写SD卡存储数据,这样它的效率就高一些了。 F28027是用于实时控制的,在低功耗方面它没有优势。TI文档中的 Current Consumption有介绍。  详情 回复 发表于 2013-5-24 23:45
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

16
 

回复 13楼 zqjqq88 的帖子

现在还不知道F28027的功耗是多大,也不知道该用什么标准衡量。
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

17
 

回复 15楼 liuming759 的帖子

可以使用芯片的SPI来读写SD卡存储数据,这样它的效率就高一些了。

F28027是用于实时控制的,在低功耗方面它没有优势。TI文档中的 Current Consumption有介绍。

点评

收到。谢谢楼主。但是如果我使用手机的电池可以对F28027供电吗?  详情 回复 发表于 2013-5-25 09:20
 
 
 

回复

290

帖子

0

TA的资源

纯净的硅(初级)

18
 

回复 17楼 dontium 的帖子

收到。谢谢楼主。但是如果我使用手机的电池可以对F28027供电吗?

点评

可以的,锂电池供电,加个LDO变三点三伏,  详情 回复 发表于 2013-5-25 16:29
 
 
 

回复

1万

帖子

28

TA的资源

裸片初长成(高级)

19
 

回复 18楼 liuming759 的帖子

可以的,锂电池供电,加个LDO变三点三伏,
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表