This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我正在使用 TMS320F28377D、并已将 USB 电缆连接到它。 我使用了 USB_bulk_examples 并修改了微控制器上的代码以及 Visual Studio 代码。 我当前正在对 ADC 采样并将数据传输到计算机。 使用示波器、我看到采样率非常一致、但 USB 数据传输不一致。 大多数情况下、它能够足够快地传输数据(其中数据是64字节的数据包、即64x8位、这意味着32个16位 ADC 样本)、但有时数据传输时间太长、样本丢失。 是否有办法在 Visual Studio 中将 USB 优先级设置为优先级? 或者、为了使 USB 传输更加可靠、我可以对微控制器代码进行任何更改?
谢谢、
Dyon
尊敬的 Kevin:
基本上 、我使用以下代码:
void sendData(){
执行{
ui32Space = USBDBulkTxPacketAvailable (&g_sBulkDevice);
}while (ui32Space!= buffer_size);
USBDBulkPacketWrite (&g_sBulkDevice、resultBuffer、ui32Space、true);
}
我在这里要做的是在总线清零时写入一个数据包。 我认为,这是不一致的部分。 我认为这与总线在想写入新数据包时的忙状态有关。 因此、我认为问题在于计算机。 我需要在某种程度上设置计算机的优先级、以便它能够足够快地读取总线。
在 Visual Studio 中、我正在使用以下行: dwError = ReadUSBPacket (husb、szBuffer、USB_buffer_LEN、&ulRead、5000、 null);
整个通信正常、但在使总线数据足够快方面并不一致。 当我在计算机上打开其他程序时、它甚至会变得更糟糕、这是可以预料的。 这就是我认为它与优先级有关的原因。
- Dyon
Dyon、
是否尝试为运行 VC++应用程序的 Windows 进程设置更高的优先级?
USB 实际上并不是一种良好的实时通信外设/协议。
看到这个线程
此致
Siddharth
Dyon、
计算机现在只有 USB,似乎是正确的选择,但即使我们也无法实现 12 Mbps 的全速。 我们已经能够实现7-8 Mbps。 在这种情况下、限制因素不是器件上的 CPU 利用率或 USB 模块、而是来自 PC 的请求中的数据。
您可以尝试将 Windows 任务管理器中的进程优先级设置为"realtime"吗?
此致
Siddharth
Siddharth、
我试过它,运气不好。 不具有"高优先级"或"实时优先级"。 它可能与微控制器一起使用。 我需要以某种方式更改该代码。 USB 数据包是否有缓冲区、当我有新数据时、可以添加缓冲区、USB 将以尽可能快的速度逐一发送? 因为现在、如果一次传输比我的采样时间长、那么我将丢失该样本集。 但是、如果我可以将它们存储在缓冲区中、USB 可以在完成后立即发送、那么它可能能够在样本之间发送多个数据包? (使用样本、我是指64字节/1个数据包的值)。
Dyon
Siddharth、
我现在认为它与计算机功能有关。 我使用的笔记本电脑具有2个内核和 Windows 10、因此无法足够快地传输数据包。 然后、我使用具有8个内核和 Windows 7的计算机进行了测试、几乎没有丢包。 我只是不知道它是操作系统还是处理器。 WinUSB 应该与所有 Windows 操作系统兼容、对吧?
对此问题有任何建议?
谢谢、
Dyon
Dyon、
很高兴您能够将其缩小到 PC 端。
我认为最好与 Windows/Microsoft 论坛联系、了解这方面的信息。 据我所知、WinUSB 应该与 Windows 版本兼容。
此致
Siddharth