jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
阅读:3001回复:15

讨论一下vendor request的一个问题,各位进来看看。

楼主#
更多 发布于:2003-12-14 22:32
我使用vendor request向设备发送24字节的数据,如果只发送一次,设备端收到的数据是正确的,可是如果把这个vendor request连续发送几次,那么从ep0out端点里读出的数据就会出现地址错位的现象。

例如,控制传输的数据阶段的数据是8E CE DB 3B …… 5A 5A D3 C0
如果主机只发送一次,那么设备方mcu读出的数据是正确的
如果连续发送几次,就有可能出现前四个字节数据是00 00 00 00,然后其余数据依次后移的现象,那位仁兄能解释一下?

多谢。
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-15 09:14
用户被禁言,该主题自动屏蔽!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-15 13:07
不是,经过我和我同学的讨论,初步认为问题出现在我提前读取了端点里的数据,因为我在setup中断里完成控制传输的数据阶段,因此有可能当我读取端点里的数据时,数据还没有被收发器放到端点里,这样我最先读出来的数据零不是从端点里读出来的,而是数据线上的零,等端点里的数据生效后读出来的才是正确的数据。

为此事昨晚又被老板骂了!
真郁闷!
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-12-15 13:14
用户被禁言,该主题自动屏蔽!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-15 13:36
我原先也是这么想的,可是实际操作的时候没有收到相应的out中断,只好在vendor request的setup中断里处理了,这个功能前天开始做,昨天就开始用,没时间仔细考虑。所以才出了问题。
au2o3t
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2004-03-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-15 13:43
每次的请求都从setup开始应该就不会出问题了吧?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-15 14:05
呵呵,每次请求确实都是从setup开始的!
否则那不叫vendor request :D
au2o3t
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2004-03-02
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-12-15 14:18
不要笑我啊,我刚开始学,一个星期 ^___^
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-12-15 14:34
我们共同进步 :)
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2003-12-15 14:37
我不知道你是说firmware还是上层软件,但是我从firmware角度考虑:
当你发从SETUP token后,在IN or OUT data阶段时,设备没准备好,会返回nack,你读数据是不对的,只有ack后,才读,为什么你能提前读了呢?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-12-15 14:44
端点0得端口地址是已知的,只要你收到了setup packet并且判断有数据阶段,在那里读数据都是一样的,只要能认定你读数据的时候数据确实已经生效即可,当然,最保险的是在setup中断后的ep0rx中断里面接收数据,
我在我的程序里加上延时后,数据就正确了,在ep0rx中断里什么也不做,这说明只要数据发到设备端,你怎么读都行的 :D
lxb_gd
驱动太牛
驱动太牛
  • 注册日期2002-01-16
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72408分
  • 威望362391点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2003-12-15 15:00
在setup 阶段和数据阶段之间加延时是直接的方法,但具体是多少就要试验了,反正速度在vendor request是次要的,但要考虑到速度的话,或开发环境发生变化(如晶振发生变化,速度变快了)简单的延时可能就会出现问题的,还是收到ack后才读写,比较保险的。
pengenwen
禁止发言
禁止发言
  • 注册日期2003-03-07
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1586分
  • 威望8380点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-12-15 15:14
用户被禁言,该主题自动屏蔽!
mailxufeng
驱动牛犊
驱动牛犊
  • 注册日期2003-10-15
  • 最后登录2005-03-29
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-12-15 15:58
我也认为SETUP包以后如果有数据过来的话会产生OUT0中断的啊,就比如PHILIP的D12固件程序中就是在ep0rx中接收的啊,你的怎么会没有呢,是不是还有其他原因。
NewTech
驱动大牛
驱动大牛
  • 注册日期2002-10-02
  • 最后登录2010-03-27
  • 粉丝0
  • 关注0
  • 积分16分
  • 威望263点
  • 贡献值0点
  • 好评度86点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-12-15 16:45
我觉得是你的接收程序的问题!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-12-15 18:21
有可能,不过这个比较急,来不及调试了,暂时能用就行了,我这几天再做一下测试,理论上来说一定要有ep0rx中断的,可能是我那个地方设置的不对。

呵呵,谢谢大家了。 :D
游客

返回顶部