OpenEdv-开源电子网

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

移植USB读卡器出现的问题

[复制链接]

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
发表于 2013-5-28 21:12:42 | 显示全部楼层 |阅读模式
对一个正确的例程进行了修改,移植
 修改了mass_mal.c下的所有接口函数,我只挂载一个SD卡,MAX-LUN也改为了0
系统运行后,初始化SD卡成功了。串口输出了SD卡容量信息。
但是没有U盘出现,过一会系统会弹出对话框


点击格式化磁盘



SD卡初始化读写是和原子哥的一样,也做过SD卡读写,FAT实验都OK,并且从SD卡更新过APP做IAP实验也成功的。在mass_mal底下的读写也加入了>>9.

有点想不出哪块出了问题。移植这个例程时候除了hardware config 与mass-mal之外,我们不需要再改动别的了吧。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2013-5-29 00:17:26 | 显示全部楼层
看你这个问题搞了N天了...
没这么难吧?
我明天帮你分分钟搞定.就在我们的USB读卡器实验上面修改,只留下SD卡.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2013-5-29 11:55:54 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
哈哈我是搞了N天,每次问题都挺久的,老被鄙视嘿嘿。
我白天上班,利用晚上时间自己学学,有点兴趣。
昨晚刚把HID搞出来。一个常数写错了也是折腾一周。
这个USB读卡器是不应该出错,原子哥移植时候例程里是不是也是就该mass里面的接口函数啊。
我是107,USB底层还有些不太一样。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2013-5-30 15:52:14 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
浏览了一下相关文件,USB底层读写函数不一样。其他都一样的。
改动地方应该只有mass_mal.c里的接口函数。

我实验了一下,一个成功的例子只改了mass_mal.c里的接口函数就出现了上面错误。其他都没动过。
uint16_t MAL_Init(uint8_t lun)
{
  uint16_t status = MAL_OK;

  switch (lun)
  {
    case 0:
//      Status = SD_Init();
//    Status =SD_Initialize();
  Status = SD_Initialize();
  printf("\r\n SD 容量 %dMB \n\r",SD_GetDeviceSize());
      break;
#ifdef USE_STM3210E_EVAL
    case 1:
      NAND_Init();
      break;
#endif
    default:
      return MAL_FAIL;
  }
  return status;
}

uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
{

  switch (lun)
  {
    case 0:
//      Status = SD_WriteBlock((uint8_t*)Writebuff, Memory_Offset, Transfer_Length);
         Status = SD_WriteDisk((uint8_t*)Writebuff, Memory_Offset>>9, Transfer_Length>>9);

#ifdef USE_STM3210E_EVAL
      if ( Status != SD_OK )
      {
        return MAL_FAIL;
      }      
#endif /* USE_STM3210E_EVAL */      
      break;
#ifdef USE_STM3210E_EVAL
    case 1:
      NAND_Write(Memory_Offset, Writebuff, Transfer_Length);
      break;
#endif /* USE_STM3210E_EVAL */  
    default:
      return MAL_FAIL;
  }
  return MAL_OK;
}

uint16_t MAL_Read(uint8_t lun, uint32_t Memory_Offset, uint32_t *Readbuff, uint16_t Transfer_Length)
{

  switch (lun)
  {
    case 0:
//      Status = SD_ReadBlock((uint8_t*)Readbuff, Memory_Offset, Transfer_Length);
         Status = SD_ReadDisk((uint8_t*)Readbuff, Memory_Offset>>9, Transfer_Length>>9);
#ifdef USE_STM3210E_EVAL      
      if ( Status != SD_OK )
      {
        return MAL_FAIL;
      }
#endif /* USE_STM3210E_EVAL */      
      break;
#ifdef USE_STM3210E_EVAL
    case 1:
      NAND_Read(Memory_Offset, Readbuff, Transfer_Length);
      ;
      break;
#endif
    default:
      return MAL_FAIL;
  }
  return MAL_OK;
}

uint16_t MAL_GetStatus (uint8_t lun)
{
    switch(lun)
    {
    case 0:
        return MAL_OK;
    case 1:
        return MAL_FAIL;
    case 2:
        return MAL_FAIL;
    default:
        return MAL_FAIL;
    }

  return MAL_FAIL;
}
回复 支持 反对

