feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
阅读:3467回复:24

5509与isp1581连接,急问枚举问题

楼主#
更多 发布于:2007-01-09 11:19
  文字

各位大牛,大家好!

小弟刚开始使用ISP1581开发USB2.0,与TI的5509相连。

翻了前面很多帖子,拜读了jinghuiren大牛的一些问题。

有些枚举的问题请教:


调试的时候,用仿真器设置断点查看,发现isp1581的中断乱来

置位softct后,没有EP0SETUP中断产生,产生susup中断,busreset中断

还有resume中断。就是各种中断随便来,后来我把所有的中断都不使能,发现中断
标志HS_STAT和BUS_RET还是置1了,真是诡异啊!

我怀疑是我的电路,isp1581和dsp的连接时序有问题,请问有什么特殊的要求吗?哪些地方需要
延时吗?

原来程序在51和1581的连接时,是没有问题的。换到16bit的dsp时,我就将原来的8bit数据传输什么
改为了对应的16bit传输。其他流程都是一样的啊,现在刚开始连主机的标准命令都接收不到,所以
不知道是什么问题啊?

另外,我读id寄存器是没有问题的,ISP1581接的是dsp的ce空间

谢谢大牛的指导啊!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-01-10 10:45
先把无关的挂起唤醒sof中断关掉调试,busreset和HS_STAT是一定会有的,这点不用怀疑
这两个中断完成后才会出现第一个get discriptor中断
时序上ISP1581访问周期是80ns,如果你的dsp过快需要延时
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-01-10 19:05
谢谢大牛的回答。我把14H设置为 ISP_INT_ENABLE_LSB = 0x0D21;

然后发现有HS_STAT和BUS_RESET中断,但是两个中断是一起来的

请问该怎么处理?isp的中断响应了之后,是要自己清中断标志的吧?

继续运行下去,发现14H的值会变为0021,把ep0的中断全部禁止了,然后ep0就接收不到中断了。

我也没有对14H进行操作啊,是怎么回事呢?

谢谢!
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-01-10 19:13
isp的访问周期最少80ns,这个周期是指cs从第一次变低到第二次变低的时间吗?

那么延时,就是要在两次访问isp的指令之间加延时吗?
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-01-11 13:11
今天继续调试了,发现是BUSRESET之后,就自动禁止了EP0的中断,我在处理BUS中断的时候,没有重新
写14H。还发现在BUS中断的情况下,马上就会来HS中断。在我这里的表现就是两个中断一起来,所以我就
在处理BUS的中断程序里,处理HS中断了。


而且我在BUS中断的处理当中,没有对SOFTCT再置1。因为看了以前的帖子,好像对这个不需要再次置1的。

经过这两个处理之后,还是没有EP0SETUP中断。

后来我在BUS中断里,再将SOFTCT置1。就有了EP0SETUP的中断了。

感觉是这个过程:

从主程序置1 SOFTCT,然后来BUS,HS中断,主机马上来SETUP包,但是我的程序还在做BUS中断处理,
就禁止了EP0SETUP的中断,所以就不响应SETUP包了。BUS中断处理完了之后,主机已经不发SETUP包了。

我在BUS中再次置位SOFTCT后,就可以收到SETUP包。

但是好像只有GET_STATUS命令。

呵呵,还要继续调试。

在这里写写调试的过程,有点乱。

希望大牛们可以指导指导!

不知道我的理解对不对,中断来的顺序还有处理的要求都不是很清楚。

如果大牛们有空,帮忙解释一下中断来的顺序和必要的处理。谢谢!
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-01-13 16:30
今天终于枚举成功了。可是又出现一个怪现象,用USB供电(板子总电源),可以枚举成功。但是换成外部电源供电(外接5V电源作为总电源,USB的电源断开),USB就枚举不成功了。发现是最后一个GET DESCRI的wLength的值不是FF 00 ,而是00 00。不知道是什么原因,请大侠们指导一下。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-01-15 09:19
干扰太大?软件问题?
再仔细查查
dqy32
驱动牛犊
驱动牛犊
  • 注册日期2004-03-10
  • 最后登录2009-02-16
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-01-15 10:06
楼主你好,我这几天也在调试1581,跟你遇到的情况极其类似,先前是中断乱来,现在是只能收到GET_STATUS中断,从来也没有看到GET DESCRIPTION中断,这里该怎么调试啊,希望楼主不吝赐教。
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2007-01-16 10:36
哈哈,谢谢jinghuiren大牛的回答。今天终于搞定枚举问题了,是我的程序有不合理的地方。所以USB供电和外电源供电导致一点点上电顺序不同,就导致程序跑飞了。

