原创 FreeRTOS读取SD卡 (原创)

2008-9-2 22:10 7765 10 12 分类: MCU/ 嵌入式

经过一段时间的努力,目前已可用我的MLC3890读取SD卡了,


采用的文件系统是uC/FS, 由于是之前公司购买的,也不算是盗版,呵呵.


目前只是移植了SD卡的读写,可以通过ARM7读写SD卡,但由于拿到的文件系统仍不支持长名文件名,还得花点心思去看看,看年能不能搞定长文件名支持.


移植SD卡到uC/FS主要需要提供的函数为:


const FS_DEVICE_TYPE FS__mmcdevice_driver =


{
  "mmc",
  FS_MMC_MAXUNIT,
  _FS_MMC_GetStatus,
  FS__MMC_ReadSector,  //扇区读
  FS__MMC_WriteSector,// 扇区写
  _FS_MMC_IoCtl,
#if 0 /* not yet released FS_MMC_SUPPORT_BURST */
  _FS_MMC_ReadBurst,
  _FS_MMC_WriteBurst,
#else
  NULL,
  NULL,
#endif
  _MMC_InitDevice,     /* _MMC_InitDevice */
  _FS_MMC_InitMedium
};

其实可以直接写一个SD卡的读写驱动往上移,呵呵,毕竟SD卡的读写命令也是蛮多的.


static void _FS_MMC_InitMedium(FS_U8 Unit){
  int    i;


  i = SD_Initialize(); // 激活SD卡,
  if (i != 0) { /* init failed, no valid card in slot */
    FS_DEBUG_WARN("MMC: Init failure, no valid card found");
  }
}


static int _MMC_InitDevice(FS_U8 Unit)
{
    SD_HardWareInit(); // add by walter 20080902   IO口初始化,SPI初始化.
    return 0;
}
static int _FS_MMC_GetStatus(FS_U8 Unit) {
  return SD_ChkCard(); //通过检测电子信号,确认卡在不在卡槽
}
static int _FS_MMC_IoCtl(FS_U8 Unit, FS_I32 Cmd, FS_I32 Aux, void *pBuffer)
{
  FS_DEV_INFO *      pDevInfo;
  FS_USE_PARA(Aux);
  switch (Cmd) {
  case FS_CMD_CHK_DSKCHANGE: /* check for disk change */
    return _DiskHasChanged(Unit);
  case FS_CMD_GET_DEVINFO: /* Get general device information */
    if(!SD_GetCardInfo())
    {   // 主要是为了得到卡的容量等相关信息,供uc/fs调用.
        pDevInfo = (FS_DEV_INFO *)pBuffer;
        pDevInfo->BytesPerSector = sds.block_len;
        pDevInfo->NumSectors     = sds.block_num;
    }    
    break;
  default:
    break;
  }
  return 0;
}
int FS__MMC_WriteSector(FS_U8 DevIndex, FS_U32 Sector, void* pBuffer)
{
    if(SD_WriteBlock(Sector,pBuffer))
        return -1;
    return 0;
}
static int FS__MMC_ReadSector(FS_U8 DevIndex, FS_U32 Sector, void *pBuffer)
{
    if(SD_ReadBlock(Sector,pBuffer))
        return -1;
    return 0;   
}


 

文章评论2条评论)

登录后参与讨论

walnutcy_696810119 2008-9-4 14:54

昨天把目录改了下,博客精华的标识没了,呵呵. 另说一下,EDN的博客分类管理做不得不好,想更改分类,必须重编辑,

用户461316 2008-9-4 08:32

顶起楼主的原创作品!!!
相关推荐阅读
walnutcy_696810119 2012-11-21 08:37
Linux下使用smartCOM调试串口
在Windows下的串口调试一直使用sscom,在Linux下只找到一个cutecom,用了几次,很不喜欢,就着手开发了一款自己的串口调试工具,smartCOM。 smartCOM介绍:http...
walnutcy_696810119 2012-03-29 18:12
【博客大赛】原创--测量基础:什么是测量
写在正文之前: 适逢EDNChina搞活动,而我本人也算在测量业工作,就一起作下笔记吧。若有错误,请大家一起斧正。笔者写本文一方面是梳理知识,另一方面也希望与大家探讨有关测量的知识、应用等,希...
walnutcy_696810119 2011-12-20 18:29
GLONASS 15年来,首次实现24颗星在轨可用
  EDN的博客改版后,不太好用,在SINA重开一个,不过重点改为关注GNSS行业新闻 http://blog.sina.com.cn/s/blog_7420cd1701012en9....
walnutcy_696810119 2011-12-20 17:49
逆向工程第一步:通信协议分析
工程中常有这样的事,想分析下其他知名公司产品中的通信协议,以便生产设计兼容产品。 1) 逆向工程,首先要了解产品,知己知彼,百战不怠;     去年受命想仿一款GARMIN的导航盒,但无法...
walnutcy_696810119 2011-11-14 11:30
通用代码调试方法 (Keil, VCC)
调试代码一般需要定位问题,这里给出一个解决方案, 一般的编译器均支持这些宏指令。   #define DEBUG_WALT_1113     1 extern void log_t...
我要评论
2
10
关闭 站长推荐上一条 /2 下一条