完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用一个PIC32 MZ上的高速USB HID。我的应用程序的USB部分取自HID样本。它工作得很好,除非我看到在从主机(Windows 7)向PIC发送1K数据包的长突发时偶尔出现数据错误。错误发生在一些牌子的PC上,而不是其他牌子的PC上,而且很罕见,大约每10000包出现一个错误。我的读数表明USB支持硬件级的错误检测和重试。是这样吗?在微芯片HID或USB驱动程序中,我找不到任何CRC或重试。是否需要做一些事情来实现纠错,HID样例代码不做的事情?或者可以启用错误校正但仍然失败,即,传输错误发生的频率是否会比我意识到的更高,因为仅报告了致命错误?我有没有办法监视纳克和重试的数量?最好的问候,克里斯
|
|
相关推荐
7个回答
|
|
校验和在硬件上是透明的。数据包使用CRC16校验和,对于低级别的细节,见一如USB。检测到的错误是由于缺少ACK应答来表示的,NAK通常指示另一端忙。WiReSurk包括一个基于软件的USB协议分析器,您可以尝试,还有其他免费和商业的替代品。一个基于硬件的分析器给出了最好的结果,但是它们的价格是700美元到1500美元。
|
|
|
|
谢谢!这很有帮助。相关问题:USB是否包括流量控制?我假设是这样的,在这种情况下,只在一个方向(到PIC)发送长突发数据包(实际上是HID“报告”)应该没有问题。然而,我担心PIC侧的堆栈会被过度的ISR开销淹没。我曾经遇到过在不同的嵌入式处理器(Sitara)上使用以太网堆栈的类似问题。在这些长的突发事件中,我的吞吐量不同,例如,一台PC的吞吐量约为2MBytes/s,而另一台PC的吞吐量约为4MBytes/s。克里斯
|
|
|
|
你犯了什么错误?是否有错误数据、丢失数据包、硬件错误的数据包?
|
|
|
|
我得到错误的数据,但不丢失数据包或硬件错误。我很惊讶地看到这一点,因为我的印象是硬件会自动重试,直到数据包成功传输。但重试次数可能有限吗?在哪种情况下,我应该期望发送函数返回一个错误?
|
|
|
|
它计算每个数据包的CRC,所以数据错误将非常罕见。我宁愿怀疑是发送还是接收软件。
|
|
|
|
同样,我真的怀疑这个问题是在USB管内,而它很可能是它的任何一方。
|
|
|
|
我不知道你的情况,但我可以分享,一旦我遇到类似的问题,在数据传输间歇性损坏,只有在传输大量的数据在许多数据包。经过一些调查,我发现问题很简单:我使用的USB软件栈的数据缓冲区偶尔会被下一个包的有效负载覆盖。在将下一个数据加载到缓冲区之前,我没有以正确的方式检查前一个包是否已经完全传输。呃,也许这也是你的问题,我建议你检查一下:
|
|
|
|
只有小组成员才能发言,加入小组>>
5055 浏览 9 评论
1940 浏览 8 评论
1877 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3094 浏览 3 评论
请问电源和晶体值之间有什么关系吗?PIC在正常条件下运行4MHz需要多少电压?
2161 浏览 5 评论
603浏览 1评论
470浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
323浏览 1评论
PIC Kit3出现目标设备ID(00000000)与预期的设备ID(02c20000)不匹配。是什么原因
497浏览 0评论
405浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-12 22:20 , Processed in 1.539674 second(s), Total 91, Slave 74 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191