USB를 통해 AT32 UC3 마이크로 컨트롤러 ADC에서 PC로 데이터를 전송해야합니다. 버퍼를 채우는 MCU에서 ADC와 PDCA의 작업을 확인하고, 데이터가 손실되지 않고도 완벽하게 작동했습니다. 하지만 USB에서 데이터를 전송할 때 일부 바이트가 손실됩니다. 나는 이것이 왜 일어나는 지 모른다. 간단한 프로그램을 작성하여 MCU에서 PC로 데이터를 보내고이 데이터를 확인하십시오. MCU에서 버퍼를 0,1,2 .. 255의 숫자로 연속적으로 채운 다음 USB를 통해 PC로 버퍼를 보내고이 버퍼의 내용을 확인합니다. 따라서 일부 숫자는 원래 데이터와 다릅니다. 일부 바이트가 손실됩니다. CDC 장치 모드에서 EVK1100을 사용하고 있습니다.AVR32 UC3 cdc 장치 모드에서의 USB 데이터 손실
AVR 코드 :
#include <asf.h>
#include "conf_usb.h"
#define BUF_SIZE 32
int main(void){
irq_initialize_vectors();
cpu_irq_enable();
sysclk_init();
udc_start();
udc_attach();
char pbuf[BUF_SIZE];
for(int i=0; i<BUF_SIZE; i++){
pbuf[i] = (char)i;
}
while (true) {
udi_cdc_write_buf(pbuf, BUF_SIZE);
}
}
C# 코드 :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;
namespace acc_tester
{
class Program
{
static void Main(string[] args) {
Console.WriteLine("Start");
int N = 32;
SerialPort serialPort = new SerialPort();
serialPort.PortName = "COM6";
serialPort.Open();
byte[] buf = new byte [N];
for (int n = 0; n < 10000; n++) {
serialPort.Read(buf, 0, N);
for (int i = 0; i < N; i++) {
if (buf[i] != (byte)(buf[0] + i)) {
Console.WriteLine("Data Lost. n =" + n.ToString() + " i=" + i.ToString());
return;
}
}
}
serialPort.Close();
Console.WriteLine("Stop");
return;
}
}
}
내 C# 프로그램의 출력은 다음과 같습니다
데이터 손실. n = 257i = 31
데이터 손실. n = 385i = 31
데이터 손실. n = 641i = 31
데이터 손실. n = 257 i = 31 등
문제를 해결할 수 있도록 도와주세요.
어떤 프레임 워크 버전, 어떤 컴파일러 및 어떤 드라이버를 사용하고 있습니까? 또한 PC에 설치된 OS는 무엇입니까? 또한 USB 포트를 확인하십시오 (2.0이 아니어야 3.0을 확인할 수 있습니다). OS가 너무 바빠서 (예 : gfx) USB CDC 대량 전송이 동기화를 잃고 드라이버 계층에서 전송이 일시 중지되는 경향이있는 경우 (예 : 노트북과 같은) 느린 컴퓨터의 Windows의 경우 MCU 측에서 처리하도록 설계되지 않은 경우 아무 것도 발생할 수 없지만 (전에는 데이터 손실이 없었습니다) – Spektre