whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1221回复:6

难!U盘格式化时的问题!

楼主#
更多 发布于:2004-07-29 09:09
小弟现在在做u盘,现在到了对write10命令的响应这一步了,但是在格式化时遇到了一个问题,请各位大哥帮忙解决一下,给小弟提个方向。
我的电路是51+d12+flash,因为51的单片机只有有限的内存空间,我现在用了512字节作为接收数据的缓冲区,因为D12的
bulk-endpoint只有64字节的双缓冲区,而且flash只能一页(512)一页的写入,所以我程序里就这样处理:当收到了write10命令时就准备接收数据,在接收数据时就计数,当接到512字节时,进行flash的写入操作,这个时候要花些时间,可是当写入的数据不止512字节时,主机还会继续送数据,为了不破坏正在写入的数据,我在这个时候就会关掉所有的中断,这个时候问题出现了,写完了512字节后,打开中断,主机不送数据了,bus hound上出现没反映,还出现了发送reset包。
请问大侠们,在这种情况下,你们应该怎么做?
还有,因为在write10时占用了很多时间,结果在发送CSW时,主机就认为你没有响应了,应该怎么办??
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-07-29 10:04
小弟现在在做u盘,现在到了对write10命令的响应这一步了,但是在格式化时遇到了一个问题,请各位大哥帮忙解决一下,给小弟提个方向。
我的电路是51+d12+flash,因为51的单片机只有有限的内存空间,我现在用了512字节作为接收数据的缓冲区,因为D12的
bulk-endpoint只有64字节的双缓冲区,而且flash只能一页(512)一页的写入,所以我程序里就这样处理:当收到了write10命令时就准备接收数据,在接收数据时就计数,当接到512字节时,进行flash的写入操作,这个时候要花些时间,可是当写入的数据不止512字节时,主机还会继续送数据,为了不破坏正在写入的数据,我在这个时候就会关掉所有的中断,这个时候问题出现了,写完了512字节后,打开中断,主机不送数据了,bus hound上出现没反映,还出现了发送reset包。
请问大侠们,在这种情况下,你们应该怎么做?
还有,因为在write10时占用了很多时间,结果在发送CSW时,主机就认为你没有响应了,应该怎么办??

恩,不要关中断,只是不去处理d12的中断。这样的话不读数据、不清中断,主机应该不会再发数据过来。超时的时间限制挺长的,足够写512了。如果实在是超时了,主机会询问错误,报告becoming ready或者busy的话,应该会再发一次的。

[编辑 -  7/29/04 by  clementzhao]
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-07-29 13:40
不清d12的中断,请问怎么理解?如果不清中断,中断标志就一直为一,中断一直产生,那么程序就没有办法运行了呀!
whmjack
驱动小牛
驱动小牛
  • 注册日期2003-09-17
  • 最后登录2007-04-26
  • 粉丝0
  • 关注0
  • 积分290分
  • 威望29点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-07-30 08:53
大哥,跑到哪去了!!??
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-07-30 09:24
不清d12的中断,请问怎么理解?如果不清中断,中断标志就一直为一,中断一直产生,那么程序就没有办法运行了呀!

我用的是下降缘触发,不去读D12中断寄存器是不会恢复高电平的。你用的是电平触发吧,电平的不行,可能要用后面那种方法。
zhyf2008
驱动牛犊
驱动牛犊
  • 注册日期2003-11-07
  • 最后登录2008-05-01
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望5点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-07-30 15:51
你用的flash具体是什么?我用的是CF卡,你这样的问题我见过,现在解决了,你用的是C还是汇编语言?
jason_deng
驱动牛犊
驱动牛犊
  • 注册日期2004-03-31
  • 最后登录2005-06-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-06 13:30
我同意楼上说的,不要关中断,实际上USB传输中一般不会出现超时错的,他的延时时间很长,我在单步跟踪时都不会出问题的!但千万不要关中断!
Jason
游客

返回顶部