I have enabled UART2 on my Beaglebone Black using the device tree overlay
method. I am able to communicate with minicom but not in C. I used termios
to setup UART2, I have no issues writing data but I do when I try to read.
I don't understand why in minicom reading works and not in my C program.
What could be the reason?
ps- I've attached my code just in case.
Best Regards,
Marco Vazquez
--
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/groups/opt_out.
/*
* Program uses UART1 on the BBB to read/write 8 bit data
*
*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#define BAUD B115200
#define UART "/dev/ttyO1"
int main(){
int fd,k,count;
struct termios oldt,newt;
char rtemp='m',txdata=0;
//Setting variables to 0
memset(&newt,0,sizeof(newt));
fd=open(UART,O_RDWR|O_NOCTTY);
if( fd < 0 ){
printf("--");
perror(UART);
return 3;
}
newt.c_cflag = BAUD|CS8|CLOCAL|CREAD;
newt.c_iflag = IGNPAR;
newt.c_oflag = 0;
newt.c_lflag = ICANON;
tcflush(fd,TCIFLUSH);
if (tcsetattr(fd,TCSANOW,&newt) < 0){
printf("cannot set device\n");
return 4;
}
k=0;
txdata='a';
for(;;){
write(fd,&txdata,1);
usleep(100000);
count = read(fd,&rtemp,1);
usleep(10000);
printf("%c : %d\n",rtemp,count);
txdata++;
if(txdata > 'z'){
txdata='a';
k++;
}
if(k>2)
break;
}
if(tcsetattr(fd,TCSANOW,&oldt)<0){
printf("can't restore old termios\n");
return 5;
}
close(fd);
return 0;
}