当发送带有串行端口的字节数组时,C#分割有效负载

当发送带有串行端口的字节数组时,C#分割有效负载,c#,arrays,serial-port,usb,C#,Arrays,Serial Port,Usb,我目前正在尝试向通过USB端口连接的微芯片发送64字节长的命令。我尝试使用SerialPort.Write命令发送字节数组,但发现它实际上将有效负载拆分为16字节数据包,单独发送这些数据包,中间有空的NAK。我的代码如下: SerialPort Chip = new SerialPort("COM4"); byte[] Reset = new byte[64]; byte[] Command = new byte[64]; Reset[0] = 0x70; Reset[1] = 0xAB; Re

我目前正在尝试向通过USB端口连接的微芯片发送64字节长的命令。我尝试使用
SerialPort.Write
命令发送字节数组,但发现它实际上将有效负载拆分为16字节数据包,单独发送这些数据包,中间有空的NAK。我的代码如下:

SerialPort Chip = new SerialPort("COM4");
byte[] Reset = new byte[64];
byte[] Command = new byte[64];
Reset[0] = 0x70;
Reset[1] = 0xAB;
Reset[2] = 0xCD;
Reset[3] = 0xEF;
for (int z = 4; z < 64; z++)
{
    Reset[z] = 0x00;
}
for (int z = 0; z < 64; z++)
{
    Command[z] = 0x00;
}
Command[0] = 0x60;
Command[7] = 0x80;
Command[8] = 0x02;
Command[9] = 0x03;
Command[10] = 0x10;
Command[11] = 0x01;
Chip.Open();
Chip.Write(Reset,0,64);
Thread.Sleep(25);
Chip.Write(Command,0,64);
SerialPort芯片=新的SerialPort(“COM4”);
字节[]重置=新字节[64];
字节[]命令=新字节[64];
复位[0]=0x70;
复位[1]=0xAB;
复位[2]=0xCD;
复位[3]=0xEF;
对于(intz=4;z<64;z++)
{
重置[z]=0x00;
}
对于(intz=0;z<64;z++)
{
命令[z]=0x00;
}
命令[0]=0x60;
命令[7]=0x80;
命令[8]=0x02;
命令[9]=0x03;
命令[10]=0x10;
命令[11]=0x01;
Chip.Open();
芯片写入(复位,0,64);
睡眠(25);
芯片写入(命令,0,64);
有人知道在单个数据包中发送我的命令的方法吗?

此外,当我尝试用一个叫做HTITY的程序发送64字节命令时,同样的情况发生,而C++中的程序似乎工作得很好,但是我对C++的理解很少,所以这对我没有帮助。

< P>这是我应用的发送字节数组的应用程序:

bytesToSend = new byte[6]
                {
                    0, 5, 0,1, 13,10
                };

                _spManager.sendData(bytesToSend);
发送数据功能:

 public void sendData(byte[] bytestosend)
        {
          _serialPort.Open();
            StartListening();
            _serialPort.Write(bytestosend, 0, bytestosend.Length);

           System.Threading.Thread.Sleep(500);
        }
我还有一个函数,可以将十六进制数据(从文本框)转换为字节(如果我有一个命令可以更改(,因此数组没有预先定义的长度)):

StartListening()

var bytes = tbInput.Text.Split(' ').Select(h => byte.Parse(h, NumberStyles.AllowHexSpecifier)).ToArray();


                _spManager.sendData(bytes);
            /// <summary>
            /// Connects to a serial port defined through the current settings
            /// </summary>
            public void StartListening()
            {
                // Closing serial port if it is open
                if (_serialPort != null && _serialPort.IsOpen)
                        _serialPort.Close();

            // Setting serial port settings
            _serialPort = new SerialPort(
                _currentSerialSettings.PortName,
                _currentSerialSettings.BaudRate,
                _currentSerialSettings.Parity,
                _currentSerialSettings.DataBits,
                _currentSerialSettings.StopBits);

            // Subscribe to event and open serial port for data
            _serialPort.DataReceived += new SerialDataReceivedEventHandler(_serialPort_DataReceived);
            _serialPort.Open();
        }
//
///连接到通过当前设置定义的串行端口
/// 
公营机构
{
//关闭串行端口(如果打开)
if(_serialPort!=null&&u serialPort.IsOpen)
_serialPort.Close();
//设置串行端口设置
_serialPort=新的serialPort(
_currentSerialSettings.PortName,
_currentSerialSettings.BaudRate,
_currentSerialSettings.奇偶校验,
_currentSerialSettings.DataBits,
_currentSerialSettings.StopBits);
//订阅事件并打开数据的串行端口
_serialPort.DataReceived+=新的SerialDataReceiveDevenHandler(\u serialPort\u DataReceived);
_serialPort.Open();
}

您应该为SerialPort指定波特率、奇偶校验、数据位、停止位、握手,与在设备上设置的相同。设备使用的波特率为9600、8个数据位、1个停止位和无握手,这是默认值。您熟悉串行端口吗?是否尝试发送字符串?如果尝试发送字符串,情况仍然相同。遇到了什么问题你用HOD来读取/检查结果吗?你用的是成熟的工具吗?我不认为这会有什么帮助,因为它只是使用相同的写函数,而且你还没有指定StartListening函数的功能。编辑函数或更改某个函数的工作方式在编程领域肯定会有所帮助