你好,上面是我模仿an58764设计的CDC系统,我已经能正常通信。但是我仍然有一个问题没有解决,请帮忙解答,谢谢。
以前在这里提问过了,但是可能因为语言表达问题,没办法把自己的问题说清楚,以至于没有得到满意的答复。
https://community.infineon.com/t5/USB-low-full-high-speed/About-CDC-and-endpoint/m-p/325304#M10106
问题:
我从8051发了数据到PC,在EP6IN看到的数据是对的,但是我在PC看到的是ffffffff... ; 我重新从8051再发一次相同数据到PC后,EP6IN和PC的数据就都是对的了,也就是说我需要发两次请求才可以得到想要的数据。于是我就想了一个方法,第一次先arm一个不使用的EP(比如EP2IN),再arm真实需要的EP6IN就可以在PC只得到想要的数据了(不会有第一次的ffffff数据)。能帮忙分析一下是因为什么问题吗?如果可以的话麻烦留个邮件地址以便及时和您沟通,谢谢。
我用的是Free Serial Analyzer,因为我同时需要gpif,以及保留原设计的一些接口设计,
所以我的代码是AN66806+AN66806+原设计的综合体,如果方便的话我可以把源代码发给您,但是公司不允许把代码上传到这里,所以方便的话麻烦联系我Mail: chisyun.tei@shi-g.com
谢谢纠错,设定值确实错了,可惜修改之后还是出现同样的问题。
我再看了一次AN66806的代码,在USB→PC的过程中有 if(in_enable) // if IN transfers are enabled, 是不是意味着PC的in请求默认都是false的(在AN66806有设定初始值是false,但是不知一般的默认情况是否也是?)我们因为用了CDC,没办法用厂商自定义命令。如果前面的推测正确的话,每次都需要对in端点进行一次arm操作来唤醒PC的in传输,然后才能正确传输到PC?如果是这样的话,就和我们遇到的情况类似了。