Данные, полученные из микроконтроллера с использованием библиотеки npm serialport в linux, содержат несколько байтов мусора в дополнение ко всем правильным байтам - PullRequest
0 голосов
/ 31 марта 2019

У меня есть две одинаковые установки с одинаковой проблемой в обеих.

В первой настройке у меня есть MSP342 от TI, подключенный к тензодатчику и к энкодеру, который отправляет 6 байтов данных в RPi 3B (с распбианом), используяпоследовательный порт.Он имеет прямое подключение к контактам Tx и Rx между микроконтроллером и RPi.

Во второй настройке у меня MSP432 подключен к датчику давления и отправляет 3 байта данных датчика на компьютер под управлением Ubuntu 18.04 с использованием FTDI TTL на USB-кабель.

В обоих случаях я использую библиотеку npm serialport node.js для получения данных, а затем собираю их в 6-байтовые или 3-байтовые блоки.Эти данные позже наносятся на график.

Когда я запускаю систему, она работает нормально в 90% случаев.Однако иногда я вижу 1 или 2 ложных байта на приемном конце, который отбрасывает мои 3 или 6 байтовые группировки.Команды, отправляемые в микроконтроллер, всегда правильные.

Чтобы убедиться, что микроконтроллер не виноват, я подключил микроконтроллер Tx к другому компьютеру, на котором запущена ветряная мельница, и сравнил полученные байты.Ветряная мельница не показала ложных байтов.Я попытался сбросить порт, который иногда работает.

// The node.js code on the RPi and computer side 

var dataArray = [];
var SerialPort = require('serialport');
var port = new SerialPort("/dev/ttyUSB0", {
baudRate: 115200,
});

const ByteLength = SerialPort.parsers.ByteLength;
const parser = new ByteLength({length: 3});

var data = [0x21];
var counter = 0;

console.log("Starting test : " + data)
port.write(data);

port.pipe(parser);
parser.on('data', readdata);
//port.on('data', readdata);

function readdata(data) {
/*for (var i = 0; data[i] != null ; i++) {
    dataArray[i] = data[i];
}*/
counter =counter + 1;
dataArray1 = getHexString(data);
//console.log(data);
//console.log(dataArray);
console.log(counter+" "+dataArray1);
}

function getHexString(buffer) {
var newbuf = Buffer.from([buffer[0], buffer[1], buffer[2]])
var hexString = newbuf.toString('hex')
return hexString
}

Данные отправлены из микроконтроллера CA 83 AE Данные получены на компьютере 00 CA 83 AE

...