打印

请教个问题 谢了

[复制链接]
4013|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
TE, ST, se, TI, point
自己做了个USB的板子 用的是68001和dsp 附件中有原理图 固件 上位机代码 但不知道为什么EP6中的数据传不到HOST中(EP8也是) 不知是什么错误 我看了68001的datesheet中的0x20寄存器 文档上写的如下:7.10 INPKTEND/FLUSH Register 0x20
This register allows the external master to duplicate the function of the PKTEND pin. The register also allows the external master
to selectively flush endpoint FIFO buffers..
Bit [4..7]: These bits allows the external master to selectively flush any or all of the endpoint FIFOs. By writing the desired endpoint
FIFO bit, SX2 logic flushes the selected FIFO. For example setting bit 7 flushes endpoint 8 FIFO.
Bit [3..0]: These bits are is used only for IN transfers. By writing the desired endpoint number (2,4,6 or 8), SX2 logic automatically
commits an IN buffer to the USB host. For example, for committing a packet through endpoint 6, set the lower nibble to 6: set bits
1 and 2 high
但是像我的程序中写的一样 先向EP6中写数据后在向0x20寄存器写6 还是 反过来先写06再写EP6中的数据呢?还是我的上位机软甲有问题呢? 谢了

DSP_USB.zip

289.55 KB

相关帖子

沙发
dqyubsh| | 2011-4-18 22:12 | 只看该作者
你敢选择DSP,就是选择一个**烦。幸好可以用DSP仿真器,连上看看程序的走向。

关于你问先写数据还是先INPKTEND,那应该是先写数据再INPKTEND。一般写数据的时候不一定刚好写满FIFO约定的512/1024等长度,没写满,FIFO就不会自动发给主机,此时需要固件INPKTEND一下,将零散的数据强制发送给主机。

FLUSH这个词很形象,以前翻译成“排空”。写文件时,FLUSH会把数据从内存写到磁盘,串行通讯时FLUSH把数据从内存写到串口,等等。这里就是把数据从FIFO排空到主机,从而为下次上传空出空间。

FLUSH之后,DSP本次上传结束,可以开始下次上传。主机是否接收,DSP不管。如果主机取走数据,一次上传就成功了;否则,下次再排空,会覆盖掉上次的数据。

你的问题可能发生问题在DSP发送部分,也可能在主机接收部分。DSP部分,参照开发板可以解决。主机部分,用CyConsole可以读出数据。

别拿那个USB抓包的程序瞎抓了,那是个祸害。

使用特权

评论回复
板凳
zyzyzy407|  楼主 | 2011-4-22 09:17 | 只看该作者
对 我是先写数据 在INPKTEND的 但就是上不去数 您说的dsp问题是指什么 主机问题又是指什么呢?不太明白请解释下 谢谢了 2# dqyubsh

使用特权

评论回复
地板
zyzyzy407|  楼主 | 2011-4-22 09:20 | 只看该作者
对了 我的程序中是先下发数据到EP2 在把数据写到EP6传给电脑 下发成 我又用dsp看看了程序走向 数据也写入EP6中了 但cycontrol就是收不到从EP6来的数据 不知怎么回事
2# dqyubsh

使用特权

评论回复
5
dqyubsh| | 2011-4-24 14:23 | 只看该作者
你把CyConsole的操作步骤详细罗列一下,用WORD把图片拷贝下来,哪个步骤出错的详细指明。

感觉你没有正确用好这个工具,在操作次序上跟硬件不搭(这个次序可以参看主机的应用程序,对照那个一步一步操练)。

既然有评估板,上边和下边的程序纹丝不动,也会弄成。总不至于这么费劲。

使用特权

评论回复
6
zyzyzy407|  楼主 | 2011-4-25 08:29 | 只看该作者
主要是那个开发板的例程的VC程序一用电脑就死机了  我待会把CyConsole的图贴出来 5# dqyubsh

使用特权

评论回复
7
zyzyzy407|  楼主 | 2011-4-25 09:41 | 只看该作者
以下就是我的问题及图片:
1 BUS HOUND 及EZ-USB CONTROL PANEL识别了设备
2 用EZ-USB CONTROL PANEL中的bulk/Int按钮 分别2次向EP2发送了64 1024个 0x0505 在DSP的epdatar中 也正确等到了字节0x0505 我的DSP程序中在把接收的0x0505发送到ep6都送回pc 但就是回不来 bus hound 和 ez-usb control panel 也没有抓到向pc传的信息了

使用特权

评论回复
8
dqyubsh| | 2011-4-25 13:25 | 只看该作者
愁死了,到关键地方没图了。别发bus hound的,不要看那个。

