S3C2440串口mark和space校验
先看datasheet:

硬件是支持的,再看驱动:linux-2.6.32.2\drivers\serial\samsung.c中
经过搜索发现是有的,这个可以用了,看看驱动中有没有办法直接判断它!
159 #define CMSPAR 010000000000 /* mark or space (stick) parity */http://lxr.free-electrons.com/source/arch/arm/include/asm/termbits.h?v=2.6.32;a=arm#L159②:
#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <termios.h>#include <errno.h>#include <string.h>main(){ int fd; int i; int len; int n = 0; char b[1]={0x03}; char read_buf[256]; char write_buf[256]; struct termios opt; fd = open("/dev/ttySAC1", O_RDWR | O_NOCTTY); //默认为阻塞读方式 if(fd == -1) { perror("open serial 0\n"); exit(0); } tcgetattr(fd, &opt); cfsetispeed(&opt, B9600); cfsetospeed(&opt, B9600); if(tcsetattr(fd, TCSANOW, &opt) != 0 ) { perror("tcsetattr error"); return -1; } opt.c_cflag &= ~CSIZE; opt.c_cflag |= CS8; opt.c_cflag &= ~CSTOPB; opt.c_cflag &= ~PARENB; opt.c_cflag &= ~INPCK; opt.c_cflag |= (CLOCAL | CREAD); opt.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); opt.c_oflag &= ~OPOST; opt.c_oflag &= ~(ONLCR | OCRNL); //添加的 opt.c_iflag &= ~(ICRNL | INLCR); opt.c_iflag &= ~(IXON | IXOFF | IXANY); //添加的// //=====================================// //space// opt.c_cflag |= PARENB | CS8 | CMSPAR ;// //===================================== //===================================== //mark opt.c_cflag |= PARENB | CS8 | CMSPAR ; opt.c_cflag &= ~PARODD; //===================================== opt.c_cc[VTIME] = 0; opt.c_cc[VMIN] = 0; tcflush(fd, TCIOFLUSH); printf("configure complete\n"); if(tcsetattr(fd, TCSANOW, &opt) != 0) { perror("serial error"); return -1; } printf("start send and receive data\n"); while(1) { n = 0; len = 0; printf("hw\n"); bzero(read_buf, sizeof(read_buf)); //类似于memset bzero(write_buf, sizeof(write_buf)); write(fd,b,sizeof b); usleep(50000); }}