OpenEdv-开源电子网

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

usb读卡器实验,如何快捷判断一个文件从电脑写入到sd卡写完了?

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-3-18
在线时间
2 小时
发表于 2012-3-30 18:13:19 | 显示全部楼层 |阅读模式
从电脑写入到sd卡时,写完了之后,电脑上能看出来,但是stm32如何知道写完了呢?

我的需求是写完之后stm32读这个文件做一些操作

本来是想通过Usb_Status_Reg有写状态变成没有写状态来判断,但是感觉繁琐且不靠谱,有没有从底层能快速判断文件写完了呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-30 18:16:28 | 显示全部楼层
回复【楼主位】zjr0411:
---------------------------------
如果USB在一定时间内没有执行写操作,那么就可以认为这个文件写完了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-3-18
在线时间
2 小时
 楼主| 发表于 2012-3-30 18:21:59 | 显示全部楼层
有没有标志位或者状态位来判断?

我看程序里面,特别是usb程序部分,很多的标志、状态的,都没有一个能指示这个写完的状态吗?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

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

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-3-18
在线时间
2 小时
 楼主| 发表于 2012-3-31 09:26:09 | 显示全部楼层
我就是看的你们的usb读卡器程序,就是想那么多标志,有没有哪个能快速判断文件写完了呢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-31 10:10:07 | 显示全部楼层
快速判断,这个我不知道多久才算是快速?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2012-3-18
在线时间
2 小时
 楼主| 发表于 2012-3-31 11:37:41 | 显示全部楼层
你这不是在钻牛角尖啊,我的需求是:用你的usb读卡器实验程序,从电脑写入到sd卡时,写完了之后,电脑上能看出来,但是stm32如何知道写完了呢?

我需要一个方便快捷的判断,你跟我扯多快算快,人为感觉不到什么延迟就行,5s之内都行,但是要稳定可靠,这个答案行了吧,哎

我只需要你告诉我,如果是你有这个需求,在你这个usb读卡器实验程序上如何操作。

在qq上也不回复,叫别人到论坛上总要能解决问题啊,一天就这两三个帖子,并且还没有进入实质问题,qq两三分钟的事,谁等得起啊,

你想让别人来论坛活跃气氛,但是问题解决不了谁来啊,除了下载你板子对应的资料来一下,还有啥必要来啊。




逻辑严密是好事,但是你这未免误入歧途了吧。

贴一个笑话,这逻辑确实严密,但是我觉得是个傻逼,因为这已经不符合正常的生活逻辑了。
笑话如下:

某日,老师在课堂上想考考学生们的智商,就问一个男孩:“树上有十只鸟,开枪打死一只,还剩几只?”

 男孩反问:”是无声手枪么?” 

“不是.” 

“枪声有多大?” 

“80~100分贝.” 

“那就是说会震的耳朵疼?” 

“是.” 

“在这个城市里打鸟犯不犯法?” 

‘不犯.” 

“您确定那只鸟真的被打死啦?” 

“确定.”老师已经不耐烦了,”拜托,你告诉我还剩几只就行了,OK?” 

“OK.鸟里有没有聋子?” 

 “没有.” 

“有没有关在笼子里的?” 

“没有.” 

  边上还有没有其他的树,树上还有没有其他鸟?” 

“没有.” 

“方圆十里呢?” 

“就这么一棵树!” 

“有没有残疾或饿的飞不动的鸟?” 

“没有,都身体倍棒.” 

“算不算怀孕肚子里的小鸟?” 

“都是公的.” 

“都不可能怀孕?” 

“………,决不可能.” 

“打鸟的人眼里有没有花?保证是十只?” 

“没有花,就十只.” 

  老师脑门上的汗已经流下来了,下课铃响起,但男孩仍继续问:”有没有傻的不怕死的?” 

“都怕死.” 

“有没有因为情侣被打中,自己留下来的?” 

“笨蛋,之前不是说都是公的嘛!” 

“同志可不可以啊!” 

“………….,性取向都很正常!” 

“会不会一枪打死两只?” 

“不会.” 

“一枪打死三只呢?” 

“不会.” 

“四只呢?” 

