ARM和linux虚拟机串口通信,ARM端打不开串口设备。
我用的MINI2440的板子,接收串口的程序如下:#include<stdio.h>#include<string.h>#include<malloc.h>#includ...
我用的MINI2440的板子,接收串口的程序如下:
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <errno.h>
#include <math.h>
int main()
{
FILE *spfd;
char hd[16];
int retv=0;
//int i,ncount=0;
struct termios oldtio;
//int realdata=0;
spfd=fopen( "/dev/ttySAC0 ","r");
//spfd=open( "/dev/ttySAC0 ",O_RDWR|O_NOCTTY);
if(spfd == NULL)
{
perror( "fopen /dev/ttySAC0");
return -1;
}
printf( "the discriptor of file is %d\n ",fileno(spfd));
tcgetattr(fileno(spfd),&oldtio);
cfmakeraw(&oldtio);
cfsetispeed(&oldtio,B115200);
cfsetospeed(&oldtio,B115200);
tcsetattr(fileno(spfd),TCSANOW,&oldtio);
printf( "ready for receiving data...\n ");
retv=fread(hd,sizeof(char),16,spfd);
/*
if(retv==-1)
{
perror( "read ");
return -1;
}
*/
printf( "the number received is %d\n ",retv);
printf( "/dev/ttySAC0 received message :%s\n ",hd);
fclose(spfd);
return 0;
}
在板子上运行却显示: no such file or directory。
但是在虚拟机里用echo ok > /dev/usb0
在minicom里输入 cat /dev/ttySAC0 却能收到消息。请教各位,怎样才能让ARMread到消息,ARM端的设备符号是什么。
下面是我在linux上运行的写串口的程序:
int main()
{
//int spfd;
FILE *spfd;
char fname[16];
//char *sbuf;
int retv=0;
//int i,ncount=0;
struct termios oldtio;
//int realdata=0;
spfd=fopen( "/dev/ttyUSB0 ","w+");
//spfd=open( "/dev/ttyS0 ",O_RDWR|O_NOCTTY|O_NONBLOCK);
if(spfd == NULL)
{
perror( "fopen /dev/ttyUSB0 ");
return -1;
}
tcgetattr(fileno(spfd),&oldtio);
cfmakeraw(&oldtio);
cfsetispeed(&oldtio,B115200);
cfsetospeed(&oldtio,B115200);
tcsetattr(fileno(spfd),TCSANOW,&oldtio);
printf( "ready for sending data...\n ");
fname[0]= '1';
fname[1]= '2';
fname[2]= '6';
fname[3]= '\0';
//retv=write(spfd,fname,4);
printf("sending : %s \n",fname);
retv = fwrite(fname,sizeof(char),strlen(fname)+1,spfd);
if(retv==-1)
perror( "write ");
printf( "the number sent is %d\n ",retv);
fclose(spfd);
return 0;
} 展开
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>
#include <errno.h>
#include <math.h>
int main()
{
FILE *spfd;
char hd[16];
int retv=0;
//int i,ncount=0;
struct termios oldtio;
//int realdata=0;
spfd=fopen( "/dev/ttySAC0 ","r");
//spfd=open( "/dev/ttySAC0 ",O_RDWR|O_NOCTTY);
if(spfd == NULL)
{
perror( "fopen /dev/ttySAC0");
return -1;
}
printf( "the discriptor of file is %d\n ",fileno(spfd));
tcgetattr(fileno(spfd),&oldtio);
cfmakeraw(&oldtio);
cfsetispeed(&oldtio,B115200);
cfsetospeed(&oldtio,B115200);
tcsetattr(fileno(spfd),TCSANOW,&oldtio);
printf( "ready for receiving data...\n ");
retv=fread(hd,sizeof(char),16,spfd);
/*
if(retv==-1)
{
perror( "read ");
return -1;
}
*/
printf( "the number received is %d\n ",retv);
printf( "/dev/ttySAC0 received message :%s\n ",hd);
fclose(spfd);
return 0;
}
在板子上运行却显示: no such file or directory。
但是在虚拟机里用echo ok > /dev/usb0
在minicom里输入 cat /dev/ttySAC0 却能收到消息。请教各位,怎样才能让ARMread到消息,ARM端的设备符号是什么。
下面是我在linux上运行的写串口的程序:
int main()
{
//int spfd;
FILE *spfd;
char fname[16];
//char *sbuf;
int retv=0;
//int i,ncount=0;
struct termios oldtio;
//int realdata=0;
spfd=fopen( "/dev/ttyUSB0 ","w+");
//spfd=open( "/dev/ttyS0 ",O_RDWR|O_NOCTTY|O_NONBLOCK);
if(spfd == NULL)
{
perror( "fopen /dev/ttyUSB0 ");
return -1;
}
tcgetattr(fileno(spfd),&oldtio);
cfmakeraw(&oldtio);
cfsetispeed(&oldtio,B115200);
cfsetospeed(&oldtio,B115200);
tcsetattr(fileno(spfd),TCSANOW,&oldtio);
printf( "ready for sending data...\n ");
fname[0]= '1';
fname[1]= '2';
fname[2]= '6';
fname[3]= '\0';
//retv=write(spfd,fname,4);
printf("sending : %s \n",fname);
retv = fwrite(fname,sizeof(char),strlen(fname)+1,spfd);
if(retv==-1)
perror( "write ");
printf( "the number sent is %d\n ",retv);
fclose(spfd);
return 0;
} 展开
展开全部
查一下板子上的串口设备有没有:
grep tty /proc/devices
如果有ttyS设备,再看/dev/有没有ttySx,如没有就建立一个:
mknod /dev/ttyS0 c 4 64
grep tty /proc/devices
如果有ttyS设备,再看/dev/有没有ttySx,如没有就建立一个:
mknod /dev/ttyS0 c 4 64
追问
grep tty /proc/devices
后是这个怎么办撒?
4 tty
5 /dev/tty
188 ttyUSB
我按照你的方法新建了一个ttyS0,但是还是no such file or directory。。。郁闷啊
追答
你的板子的设备中没有标准串口设备ttyS0,也没有ttySAC0 。/dev下应该有一个USB串口:/dev/ttyUSB0,就用它。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我对MINI2440不熟,但是由你的描述看来,就是没有这个驱动。
所以,建议你在 ARM 端的 Linux 下的 /dev 查看看有哪些设备符号。
所以,建议你在 ARM 端的 Linux 下的 /dev 查看看有哪些设备符号。
追问
你知道怎么用套接字监听端口的动态么?就是pc机发出一个数据,ARM机子里的套接字程序可以立即反应,并且显示。 我现在要解决的关键问题是这个。 给我满意的答案追加100分
追答
不需要给我分数,虽然我写软件十五年,但是也很久没摸了。
我找到这个资料让你看看,我大概看了一下,里面介绍的还算详尽。你可以叁考。Good Luck
http://wenku.baidu.com/view/669534d333d4b14e8524681a.html
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主,我也在做串口通信,遇到和你一样的问题,在arm端跑的时候打不开串口设备,请问你是怎么解决的?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询