现在调试数据上下传的问题,我用DriverWizad自动生成的驱动。

在初始化的过程当中,我设置18H为CD21,只开0和2端点的中断,端点2设置为BULK型,并且使能。

在中断程序中,等待EP2RX中断的产生。然后去执行RECEIVE函数,就是将得到的数据从端点2的
DATA_PORT里面读出来。

现在的问题是,主机发送数据说TRANSFER 错误,Unrecognized error code。但是下位机还是可以
继续跑,只是数据不对。

我没有使用DMA功能,是不是要禁止一些寄存器?

这个问题有没有可能是驱动的问题?

谢谢
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-01-16 10:44
TO dqy32:

中断乱跑,可以只开bus&hs中断,要知道bus中断来了之后,会来一个hs中断,所以在处理bus中断的程序当中必须要处理hs中断,也就是重新初始化一些寄存器。

你自己仔细看看究竟收到的是什么标准命令吧,很有可能是你读寄存器的时间太快了。导致06没读出来,读成了00。
dqy32
驱动牛犊
驱动牛犊
  • 注册日期2004-03-10
  • 最后登录2009-02-16
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-01-16 14:58
感谢楼主指点,正常初始化是是不是就没有GET_STATUS中断呢?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-01-16 15:00
有可能是端点上下不匹配
驱动里读1,设备里写0,
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-01-17 09:15
请问是指驱动读端点1,而设备写端点0吗?

好像不太可能,因为我的receive函数是等到EP2RX中断来了才执行的。

我的理解是这样的:EP2RX产生中断了,说明端点2已经收到数据了,把ACK发给主机了。


然后我就INDEX =4,然后就读dataport。

接着我给主机送一些数据,反映写下来的内容。

请问,主机发完5个SETUP包,然后就加载驱动,接着还要发一个SET_CONFIG的包吧?

我好像没有收到这个包。数据传输不正确跟这个很有关系吧?
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-01-17 11:24
现在发现收到了SET_CONFIG的SETUP包了。00 09 01 00 00 00 00 00

我发现问题了,不知道对不对,还要再试过。

INIT EP的时候,要按照编程指南上面的顺序。先禁止,再设置长度,最后设置端点模式。

然后在收到SET_CONFIG的包之后,再把要用的端点使能。好像就可以了,呵呵
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2007-01-17 15:16
又发现奇怪的现象了。

主机发送数据,如果发送的数据为FF 01 02 03 04 05 06 07 08,设备接收到的就为00 00 02 03 04 05 06 07 08;如果发送的数据为FF FF 01 02 03 04 05 06 07 08,那么设备接受的为01 02 03 04 05 06 07 08 0F 3B,难道是驱动对开始为FF的数据包有操作?

有没有高手碰到过这种情况,请指导一下吧!
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2007-01-18 10:20
真是诡异啊,大侠们帮忙啊!
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2007-01-18 14:56
感觉很明显是时序问题,自己再仔细研究一下读写时序根DSP的连接部分
凡事先要靠自己,认真分析问题可能出现的各种情况,然后通过实验验证。
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2007-01-19 13:50
谢谢jinghuiren大牛的中肯回答,其实我一直自己在不断尝试。但是经验不足,所以希望有点建议。呵呵
feiafei
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2007-08-10
  • 粉丝0
  • 关注0
  • 积分220分
  • 威望23点
  • 贡献值0点
  • 好评度22点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2007-01-21 20:36
我把读写的周期变短之后,果然数据就读写正确了。但是读写速度变快之后,1K多的数据一起写进管道时就会出现TIMEOUT的错误。真是矛盾啊!
dqy32
驱动牛犊
驱动牛犊
  • 注册日期2004-03-10
  • 最后登录2009-02-16
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望6点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2007-01-22 09:39
楼主你好,我现在已经调试到主机已经能查找驱动了,下面我打算开始调试bulk端点,请问SET_CONFIG是在驱动安装完后主机才发出的么,bulk端点是不是在SET_CONFIG以后才能开始进行操作,谢谢!
上一页
游客

返回顶部