Salve, nell'ambito di un progetto, dovrei riuscire a comunicare attraverso porta UART con un dispositivo che utilizza il protocollo MODBUS.
Ho sotto mano un codice che realizza la stessa cosa ma su porta USB (convertitore USB<>RS485); io invece mi trovo a dover lavorare con un convertitore TTL<>RS485 che si interfaccia ad una board A20-OlinuXino-LIME della Olimex attraverso una porta UART2 provvista dei seguenti segnali (RX, TX, RTS, CTS).
Sulla board è installata una distro Linux DEBIAN e la porta mi viene indicizzata come /dev/ttyS1.

Questo è il codice funzionante per la gestione su /dev/ttyUSB0
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>


union
{
char c[4];
float f;
}u;


int main(int argc, char* argv[]) {


    struct termios serial;
    char inBuff[1];
    char *buffer;
    char cPower[] = {0x01,0x04,0x00,0x0C,0x00,0x02,0xB1,0xC8};




    int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);


    if (fd == -1) {
        perror(argv[2]);
        return -1;
    }


    if (tcgetattr(fd, &serial) < 0) {
        perror("Getting configuration");
        return -1;
    }


    //////////////////// Set up Serial Configuration ////////////
    serial.c_iflag = 0;
    serial.c_oflag = 0;
    serial.c_lflag = 0;
    serial.c_cflag = 0;


    serial.c_cc[VMIN] = 0;
    serial.c_cc[VTIME] = 10;


    serial.c_cflag = B2400 | CS8 | PARENB | CREAD & ~PARODD;
    fcntl(fd,F_SETFL,0);
    tcsetattr(fd, TCSANOW, &serial); // Apply configuration
    //////////////////////////////////////////////////////////////




    int rcount;  
    buffer = &inBuff[0];
    int i = 0; int j = 0;

////////////////////////////////         Power               ///////////////////////////////
    i = 0; 
    j = 0;
    memset(&inBuff[0],0,sizeof(inBuff));
    write(fd,cPower,sizeof(cPower));
    buffer = &inBuff[0];
    printf("----------------------------------\n");
    printf("Sent:     ");
    for(j = 0;j < sizeof(cPower);j++)
    {
        printf("%02x ",cPower[j]);
    }
    printf("\r\n");
    printf("Received: " );
        while( (rcount = read(fd,buffer,1)) > 0)
        {
           if (rcount < 0) {
           perror("Read");
           return -1;
        }


        buffer++;
        printf("%02x ",inBuff[i]); i++;
    }
    u.c[3] = inBuff[3];
    u.c[2] = inBuff[4];
    u.c[1] = inBuff[5];
    u.c[0] = inBuff[6];
    printf("\r\n");
    printf("Power:    %4.2f W \r\n\r\n",u.f);
///////////////////////////////////////////////////////////////////////////////////////////


close(fd);
}
Se volessi riadattare lo stesso codice per /dev/ttyS1 come faccio a gestire il segnale RTS ? Devo abilitare qualche flag?