C#串行链路字节通信错误

C#串行链路字节通信错误,c#,byte,C#,Byte,我想问你,因为我无法解决我的问题。我编程了MCU和PC(windows)之间的通信,但出现了一个问题 通信类型:字节 消息结构: PC->MCU AA 55 MESLEN MESSID PACKID[1]PACKID[0]数据CRC; MCU->PC 55 AA MESID DATA1 DATA0 CRC(固定大小) 其中,AA 55(55 AA)是消息头 通信原则: PC发送了大量数据(带有mess ID、packedID等) MCU接收数据,如果数据正常(标头和CRC正常),则发送一个带有相

我想问你,因为我无法解决我的问题。我编程了MCU和PC(windows)之间的通信,但出现了一个问题

通信类型:字节 消息结构: PC->MCU AA 55 MESLEN MESSID PACKID[1]PACKID[0]数据CRC; MCU->PC 55 AA MESID DATA1 DATA0 CRC(固定大小)

其中,AA 55(55 AA)是消息头

通信原则: PC发送了大量数据(带有mess ID、packedID等)

MCU接收数据,如果数据正常(标头和CRC正常),则发送一个带有相同MESID和packedID的响应,以确认之前的消息。否则,“看门狗”将重新发送消息(并写入控制台超时)

除了一个案例外,通信工作没有问题。在DATA0=0x1A和DATA1=0x00的情况下,通信完全失败

我使用示波器检查通信,该消息正确发送,但有任何延迟等

具体问题: 1) 只有在这种情况下,通信才失败。 2) 只有在这种情况下,PC从串行链路接收字节时延迟较大,但数据发送正确(在示波器上检查)

我试过: 更改超时 更改接收字节treshold(现在为1,但我测试了7B,但问题相同)

记录功能源:

      static void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        int BytesNr = port.BytesToRead;
        int InputCRC = 0;
        Uart_alldata = false;
        byte[] tempData = new byte[10];


        if (BytesNr == 7)
        {
            // port.Read(tempData, 0, BytesNr); 
            for (int i = 0; i < BytesNr; i++) tempData[i] = Convert.ToByte(port.ReadByte()); // alt for test
            Array.Copy(tempData, inbuffer, BytesNr);
            Uart_alldata = true;
            string data = BitConverter.ToString(tempData);
            Console.WriteLine(data);
        }
        else
        {
            // port.Read(tempData, 0, pocetB); 
            for (int i = 0; i < BytesNr; i++) tempData[i] = Convert.ToByte(port.ReadByte());
            Array.Copy(tempData, inbuffer, BytesNr);

            string data = BitConverter.ToString(tempData);
            Console.WriteLine(data);
            port.DiscardInBuffer();
        }

        try
        {
            port = new SerialPort(ArrayComPortsNames[cislo_portu], 9600, Parity.None, 8, StopBits.One);
            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
            port.ReadBufferSize = 4096;
            port.WriteBufferSize = 4096;
            port.WriteTimeout = 500;
            port.ReadTimeout = 50;
            port.RtsEnable = true;
            port.DtrEnable = true;
            port.ReceivedBytesThreshold = 1;


            // Begin communications
            port.Open();

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);

        }
        Console.WriteLine("Port otevřen");
    }
静态无效端口\u DataReceived(对象发送方,SerialDataReceivedEventArgs e)
{
int BytesNr=port.BytesToRead;
int InputCRC=0;
Uart_alldata=false;
字节[]临时数据=新字节[10];
如果(字节数==7)
{
//读取端口(tempData,0,字节数);
for(int i=0;i

大约200条以前的信息没有问题
读取字节:7B
55-AA-02-00-17-CC-1C-00-00-00
读取字节:7B
55-AA-02-00-17-CC-1C-00-00-00
读取字节:7B
55-AA-02-00-18-CC-1B-00-00-00
读取字节:7B
55-AA-02-00-18-CC-1B-00-00-00
读取字节:7B
55-AA-02-00-19-CC-1A-00-00-00
读取字节:7B
00-00-00-00-00-00-00-00-00-00
55-AA-02-00-19-CC-1A-00-00-00
读取字节:7B
00-00-00-00-00-00-00-00-00-00
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00-00
超时
超时
超时
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00-00
超时
超时
超时
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00-00
超时
超时
超时
55-AA-02-00-1A-00-00-00-00-00
00-00-00-00-00-00-00-00-00-00
CC-19-00-00-00-00-00-00-00-00-00

你知道问题出在哪里吗?? 谢谢你的想法

问候


L.Beran

编辑:数据接收正常(标题、数据本身和CRC),但发生了移位。我认为如果您使用更具体的标记,您的问题更有可能得到答案。我在谷歌上搜索到MCU之前并不知道它是什么,但我敢打赌有一些硬件/嵌入式标签可以用来引起那些人的注意。