9 位串行与 .NET

9bit serial with .NET

我需要在 Windows IoT 上通过 Raspberry Pi 3.
在 Multidrop 总线节点和主进程 运行 之间建立通信 我知道如何用 8 位字节交换数据。它的工作代码示例:

_serial_port = await SerialDevice.FromIdAsync(di.Id);

if (_serial_port == null) return false;

_serial_port.WriteTimeout = TimeSpan.FromMilliseconds(1000);
_serial_port.ReadTimeout = TimeSpan.FromMilliseconds(1000);
_serial_port.BaudRate = 9600;
_serial_port.Parity = SerialParity.None;
_serial_port.StopBits = SerialStopBitCount.One;
_serial_port.DataBits = 8;

dataWriteObject = new DataWriter(_serial_port.OutputStream);
dataReaderObject = new DataReader(_serial_port.InputStream);

dataWriteObject.WriteBytes(0xAA);
await dataWriteObject.StoreAsync();

await dataReaderObject.LoadAsync(1);
byte resp = dataReaderObject.ReadByte();

这里我从远程节点发送1010 1010并接收xxxx xxxx

问题。

  1. 比方说,远程节点发送给我 1010 1010 1
  2. 假设我需要发送 1010 1010 1

代码应该是什么样子的?

更新

我在考虑变通方案:

  1. 使用parity bit的UART。但是我其实不明白,怎么会。
  2. 使用COM -> USB converter,但实际上第9位也会出现同样的问题
  3. 在中间使用 Adruino,它将通过 GPIO 实现 RxTx 9 位,并以我们的内部格式将数据输出到 Raspberry。

SerialDevice.Parity用于错误检查而不是数据传输。并且应用程序无法访问此位。

9位传输使用两个字节。

发送部分:

dataWriteObject.WriteBytes(new byte[] { 0b10101010, 0b10000000});

接收部分:

                byte[] data = new byte[2] { 0, 0 };
                dataReaderObject.ReadBytes(data);
                int data1 = data[0];
                int data2 = data[1];
                data1 = data1 << 1;
                data2 = data2 >> 7;
                int data3 = data1 | data2;