El programa UART de Raspberry Pi en C que utiliza termios recibe basura (Rx y Tx se conectan directamente)

Tengo un programa simple escrito en C que usa termios para enviar una cadena básica a la Raspberry Pi UART e intenta leer y generar la respuesta. Los pines Rx y Tx en la Raspberry Pi están conectados con un puente, por lo que todo lo que se envíe debe recibirse de inmediato.

A pesar de que el programa dio como resultado que envió y recibió con éxito 5 caracteres para la cadena elegida ("Hola"), intentar imprimir el contenido del búfer solo produce uno o dos caracteres de basura.

El programa:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <termios.h>

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

    struct termios serial;
    char* str = "Hello";
    char buffer[10];

    if (argc == 1) {
        printf("Usage: %s [device]\n\n", argv[0]);
        return -1;
    }

    printf("Opening %s\n", argv[1]);

    int fd = open(argv[1], O_RDWR | O_NOCTTY | O_NDELAY);

    if (fd == -1) {
        perror(argv[1]);
        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] = 0;

    serial.c_cflag = B115200 | CS8 | CREAD;

    tcsetattr(fd, TCSANOW, &serial); // Apply configuration

    // Attempt to send and receive
    printf("Sending: %s\n", str);

    int wcount = write(fd, &str, strlen(str));
    if (wcount < 0) {
        perror("Write");
        return -1;
    }
    else {
        printf("Sent %d characters\n", wcount);
    }

    int rcount = read(fd, &buffer, sizeof(buffer));
    if (rcount < 0) {
        perror("Read");
        return -1;
    }
    else {
        printf("Received %d characters\n", rcount);
    }

    buffer[rcount] = '\0';

    printf("Received: %s\n", buffer);

    close(fd);
}

Salidas:

Opening /dev/ttyAMA0
Sending: Hello
Sent 5 characters
Received 5 characters
Received: [garbage]

No puedo ver ningún problema importante con el código, pero podría estar equivocado. Puedo enviar y recibir caracteres con éxito utilizando PuTTY conectado con la misma configuración, por lo que realmente no puede ser un problema de hardware. Aunque no lo he probado en PuTTY, tratar de conectarme con menos de 115200 baudios con este programa no generará nada.

¿A dónde me voy mal?

Respuestas a la pregunta(1)

Su respuesta a la pregunta