当前位置: 技术问答>linux和unix
关于串口的问题,已经搞了1个星期了,没搞懂
来源: 互联网 发布时间:2017-05-18
本文导语: 最近在学习linux下的串口通信。一个send.c和一个rev.c文件,分别在S3C2440和pc机的linux上运行。send.c(在开发板运行)文件打开"/dev/s3c2410_serial0",然后配置一些波特率等参数,最后进行写操作 res=write(fd,s1,1); 而rev.c...
最近在学习linux下的串口通信。一个send.c和一个rev.c文件,分别在S3C2440和pc机的linux上运行。send.c(在开发板运行)文件打开"/dev/s3c2410_serial0",然后配置一些波特率等参数,最后进行写操作 res=write(fd,s1,1);
而rev.c(在PC机运行)则打开"/dev/ttyS0"文件,然后配置一些波特率等参数,最后进行读操作 res=read(fd,buf,sizeof(buf));
分别运行俩个程序,然后就可以通信了。我想知道为什么?他们打开的不是不同的两个文件吗?在"/dev/ttyS0"怎么可以读出在"/dev/s3c2410_serial0"写进去的东西?那换成"/dev/s3c2410_serial1"行不行?
而rev.c(在PC机运行)则打开"/dev/ttyS0"文件,然后配置一些波特率等参数,最后进行读操作 res=read(fd,buf,sizeof(buf));
分别运行俩个程序,然后就可以通信了。我想知道为什么?他们打开的不是不同的两个文件吗?在"/dev/ttyS0"怎么可以读出在"/dev/s3c2410_serial0"写进去的东西?那换成"/dev/s3c2410_serial1"行不行?
|
串口就是一个简单的物理链路,通信的双方遵循基本的串口协议,如相同的波特率,数据位停止位校验等,当一方向串口写数据时,底层驱动完成数据发送到串口的外发寄存器,硬件上的表现就是串口线上出现高低电平,此电平在通信双方的另一方的串口端口上被检测到后,硬件的高低电平被数字化读入对端的串口硬件寄存器,在驱动的处理下完成数据的转移,数据由内核转到到用户层。在用户层面的表现就是/dev/ttys0,在一方打开此设备文件,做写入动作。在另一方打开此设备做读入动作。