0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英创信息技术串口校验位的Mark/Space设置在英创主板中的应用

英创信息技术 来源:英创信息技术 作者:英创信息技术 2020-02-04 11:44 次阅读

英创Linux主板可以通过RS485总线挂载多个单片机组成多机系统,如图1所示,其中Linux主机作为上位机,单片机作为从机,485总线最多能挂载256个从机。系统工作的时候,每一个从机都有自己的地址(从机号),上位机首先发送从机的地址,再发送命令/数据,其发送的命令/数据可以被每一个从机接收,从机收到命令和数据后,如果地址和自己的相符,就进行应答。

图1 Linux主机与单片机组成的多机系统

图2 多机通信帧格式

单片机每收到一个字节都要产生中断,在一般情况下,当Linux主机向从机1发送数据的时候,从机2、3在每一个字节都要产生中断,不论传输的是地址还是数据,也不论是不是跟自己通信。当从机设备比较多、传输数据比较频繁的时候,单片机的负载将大大增加,影响正常的工作。

比较通用的解决办法是充分利用串口固定校验位(Parity Stick)的功能,使用Mark/Space校验位区分地址和数据,如图2所示的多机通信帧中,发送和接收地址字节时,可以使用Mark校验(也可以使用Space校验),发送和接收数据字节时,使用Space校验(也可以使用Mark校验)。系统初始化的时候,所有的从机都设置成Mark校验,进入等待状态。主机发送第一个字节(addr = 从机1)的时候使用Mark校验。这时,所有的从机都收到了addr,并通过校验产生中断。在从机的中断程序中,如果addr和自己的地址相符,就将从机设置成Space校验(从机1),否则,继续保持Mark校验(从机2、3)。紧接着,主机发送data1、data2的时候使用Space校验,这时,由于从机2、3不能通过Space校验,将不会产生中断,只有从机1会产生中断,应答主机。这样就大大降低了处于等待状态的从机2、3的中断负载。

对Linux目前的串口驱动程序而言,在逻辑上应用程序可以先设置一次Mark校验位,write一个地址字节,再设置一次Space校验,接着write多个数据字节来实现多机通信。但是,两次调用write之间可能会有较大的时间间隙,导致单片机接收数据超时,多机通信失败。为此,英创公司专门修改了Linux串口驱动程序,在不增加新的API调用的前提下,只需要在应用程序中连续两次设置校验位即可使串口驱动进入ADDR_DATA_MODE模式,支持Mark/Space多机通信,并且将同一帧数据的addr、data连续发送出去(应用程序只调用一次write函数)。应用程序具体步骤如下(为方便校验位设置,编写了一个校验位设置函数):

1、校验位设置函数

intCSerial::SetParity(intparity)

{

structtermios new_opt;

intstatus;

unsignedintold_ccflag;

tcgetattr(m_fd,&new_opt);

old_ccflag = new_opt.c_cflag;

new_opt.c_cflag &= ~PARODD ;

new_opt.c_cflag &= ~CMSPAR ;

if(parity == 0)

{

//使用Space校验 标记数据

new_opt.c_cflag |= PARENB | CS8 | CMSPAR;

}

elseif(parity == 1)

{

//使用Mark校验 标记地址

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

}

elseif(parity == 2)

{ //使用偶校验

new_opt.c_cflag |= PARENB; /* Enable parity */

new_opt.c_cflag &= ~PARODD; /* 转换为偶效验*/

}

elseif(parity == 3)

{

//使用奇校验

new_opt.c_cflag |= (PARODD | PARENB); /* 设置为奇效验*/

}

else

{

new_opt.c_cflag = old_ccflag;

}

status = tcsetattr(m_fd,TCSANOW,&new_opt);

returnstatus;

}

2、主程序两次调用校验位设置函数,进入ADDR_DATA_MODE模式

Buf[0] = 0x39;

Buf[1] = 0xC1;

Buf[2] = 0x80;

Buf[3] = 0x1;

Buf[4] = 0x0;

//连续两次设置校验位,进入ADDR_DATA_MODE.

//先设置数据使用的校验位,后设置地址使用的校验位

m_Serial.SetParity(0); //数据使用space校验

m_Serial.SetParity(1); //地址使用mark校验

sleep(1);

m_Serial.WritePort( Buf, 5 );

如上程序将5个字节一起发送出去,其中Buf[0]作为地址,使用mark校验,Buf[1-4]作为数据,使用space校验,波形如图3所示。所有从机收到地址后,都通过校验位,产生中断,但仅地址为0x39的从机会将自己的校验位设置为0。之后Buf[1-4]仅有从机0x39能够产生接收中断,应答主机。

