9-битный сериал с .NET - PullRequest
0 голосов
/ 20 февраля 2019

Мне нужно создать связь между узлами многоточечной шины и основным процессом, работающим в IoT в Windows через Raspberry Pi 3.
Я знаю, как обмениваться данными с 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. Чтобы использовать бит четности UART.Но я на самом деле не понимаю, как.
  2. Использовать COM -> USB-конвертер, но на самом деле могут быть те же проблемы с 9-м битом.
  3. В середине используйте Adruino, который будет реализовывать 9-битный RxTxчерез GPIO и вывод данных в Raspberry в нашем внутреннем формате.

1 Ответ

0 голосов
/ 21 февраля 2019

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;
...