您的位置:首页 > 运维架构 > Linux

Linux串口编程-5-space校验

2012-10-12 00:37 633 查看
先说经过试验还不行的方案:

①:Linux串口通讯(mark, space校验方式的实现) http://hi.baidu.com/czyt_/item/fcaaea0ce57910c074cd3c00

②:Linux操作系统下微机与单片机组成的多机通讯系统 http://wenku.baidu.com/view/35e48a97dd88d0d233d46a16.html

③: Linux串口通讯(mark, space校验方式的实现)http://blog.csdn.net/diegotj/article/details/5455651

接到space校验的帖子:


多机通信问题 http://topic.csdn.net/u/20070418/07/DFD15B4D-47B7-48EF-BBED-91088EBD59B7.html

我目前在做一个ARM处理器(S3C4510)和多个单片机(AT2051)通过串口通信的程序,多机通信先发地址后发数据,发地址必须使第9

位信息为1,发数据必须使第9位为0;

顺便说一下:S3C4510(uClinux)和AT2051通信是可以建立起来的.

发地址前:

struct termios opt;

opt.c_cflag = BAUDRATE | CS8 | PARENB | PARODD | CMSPAR | CLOCAL | CREAD;

opt.c_iflag = (INPCK | IGNBRK | IGNPAR);

发数据前:

struct termios opt;

opt.c_cflag = BAUDRATE | CS8 | PARENB | CMSPAR | CLOCAL | CREAD;

opt.c_cflag &= ~PARODD;

我目前是想做一个简单的测试程序:

我在发地址前:

设置好BAUDRATE,数据位8位,奇校验,一个停止位

发数据前:

设置好BAUDRATE,数据位8位,偶校验,一个停止位

可是通讯建立不起来,不知道该如何做,请高人指点!谢谢!


linux下的RS232串口通讯 http://www.cnblogs.com/xiaoxia/archive/2011/07/01/2095448.html

option.c_cflag |= PARENB; /*设置校验位使能*/
  option.c_cflag |= PARODD; /*设置为奇校验*/
  //option.c_cflag &= ~PARODD; /*设置为偶校验*/
  
  //以下设置仅限于linux系统
  option.c_cflag |= CMSPAR;  
  /*设置space校验,奇偶校验位恒为0*/
  //option.c_cflag &= ~PARODD;或者是直接没有设置 
/*设置mark校验,奇偶校验位恒为1*/
 //option.c_cflag |= PARODD;




linux下串口用mark和space的方式编程问题! http://topic.csdn.net/u/20090709/16/f0891784-6dba-4b50-8e3e-8ecda5510631.html?seed=1707433176&r=79869939#r_79869939

小弟最近做了一个项目,操作系统是linux,平台为arm,串口通信要求使用8bits数据、1bit mark/space、1bit停止位,

当传模块地址是mark置1,当传数据时,mark置0。我查到了串口属性设置为:

options.c_cflag |= PARENB | CS8 | CMSPAR |PARODD

通信协议要求一个数据包为 addr+data addr为1个byte,data为3个bytes,我程序中是这样实现的。



options.c_cflag |= PARENB | CS8 | CMSPAR |PARODD;

set_port(options);

send_data(&addr);

options.c_cflag |= PARENB | CS8 | CMSPAR ;

set_port(options);

send_data(&data);



recv_data(buf);

我这样提示发送数据成功,但总接收不到数据,请用过这样方式的大侠给点提示,谢谢了!


谁教我写串口收发数据的程序啊 http://topic.csdn.net/t/20041019/14/3470112.html

case   'S ': 
case   's ':     /*as   no   parity*/ 
options.c_cflag   &=   ~PARENB; 
options.c_cflag   &=   ~CSTOPB;



串口通讯问题~~~请教原因 http://topic.csdn.net/t/20061115/16/5160305.html

case   'S ': 
case   's ':     /*as   no   parity*/ 
options.c_cflag   &=   ~PARENB; 
options.c_cflag   &=   ~CSTOPB;


Linux 串口编程 http://www.cnblogs.com/lovemo1314/archive/2010/10/29/1864327.html

http://data.eefocus.com/myspace/0/131/bbs/1185380147/eef8932e.pdf

[基础|理论|实验]linux下的RS232串口通讯 http://www.cnblogs.com/xiaoxia/archive/2011/07/01/2095448.html

这个把问题解决了!!!!!

参考了一下串口的硬件驱动程序:

Stick even parity parity enable parity

- - 0 无校验

0 0 1 奇校验

0 1 1 奇校验

1 0 1 Mark

1 1 1 space

得到如下的校验设置方式:

#define CMSPAR 010000000000

本句使能了stick parity的校验可行性

Mark校验

options.c_cflag |= PARENB |
CS8 | CMSPAR |PARODD;

Space校验

options.c_cflag |= PARENB |
CS8 | CMSPAR;

http://www.360doc.com/content/12/0412/16/9484405_203042268.shtml


lidaibin:
rs422在linux下跟我开了个玩笑

[FLASH]


嵌入式系统与应用精品课程 8.1.4 实验预备知识 有C 语言基础。



====================================================================================================================================

2012年10月12日17:44:50:

在多机通信中根本用不到奇校验和偶校验,所以open时就直接把CMSPAR设置上去,这样之后的朦胧中的

奇校验====》mark校验

偶校验====》space校验

这么说来,这个CMSPAR值是多少也很重要了,根据硬件平台的不同,他的值也会有所不同,这个要看CPU手册。

====================================================================================================================================

2012年10月12日17:48:06:

如果这么相关,那么在虚拟机中的Linux会不会受此影响呢,看minicom有mark,space功能,看看它的能否使用起来!



9600 8S1 还能进中断!这 又进一步说明,虚拟机惹的祸!!!
这个说法在 CSDN 论坛找到过,不过没在意!!!
虚拟机中不能进行mark space校验,这是我暂时的定论!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: