7945|10

67

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

USBhost收到NAK后该怎么做? [复制链接]

用107的片子做USB HOST,对U盘write_sector()有时候会得到NAK,但不知道host收到NAK后是继续等——兴许device一会儿就回ACK、还是重新write_sector()?

目前对write_sector()是分三步走: 发SCSI写命令、块传输、test unit ready,应该没问题。
此帖出自stm32/stm8论坛

最新回复

                                 “刚试了一下,收到NAK后就重发token->OUT, 但重发后device什么也不回,既没有ACK,也没有NAK,好像把发来的token和OUT包忽略了一样,然后3秒超时就到期了” --- 如果你重发,而得不到任何device的回应,那肯定是你重发的内容不对。 虽然我还没有做写U盘的程序,但是我觉得你对于device 的NAK,应该重发的是 : OUT + 64 byte (这64byte就是你被NAK的那1/8扇区)  详情 回复 发表于 2011-1-5 21:02
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 没超时就继续发TOKEN,超时就退出重新发命令。
此帖出自stm32/stm8论坛
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
可是写一个扇区是先发SCSI写命令(token->OUT->status),告知U盘要写一个扇区。然后发512字节的数据,如果一个包max size是64字节,则要发8次包,每次也是token->OUT->status, 往往是发完第一个包收到NAK,vigia的意思是收到就重发token, 而不发OUT数据包?
假如超时设为5ms, 则超时后再从SCSI写命令开始重来一次?
此帖出自stm32/stm8论坛
 
 

回复

76

帖子

0

TA的资源

一粒金砂(中级)

4
 
什么叫收到就重发token,而不发OUT数据包?

不带数据的OUT Token在USB协议中是没有意义的!
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 刚试了一下,收到NAK后就重发token->OUT, 但重发后device什么也不回,既没有ACK,也没有NAK,好像把发来的token和OUT包忽略了一样,然后3秒超时就到期了
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
不好意思,没讲清楚,我的意思是,发TOKEN,数据,收到NAK,就继续TOKEN,数据,直到超时。

超时以后想干什么你就自己定义吧,可以重发,也可以往上层报错。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

7
 
若要写一个扇区,有没有办法知道device已经完成上一个操作、现在空闲
如2个连续的读/写扇区命令,在做第二个时,怎么确定device已经执行完前一个呢?
test unit ready?
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 


这么做的话 数据阶段是可以通过 但是CSW有时可以收到 有时又收不到 这个是怎么回事?
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

9
 
vigia:
“不好意思,没讲清楚,我的意思是,发TOKEN,数据,收到NAK,就继续TOKEN,数据,直到超时”

既然有收到NAK,就不存在超时 --- 超时是指device对于一个发给自己的packet不做任何回应。 你同意我的说法不?还是我的理解有错?
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

10
 
“若要写一个扇区,有没有办法知道device已经完成上一个操作、现在空闲
如2个连续的读/写扇区命令,在做第二个时,怎么确定device已经执行完前一个呢?
test unit ready?”

虽然我还没有做写U盘的程序,但是我想:
不需要test unit ready。 如果第一个写U盘的命令还没有执行玩,第2个写U盘的命令中的OUT packet会一直被U盘NAK的。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

11
 
“刚试了一下,收到NAK后就重发token->OUT, 但重发后device什么也不回,既没有ACK,也没有NAK,好像把发来的token和OUT包忽略了一样,然后3秒超时就到期了”

--- 如果你重发,而得不到任何device的回应,那肯定是你重发的内容不对。 虽然我还没有做写U盘的程序,但是我觉得你对于device 的NAK,应该重发的是 : OUT + 64 byte (这64byte就是你被NAK的那1/8扇区)
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表