使用道具 举报

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1596
金钱
1596
注册时间
2012-12-30
在线时间
240 小时
发表于 2013-8-16 15:04:30 | 显示全部楼层
LZ解决了吗 我现在也遇到这个问题
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2013-8-17 17:05:26 | 显示全部楼层
回复【6楼】wgh1990:
---------------------------------
好像没解决,太久了记不清了
回复 支持 反对

使用道具 举报

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1596
金钱
1596
注册时间
2012-12-30
在线时间
240 小时
发表于 2013-8-17 17:20:08 | 显示全部楼层
回复【7楼】wwjdwy:
---------------------------------
好吧  我也是自己做的板 USB插口我是不在板子上的 用线连的 所以经常出那问题  改了排针插上感觉好多了  几次操作才会出现 虽然未解决  但是还是要努力
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2013-8-17 19:27:13 | 显示全部楼层
回复【8楼】wgh1990:
---------------------------------
好了说一声,我也吸取个经验
回复 支持 反对

使用道具 举报

20

主题

187

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
288
金钱
288
注册时间
2011-12-14
在线时间
0 小时
发表于 2013-12-26 21:24:17 | 显示全部楼层
回复【楼主位】wwjdwy:

对一个正确的例程进行了修改,移植
 修改了mass_mal.c下的所有接口函数,我只挂载一个SD卡,MAX-LUN也改为了0
系统运行后,初始化SD卡成功了。串口输出了SD卡容量信息。
但是没有U盘出现,过一会系统会弹出对话框
点击格式化磁盘
SD卡初始化读写是和原子哥的一样,也做过SD卡读写,FAT实验都OK,并且从SD卡更新过APP做IAP实验也成功的。在mass_mal底下的读写也加入了>>9.
有点想不出哪块出了问题。移植这个例程时候除了hardware config 与mass-mal之外,我们不需要再改动别的了吧。

=========================================================================

看来这小小的USB问题还真不少,并且问题发生的现象,几乎都是一样的,你最终是怎么解决的,能分享一下吗?
回复 支持 反对

使用道具 举报

54

主题

537

帖子

0

精华

高级会员

Rank: 4

积分
797
金钱
797
注册时间
2012-2-27
在线时间
7 小时
 楼主| 发表于 2013-12-26 21:45:25 | 显示全部楼层
回复【10楼】dong:
---------------------------------
好久了,我好像没搞定我记得。。。。。。
回复 支持 反对

使用道具 举报

4

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2015-4-9
在线时间
6 小时
发表于 2015-6-1 17:26:58 | 显示全部楼层
LZ当时问题解决了吗?我现在也遇到了相同的问题,搞了一周了,还没弄好,求前辈指点啊~~~
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-1-16
在线时间
0 小时
发表于 2015-6-10 09:54:52 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,请教个问题,USB读卡器复制,黏贴文件都正常,但是格式化的时候,提示无法格式化(请问格式化的这部分代码在哪),之后SD卡就报废了(必须用读卡器格式化之后才能使用)
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-6-11 00:57:30 | 显示全部楼层
回复【13楼】wuwovicky:
---------------------------------
USB读卡器功能的格式化,完全是由电脑通过USB控制的,单片机知识负责数据读写而已
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2015-1-16
在线时间
0 小时
发表于 2015-6-11 10:47:52 | 显示全部楼层
回复【14楼】正点原子:
---------------------------------
1、3ks,我昨天查出原因了,当我把512个数据写入sd卡采用DMA方式时,格式化老是失败,不过写数据却是正常,可能哪里还有BUG吧。

2、当采用for循环的方式写数据时,格式化一张8G的卡大概要1分多钟,您测试过,大概需要多长时间?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-6-11 22:13:08 | 显示全部楼层
回复【15楼】wuwovicky:
---------------------------------
1,建议用轮询方式试试。dma容易出问题。
2,这个没测试过哦
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

5

主题

133

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1775
金钱
1775
注册时间
2015-3-13
在线时间
270 小时
发表于 2022-12-12 16:15:52 | 显示全部楼层
楼主的问题解决了没? 我也是USB读卡器提示需要格式化
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 19:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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