OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 11596|回复: 7

miniSTM32移植rtthread的文件系统遇到问题。。。

[复制链接]

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2012-11-20 23:40:16 | 显示全部楼层 |阅读模式

led的线程移植搞定了,但文件系统的移植遇到了麻烦。

sd操作已经选用spi而不是sdio模式,SD卡片选已经改成miniSTM32使用的PA3,但是用rtt自带的sd卡初始化程序就不成功,用alientek的就可以;用alientek的初始化程序,再用rtt自带的文件操作函数又失败……

请问有谁移植成功过的吗?有的话借俺参考参考……3q

业余程序玩家。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-21 00:00:58 | 显示全部楼层
这个没搞过.
SD卡你可以参考下战舰板的代码,或者最新的Mini板代码.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
 楼主| 发表于 2012-11-21 00:04:11 | 显示全部楼层
用原子提供的程序是可以读SD卡程序的,所以硬件是没问题的。
rtt的初始化程序失败是因为里面多了段程序,该程序段执行失败,不断循环:

#define MSD_CS_LOW()    GPIO_ResetBits(GPIOA, GPIO_Pin_3)
#define MSD_CS_HIGH()   GPIO_SetBits(GPIOA, GPIO_Pin_3)

u8 MSD_GetResponse(u8 Response)
{
  u32 Count = 0xFFF;

  /* Check if response is got or a timeout is happen */
  while ((MSD_ReadByte() != Response) && Count)
  {
    Count--;
  }

  if (Count == 0)
  {
    /* After time out */
    return MSD_RESPONSE_FAILURE;
  }
  else
  {
    /* Right response got */
    return MSD_RESPONSE_NO_ERROR;
  }
}
  do
  {
    /* MSD chip select high */
    MSD_CS_HIGH();
    /* Send Dummy byte 0xFF */
    MSD_WriteByte(DUMMY);

    /* MSD chip select low */
    MSD_CS_LOW();

    /* Send CMD1 (Activates the card process) until response equal to 0x0 */
    MSD_SendCmd(MSD_SEND_OP_COND, 0, 0xFF);
    /* Wait for no error Response (R1 Format) equal to 0x00 */
rt_kprintf("get_response\n");

  }
  while (MSD_GetResponse(MSD_RESPONSE_NO_ERROR));

唉,看来还得再慢慢分析。
业余程序玩家。
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
 楼主| 发表于 2012-11-21 11:28:17 | 显示全部楼层
搞了一晚上,发现rtt提供的spi驱动sd卡程序有很大问题,其只使用mmc卡的初始化命令对sd卡进行初始化,导致插入sd卡时程序卡死在那里。而且其程序也没有区分mmc,sd卡的版本,也没有区分地址单位是一个字节还是一个setcor。不知道sdio驱动里面是怎么处理的,得找时间研究研究。

现在使用ministm32的初始化程序,程序已经可以读取扇区数与容量大小了。但程序在使用fatfs驱动sd卡打开目录时依然报错。看来得再看看。
业余程序玩家。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-11-21 12:10:39 | 显示全部楼层
回复【4楼】ofourme:
---------------------------------
继续努力
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
 楼主| 发表于 2012-11-23 01:43:28 | 显示全部楼层
回复【5楼】正点原子:

回复【4楼】ofourme:
---------------------------------
继续努力

---------------------------------
原子哥,你的鼓励令我压力好大啊。为了这个问题花费了几天时间,把硬盘分区,fatfs,rtt的dfs都几乎了解重温了一遍……

言归正传,发现bsp包里的msd.c文件rt_msd_read()函数有错,该函数试图将扇区地址转化为字节地址(*512),然后用该地址调用msd卡的读扇区程序。问题是所插入的SD卡程序使用的也是扇区地址,所以就出错了。感觉msd.c文件原本是为mmc卡编写的,mmc卡可能使用的是字节地址,所以该程序未能适应SD卡的情况。

目前rtt移植已经能够mount SD卡了,用ls()也能够看到根目录的文件。但感觉还有很多bug,还得慢慢优化,还有长文件名,unicode转GBK等问题。。。
业余程序玩家。
回复 支持 反对

使用道具 举报

19

主题

248

帖子

2

精华

高级会员

Rank: 4

积分
842
金钱
842
注册时间
2012-2-8
在线时间
19 小时
发表于 2013-3-28 23:08:40 | 显示全部楼层
楼主能共享一下最基本的移植过程方法么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-28 23:19:22 | 显示全部楼层
回复【6楼】ofourme:
---------------------------------
呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 06:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表