发送完这5个字节后,就退出了ADDR_DATA_MODE模式,继续串口发送的所有字节都使用space校验(先设置的校验位)。如果需要其他校验方式,可以调用SetParity()进行设置。

图3 ADDR_DATA_MODE发送波形图

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11222

    浏览量

    208893
  • 嵌入式主板
    +关注

    关注

    7

    文章

    6085

    浏览量

    35206
收藏 人收藏

    评论

    相关推荐

    国产工控主板,信产业发展新引擎

    在当今科技飞速发展的时代,信产业正成为国家战略的重要支撑。而我们的国产工控主板,以其卓越的性能和可靠的品质,为信产业的发展注入强大动力。国产工控主板
    的头像 发表于 11-06 10:29 145次阅读

    中科达荣获2024年软件和信息技术服务优秀企业

    近日,由中国电子信息行业联合会主办的第二十六届中国国际软件博览会(简称“软博会”)天津国家会展中心成功举行。在此次盛会上,中国电子信息行业联合会发布了“2024年软件和信息技术服务企
    的头像 发表于 10-30 11:44 378次阅读

    锐恩科技引领微控制器MCU技术创新,赋能多元化应用!

    ,成为国家高新技术半导体企业的佼佼者。锐恩科技不仅致力于为客户提供高可靠性、高性能、高性价比的一站式半导体芯片供应服务,更在8和32MCU市场不断创新,推动
    发表于 09-29 13:40

    锐恩科技,以实力打造国产单片机替代品牌!

    性能已得到了市场的肯定。锐恩科技在技术上的优势是其脱颖而出的关键。他们拥有一支由行业精英组成的研发团队,不断单片机领域进行技术探索和突破。以下是
    发表于 09-25 09:49

    国产化背景下的工控主板发展现状

    ,是信息技术应用创新产业的简称,于2016年“信工委会”(信息技术应用创新工作委员会)提出,目的就是要推动我们国内软硬件关键技术的研发
    的头像 发表于 09-21 16:15 327次阅读

    软国际信服务助力大连信产业发展

    为进一步激发大连本地信产业生态的活力与潜力,搭建一个高效、开放的交流平台。由大连软件行业协会携手大连市信息技术应用创新综合服务中心主办,软国际协办的,2024年大连市信息技术应用创
    的头像 发表于 08-27 16:49 800次阅读

    IPv6 产业的发展历程

    随着信息技术的飞速发展,信产业作为国家信息安全和科技自主创新的重要领域,正日益受到广泛关注。产业的发展过程
    的头像 发表于 06-17 14:46 312次阅读
    IPv6 <b class='flag-5'>在</b>信<b class='flag-5'>创</b>产业<b class='flag-5'>中</b>的发展历程

    通过大小鼠无血压测量实验明白了无血压测量技术的重要性

    血压测量技术的重要性:无血压测量技术是一种非侵入性的测量方法,可以避免对动物造成不必要的伤害。医学研究
    发表于 04-22 09:40

    泰斯特承办“联企投汇·周三会”,协同打造智能网联新高地

    2024年3月27日,由市委统战部、市工商联主办、武汉市高新技术产业协会协办的“联企投汇·周三会”第十三期活动武汉英泰斯特电子技术有限公司(以下简称“
    的头像 发表于 03-29 09:50 460次阅读

    股份板成功上市

    山东软件商用中间件股份有限公司(股票简称“股份”)正式登陆科板,彰显其基础软件中间件
    的头像 发表于 03-15 17:58 749次阅读

    股份今日登陆科

    山东软件商用中间件股份有限公司(以下简称“股份”)近日在上海证券交易所科板成功上市,标志着这家国内知名的民营软件和
    的头像 发表于 03-13 14:19 494次阅读

    股份在上交所科板上市

    山东软件商用中间件股份有限公司(以下简称“股份”)近日在上海证券交易所科板成功上市,标志着这家国内知名的民营软件和
    的头像 发表于 03-13 14:02 492次阅读

    如何得到串口接收到字节的校验位

    从机的串口配置为: 9600, 8 , 奇校验,1个停止 当主机用UART3接收到从机发来的一个字节时,我怎么读到这个字节对应的校验位的值呢?
    发表于 01-17 07:39

    PCB企业力三期项目顺利投产

    近日,PCB企业四川力电子科技股份有限公司三期(载板厂和特种板厂)顺利投产。通过这个项目,力公司成功地将业务范围从单一的普通通孔多层板扩展到了高端的IC载板、MiniLED基板
    的头像 发表于 01-15 14:20 568次阅读

    AD2S1205 SO输出的校验位是对哪部分数据进行校验

    Hi, SO输出的校验位是对哪部分数据进行校验; 看手册应该是对数据部分校验即DB15-DB4; 但是通过这样校验出来的数据,校验位bit0
    发表于 12-05 07:27