首先,你把所有程序换成开发板自身的,哪都别动。你照上图发512字节下去。然后在BULK/INT那行,pipe那里,换成另外IN的那个,数据长度512,然后按“BULK/INT”按钮,看下显示什么,把这个图发上来。

还有,PC上客户端程序怎么个情况,

使用特权

评论回复
9
zyzyzy407|  楼主 | 2011-4-25 19:24 | 只看该作者
太感谢了 那个能传上来了 但为什么只能是512个呀 还有 如果我在要发送的数据的编辑框中 写 不同的数 如 5,6,7 它的length就直接置成 3 了 并且最大只能是64个 如果接收不置成512就收不到了 请问为什么? 我的图在下边 还有那个开发板的VC程序一用就死机了 它的源程序我添加到附件中了 8# dqyubsh

使用特权

评论回复
10
zyzyzy407|  楼主 | 2011-4-25 19:29 | 只看该作者
这个是图 VC软件一用就死机 按下接收数据不知道怎么就显示那几个数据 主要请解释下为什么只能发512数据并且数据还相同 若要发送任意长度的数据怎么发呀?

VCsend512.gif (1.05 MB )

VCsend512.gif

VCrcv512.gif (1.16 MB )

VCrcv512.gif

VCrcv512 (2).gif (1.05 MB )

VCrcv512 (2).gif

使用特权

评论回复
11
dqyubsh| | 2011-4-25 21:26 | 只看该作者
为什么是512——因为VC的测试程序就是512,这个通过的可能性最大。

如果我在要发送的数据的编辑框中 写 不同的数 如 5,6,7 它的length就直接置成 3 了 并且最大只能是64个——这个可以不管。这里只能手工输入数据,简单试试就完事。如果下发其它数据,可以按“FileTrans.."按钮,选择不同长度的数据文件下发。在C:\Cypress\USB\Util\Test目录下的数据文件都可以使用,长度包括64字节、512字节、4096、8192等,数据可以是有序的,也可以是无序的。

如果接收不置成512就收不到了 请问为什么?——这个我也不确定知道为什么,要调试程序DSP的程序才知道原因。理论上,这个长度可以是任意的,因为有之前所说的“排空”机制,确保无论多长的数据都可以正确接收。如果不正确,首先排除你操作错误,然后,排查DSP程序。

VC程序死机的问题——这是VC6写的程序,可以DEBUG一下。发送和接收是两个线程,可能的原因是操作不当(日,一个破程序有什么操作技巧)。按下发送按钮,数据会显示在上边的发送文字框里,同时发送给USB。接收按钮无需按下吧,它自动从USB端点取数,自动显示在下边的文字框里。有就显示,没有就等待,应该是这个意思。512你可以修改成别的长度,试试看行不行。

这个驱动很老了,连同680001都停产了。在所有的问题都解决之后,你应该换一下新的驱动,重写VC6的代码。

祝一切顺利!

使用特权

评论回复
12
dqyubsh| | 2011-4-25 22:39 | 只看该作者
更正一下,刚看了一下VC6的烂程序,没用到线程,就是一个手工发送,手工接收的过程。上边的按钮,大概可以多次发送接收吧。。。。

没有注释,没有说明,不是给人看的程序。哎。界面也是一团糟,用这个软件真是倒霉。

使用特权

评论回复
13
zyzyzy407|  楼主 | 2011-4-26 08:44 | 只看该作者
先谢了 可是手工发送数据时 最大只能是64 字节 为什么写不到512个字节呀?我现在主要是 想弄一个USB转CAN的 DSP通过68001接收到数据后 把数据写入CAN邮箱 待会我再发个 那个VC例程接收的画面 接收后只显示了 几个字节 12# dqyubsh

使用特权

评论回复
14
dqyubsh| | 2011-4-26 11:16 | 只看该作者
按一下发送,再按一下接收,一对一地试。这个过程和CyConsole手工收发过程完全一致。如果CyConsole正确VC6不正确,说明VC程序有问题,具体问题去调试。至于界面显示几个字符无所谓,你去看程序,或者重写一个程序。64个字节,当成USB1.1了吧,天知道呢。

使用特权

