I have a one line serial communication interface, and the problem is that I send in 01010101 and the echo that I receive is 8 out of 10 times 01010101 but 2 out of 10 I receive 01110101.
Code example:
void checkVersion(int fd) {
tcflush(fd, TCIFLUSH);
unsigned char checkVersion[] = {0x55, 0x02, 0x00, 0x02};
int n = write(fd, &checkVersion, 4); //Send data
if (n < 0) cout << "BM: WRITE FAILED" << endl;
char read_bytes[10] = {0};
char c;
int aantalBytes = 0;
bool foundU = false;
int res;
while (aantalBytes < 7) {
res = read(fd, &c, 200);
if (res != 0) {
cout << "Byte received: " << bitset < 8 > (c) << endl;
if (c == 'U')foundU = true;
if (foundU)
read_bytes[aantalBytes++] = c;
}
if (aantalBytes > 2 && !foundU) break;
}
if (!foundU) checkVersionSucceeded = false;
if (read_bytes[aantalBytes - 3] == 0x02 && read_bytes[aantalBytes - 2] == 0x04 && read_bytes[aantalBytes - 1] == 0x06)
cout << "BM Version 4" << endl;
}
How I configure my port:
int configure_port(int fd) // configure the port
{
struct termios port_settings; // structure to store the port settings in
cfsetispeed(&port_settings, B9600); // set baud rates
cfsetospeed(&port_settings, B9600);
port_settings.c_cflag &= ~PARENB; // set no parity, stop bits, data bits
port_settings.c_cflag &= ~CSTOPB;
port_settings.c_cflag &= ~CSIZE;
port_settings.c_cflag |= CS8;
tcsetattr(fd, TCSANOW, &port_settings); // apply the settings to the port
return (fd);
}
What is the problem? How is it possible that the echo is mixed up 2 out 10 times?
Perhaps you should try the function bzero() when you configure the connection.
This clears the struct for new port settings, which might help to stop the irregular answers you receive over the serial port.