“更不会!” 

“五只呢?” 

“绝对不会!!!” 

“那六只总有可能吧?” 

“除非你***是猪生的才有可能!” 

“…好吧,那么所有的鸟都可以自由活动么?” 

“完全可以.” 

“它们受到惊吓起飞时会不会惊慌失措而互相撞上?” 

“不会,每只鸟都装有卫星导航系统,而且可以自动飞行.” 

“恩,如果您的回答没有骗人,”学生满怀信心的回答,”打死的鸟要是挂在树上没掉下来,那么就
 剩一只,如果掉下来,就一只不剩.” 

  老师当即晕倒!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-3-31 13:55:39 | 显示全部楼层
5s以内,你要是看了我们USB读卡器实验代码,然后也实际下载验证了,就应该知道解决办法了.
USB读卡器里面有一句:
if(USB_STATUS_REG&0x01)//正在写   
{
LCD_ShowString(60,150,"USB Writing...");//提示USB正在写入数据
USB_STATUS_REG&=0xFD;//清除读标记
}
    
正在写,只要稍动动脑子,就知道下面怎么判断有没有写完了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-8-21
在线时间
0 小时
发表于 2014-8-21 21:50:39 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
原子哥,我在你的(mini板)读卡器的代码做了如下修改:
1. 移植了战舰中的fat文件系统部分的代码
2. 对主函数文件test.c加了以下代码:
(检测usb是否拔出,如果拔出就去读取 从pc上写入sd卡的一个文件“SD.txt”)
                 在while(1)循环中添加:
if(Divece_STA == UNCONNECTED){
printf("\r\n***** 3. device state: %d *****", Divece_STA);
printf("***** usb has been pulled out ... *****\r\n");
delay_ms(100);
/*1. read files created by pc*/
printf("read file ... \r\n");

res_rd = f_open(&rdfile, "SD.txt", FA_OPEN_EXISTING | FA_READ);  //以读方式打开文件

if(!res_rd){
f_read(&rdfile, buf_rdfile, 5, &num_rd);  //从文件内读5字节赋给buf_rdfile数组
buf_rdfile[num_rd] = '\0';
printf("1.rd success: %s\r\n", buf_rdfile);
}else{
printf("1.rd failed! r = %d.\r\n", res_rd);
}
f_close(&rdfile); //关闭文件
                 }

我的问题是:
我在pc上写入文件SD.txt,然后将usb线拔出,stm32检测到了usb已经拔出,但是读文件错误(返回值res_rd =  FR_NO_FILE) 
(注:FR_NO_FILE  /*(4) Could not find the file */)
就是说,stm32上没有发现pc上已经写入了文件?
我之后断电重启,发现没有上述问题了,能够读文件了。。。

这是怎么回事,捣鼓了很长时间,解决不了,还请原子哥解答一下。。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-21 23:31:36 | 显示全部楼层
回复【9楼】stormpetrel:
---------------------------------
你读取的是刚刚电脑写入的文件么?
还是sd卡本来就有的文件?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-8-27
在线时间
2 小时
发表于 2014-8-22 10:58:03 | 显示全部楼层
回复【9楼】stormpetrel:
---------------------------------
延时再度也不行吗?
回复 支持 反对

使用道具 举报

6

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
92
金钱
92
注册时间
2013-8-27
在线时间
2 小时
发表于 2014-8-22 10:58:46 | 显示全部楼层
回复【11楼】qqcaiyin:
---------------------------------
可不可以拔掉后让SD复位下
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-8-21
在线时间
0 小时
发表于 2014-8-22 11:07:27 | 显示全部楼层
回复【10楼】正点原子:
---------------------------------
是刚刚写入的文件,我解决了,usb插入后stm32上的文件系统要先卸载(f_mount),usb拔出后再重新挂载,保证二者数据同步
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2014-8-21
在线时间
0 小时
发表于 2014-8-22 11:08:02 | 显示全部楼层
回复【12楼】qqcaiyin:
---------------------------------
不是延时的问题,我试过
我解决了,usb插入后stm32上的文件系统要先卸载(f_mount),usb拔出后再重新挂载,保证二者数据同步
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 13:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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