评论回复
15
zyzyzy407|  楼主 | 2011-4-26 12:53 | 只看该作者
嗯 不过现在就是用CYCONTROL接受的只能是512 发送可以发送几个但也有些问题 1。如 我发了个3 4 5 6(数字中间有空格) 而我在dsp程序的rdata数组中受到的是0x0403 0x0605 0x0606 0x0606 后面的就全是0x0606了 一共512个 是不是说实际我向EP2发送的还是512个 只是在cycontrol显示的只有 4个数   还有就是 我发的是 3 4 5 6 bus hound中显示的为什么是 33 20 34 20 35 20 36 20 是不是出了3 4 5 6 其他的全是传输包的命令字呀? 2. 下面是我2次向EP2发送小于512字节数据后 再读EP6中数据的CYCONTROL截图 再次麻烦你了 14# dqyubsh

使用特权

评论回复
16
zyzyzy407|  楼主 | 2011-4-26 13:20 | 只看该作者
还有就是请教一下 cycontrol发生数据时的格式是什么 比如我发了十六进制的a后的数据 怎么发不了呢? [uurl=https://bbs.21ic.com/redirect.php?goto=findpost&pid=1636401&ptid=230791]14#[/url] dqyubsh

使用特权

评论回复
17
dqyubsh| | 2011-4-26 15:49 | 只看该作者
哎,你要补的课太多了,明显超出了你现在的能力。可以肯定地说,选DSP是一个错误,你至少需要两年的积累。

1。如 我发了个3 4 5 6(数字中间有空格) 而我在dsp程序的rdata数组中受到的是0x0403 0x0605 0x0606 0x0606 后面的就全是0x0606了 一共512个 是不是说实际我向EP2发送的还是512个 只是在cycontrol显示的只有 4个
——CyConsole是没错的,这个你不用怀疑。它发送下去的是16进制数,界面写着HEX BYTES,即,每个空格分隔的都是一个16进制数,0x03 0x04 0x05 0x06。这是连续的数组,即BYTES={0x03 0x04 0x05 0x06};
——发到DSP显示是0x0403 0x0605 0x0606 0x0606,这跟DSP数据组织方式有关。2812是16位的单片机,每个字是16位的,其中的两个字节可能是高字节在前,也可能是低字节在前。这种次序在不同的计算机系统里表示方法不一样,具体看手册吧,我懒得看2812。
——后边是060606,,,,这跟DSP的程序有关,你看一下,他是不是每次都取512字节。在取数之前,他可能会默认FIFO是512字节的,或者程序指定要取512。如果是,那就不奇怪了,它取来了一整块数据。至于你发下去多少,他不知道。你必须告诉他,我这次发下去4个字节,即你发送时,多发一个字节(字),第一个是长度,后边跟着数据,然后DSP收到之后,拆包,看到长度4,就解释成来了4个字节。后边的4个字节才是有效数据,再之后的0606,不管了。这叫通讯协议。。。。

使用特权

评论回复
18
dqyubsh| | 2011-4-26 15:59 | 只看该作者
还有就是 我发的是 3 4 5 6 bus hound中显示的为什么是 33 20 34 20 35 20 36 20 是不是出了3 4 5 6 其他的全是传输包的命令字呀?
——大概BH把它当成ASCII码了吧,我一贯反对在调试阶段用这个东西。它这样认为的,你发的是数字3,空格,数字4,空格,数字5,空格,数字6,空格。你觉得它有错吗?

2. 下面是我2次向EP2发送小于512字节数据后 再读EP6中数据的CYCONTROL截
——你笨S了,连着发两次才取一次,USB挂了。你要发一次收一次。你随便发DSP都傻了,程序走向乱套了。CyConsole等待一会收不到数据,大致超时出错了。

3,还有就是请教一下 cycontrol发生数据时的格式是什么 比如我发了十六进制的a后的数据 怎么发不了呢?
——16进制。不明白你怎么试出来的。是不是挂了之后又发的?挂了就得复位端点了。你得把通讯流程恢复到初始状态。

使用特权

评论回复
19
zyzyzy407|  楼主 | 2011-4-26 16:30 | 只看该作者
1对呀 cycontrol实际只向EP2的FIFO写了3 4 5 6 总共4个字节那fifo中剩下的空间中的字节数据就应该不确定呀 为什么还是0x0606呢?2 可我真的是下发了2次 比如 我第一次向EP2发了512个5 后又向EP2发了512个6 之后我再用EP6收 第一次收到的是512个5 第二次受到的是512个6 我看68001文档上写的是512byte 2X 是不是双缓存呀?
你有什么在线联系方式吗 最好能语音 请教一下 我的q869025148 18# dqyubsh

使用特权

评论回复
20
zyzyzy407|  楼主 | 2011-4-26 16:50 | 只看该作者
对了 还有cycontrol中的last error 中的那个state=unknown 是什么意思?为什么出现unknwon 18# dqyubsh

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

208

帖子

0

粉丝