Hello!

I'm having some trouble getting serial communication running reliable on my 
BBB. I've used code mostly based on this page 
<http://www.tldp.org/HOWTO/Serial-Programming-HOWTO/x115.html> following 
the non-canonical input section.

It's up and running, and I can echo anything I send back with read, write, 
and shorting the TX and RX pins. The problem I'm having is if I do this 
multiple times in one instance of the program, on the third time my board 
hangs on the read command. Does anyone have any idea where a good place to 
start solving this issue would be?

I've tried using "tcflush(SERIAL_fd,TCIFLUSH);" to clear everything out 
after each read under the assumption that this is some kind of buffer 
overflow, but that doesn't seem to do anything at all. Here are the 
relevant sections of my code, thanks!

void SERIAL_Init(void)
{
/*******************************************************************/
  printf("\tSerial Port Initialization ...");
    SERIAL_fd = open(MODEMDEVICE,O_RDWR | O_NOCTTY /*| O_NDELAY*/);
  if (SERIAL_fd < 0)
    { perror(MODEMDEVICE);
      exit(-1);
    }
  fcntl(SERIAL_fd,F_SETFL,0);
  tcgetattr(SERIAL_fd,&newtio);
  newtio.c_cflag |=  CS8 | CLOCAL | CREAD ;
  cfsetispeed(&newtio,BAUDRATE);
  cfsetospeed(&newtio,BAUDRATE);
  newtio.c_iflag = IGNBRK | IGNPAR;
  newtio.c_oflag = 0;
  newtio.c_lflag = 0;
  newtio.c_cc[VTIME]=0;             /* inter-character timer unused */
  newtio.c_cc[VMIN]=31;             /* blocking read until 18 chars 
received */
  tcflush(SERIAL_fd,TCIFLUSH);
  tcsetattr(SERIAL_fd,TCSANOW,&newtio);
  /****************************************************************/
  printf("Done\n");
  return;
}

...and then in main without all the other code I'm adding this too....

//Read from maestro command, 1a2b is a test command strictly for echoing
unsigned char read_command[2][2] = {
{0x1a,0x2b},
{0x90,0x05},
};
        unsigned char test_data[2] = {0x00,0x00};

...here's where the actual read and write calls happen...

while(readTest == 0)
{
printf("Enter 0 to read from maestro pin, 1 to continue with testing\n");
scanf("%d",&readTest);
write(SERIAL_fd,read_command[0],2);
printf("Wrote values...\n");
num_bytes = read(SERIAL_fd,&test_data,2);
printf("Value read: %x %x\n",test_data[0],test_data[1]);

}

Any help would be greatly appreciated! If there's anything else you need 
from me in order to help just let me know! Thanks!

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to