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
。
问题。
- 比方说,远程节点发送给我
1010 1010 1
- 假设我需要发送
1010 1010 1
代码应该是什么样子的?
更新
我在考虑变通方案:
- 使用parity bit的UART。但是我其实不明白,怎么会。
- 使用COM -> USB converter,但实际上第9位也会出现同样的问题
- 在中间使用 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;
我需要在 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
。
问题。
- 比方说,远程节点发送给我
1010 1010 1
- 假设我需要发送
1010 1010 1
代码应该是什么样子的?
更新
我在考虑变通方案:
- 使用parity bit的UART。但是我其实不明白,怎么会。
- 使用COM -> USB converter,但实际上第9位也会出现同样的问题
- 在中间使用 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;