CN103294630A - 一种嵌入式linux系统中实现串口多路复用的方法 - Google Patents
一种嵌入式linux系统中实现串口多路复用的方法 Download PDFInfo
- Publication number
- CN103294630A CN103294630A CN2013101640640A CN201310164064A CN103294630A CN 103294630 A CN103294630 A CN 103294630A CN 2013101640640 A CN2013101640640 A CN 2013101640640A CN 201310164064 A CN201310164064 A CN 201310164064A CN 103294630 A CN103294630 A CN 103294630A
- Authority
- CN
- China
- Prior art keywords
- serial ports
- cpu
- background program
- external application
- external device
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Stored Programmes (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明提供一种嵌入式LINUX系统中实现串口多路复用的方法,所述系统包含一CPU、一切换开关芯片及复数个外部装置;CPU通过复数根GPIO脚与切换开关芯片连接;CPU包含至少一CPU串口,CPU串口与切换开关芯片连接;切换开关芯片包含复数个用于与外部装置一一对应连接的外设串口;CPU串口通过切换开关芯片与任意一所述外设串口连通相接;执行后台程序设置复数个虚拟串口;建立通道切换代理模块及复数个与虚拟串口一一对应的接口封装模块;外部应用程序对通过调用通道切换代理模块对后台程序实现串口通道的申请及切换,完成外部应用程序与外部装置的信息交互。本发明的优点在,实施容易,适用性高且低成本。
Description
技术领域
本发明具体涉及一种嵌入式LINUX系统中实现串口多路复用的方法。
背景技术
在嵌入式系统中很多外设都是通过串口的方式同CPU进行通讯的,但是很多嵌入式处理器(即CPU)含有的串口资源都很少,一般只有一至两个串口。这时候就会出现串口资源不足的问题。现有的解决方案一般是使用更高级的处理器,或者是通过总线外扩专门的串口芯片,如此一来便会增加产品的成本。
发明内容
本发明要解决的技术问题,在于提供一种嵌入式LINUX系统中实现串口多路复用的方法,成本低,适用性高。
本发明是这样实现的:一种嵌入式LINUX系统中实现串口多路复用的方法,所述系统包含一CPU、一切换开关芯片及复数个外部装置;所述CPU通过复数根GPIO脚与所述切换开关芯片连接;所述CPU包含至少一CPU串口,该CPU串口与所述切换开关芯片连接;所述切换开关芯片包含复数个用于与每所述外部装置一一对应连接的外设串口;所述CPU串口通过所述切换开关芯片与任意一所述外设串口连通相接;
所述方法具体包括如下步骤:
步骤10、执行后台程序;通过LINUX伪终端技术,给每所述外设串口虚拟一个与该外设串口对应的虚拟串口;
步骤20、建立一通道切换代理模块及复数个与所述虚拟串口一一对应的接口封装模块;每所述接口封装模块包含与相应所述外部装置对应的通讯协议封包;
步骤30、当所述CPU执行的外部应用程序需要通过所述CPU串口与任意一所述外部装置进行交互时,该外部应用程序通过相应于该外部装置的所述接口封装模块对所述通道切换代理模块发出代表申请通道的请求信息;所述通道切换代理模块将该代表申请通道的请求信息发送给所述后台程序;当所述后台程序判断所述CPU串口与相应的外设串口处于不连通状态时,进入步骤40;当所述后台程序判断所述CPU串口与相应的外设串口处于连通状态时,进入步骤50;
步骤40、所述外部应用程序调用相应所述接口封装模块给所述后台程序发送串口切换指令;所述后台程序依据该串口切换指令对所述CPU串口进行切换;当所述CPU串口处于空闲状态,所述后台程序将所述CPU串口与该串口切换指令所指定的外设串口连通,并返回一个申请成功的标识给所述外部应用程序,进入步骤50;当所述CPU串口处于非空闲状态,所述后台程序返回一个申请拒绝的标识给所述外部应用程序,返回步骤30;
步骤50、所述外部应用程序调用相应所述接口封装模块发送交互数据;所述后台程序接收到该交互数据后,将该交互数据写入所述CPU串口到达相应所述外部装置;所述外部装置将相应于所述交互数据所发送的返回数据通过所述CPU串口到达所述后台程序,所述后台程序再将该返回数据写入相应所述接口封装模块发送至所述外部应用程序;
步骤60、完成所述外部应用程序与所述外部装置的信息交互后,所述外部应用程序调用所述接口封装模块发送代表释放通道的请求信息给所述后台程序,等待下次所述外部应用程序出现对任意一所述外部装置进行交互的需求,重新进入步骤30。
本发明具有如下优点:CPU串口通过切换开关芯片与复数个外部装置连接,且CPU通过复数个接口封装模块、通道切换代理模、后台程序使外部应用程序能灵活地切换对外部装置的连通来相互传输数据,结构简单,灵活性及适用性高,且成本低。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1为本发明一种嵌入式LINUX系统中实现串口多路复用的方法中的电路结构示意图。
图2为本发明一种嵌入式LINUX系统中实现串口多路复用的方法的执行流程图。
图3为本发明一种嵌入式LINUX系统中实现串口多路复用的方法的执行框图。
具体实施方式
请参阅图1至图3所示,一种嵌入式LINUX系统中实现串口多路复用的方法,所述系统100包含一CPU1、一切换开关芯片2及复数个外部装置3;所述CPU1通过复数根GPIO脚与所述切换开关芯片2连接;所述CPU1包含至少一CPU串口11,该CPU串口11与所述切换开关芯片2连接;所述切换开关芯片2包含复数个用于与每所述外部装置3一一对应连接的外设串口21;所述CPU串口11通过所述切换开关芯片2与任意一所述外设串口21连通相接;
所述方法具体包括如下步骤:
步骤10、执行后台程序12;通过LINUX伪终端技术,给每所述外设串口21虚拟一个与该外设串口21对应的虚拟串口;
步骤20、建立一通道切换代理模块13及复数个与所述虚拟串口一一对应的接口封装模块14;每所述接口封装模块14包含与相应所述外部装置3对应的通讯协议封包;
步骤30、当所述CPU1执行的外部应用程序15需要通过所述CPU串口11与任意一所述外部装置3进行交互时,该外部应用程序15通过相应于该外部装置3的所述接口封装模块14对所述通道切换代理模块发13出代表申请通道的请求信息;所述通道切换代理模块13将该代表申请通道的请求信息发送给所述后台程序12;当所述后台程序12判断所述CPU串口11与相应的外设串口21处于不连通状态时,进入步骤40;当所述后台程序12判断所述CPU串口11与相应的外设串口21处于连通状态时,进入步骤50;
步骤40、所述外部应用程序15调用相应所述接口封装模块14,通过所述通道切换代理模块13给所述后台程序12发送串口切换指令;所述后台程序12依据该串口切换指令对所述CPU串口11进行切换(即通过切换开关芯片2将CPU串口11与依据该串口切换指令所指定的外设串口21连通);当所述CPU串口11处于空闲状态(即CPU串口11未与任意一外设串口21连通),所述后台程序12将所述CPU串口11与该串口切换指令所指定的外设串口21连通,并返回一个申请成功的标识给所述外部应用程序15,进入步骤50;当所述CPU串口11处于非空闲状态(即CPU串口11与任意一个非依据该串口切换指令所指定的外设串口21连通),所述后台程序12返回一个申请拒绝的标识给所述外部应用程序15,返回步骤30;
步骤50、所述外部应用程序15调用相应所述接口封装模块14发送交互数据;所述后台程序12接收到该交互数据后,将该交互数据写入所述CPU串口11到达相应所述外部装置3;所述外部装置3将相应于所述交互数据所发送的返回数据通过所述CPU串口11到达所述后台程序12,所述后台程序12再将该返回数据写入相应所述接口封装模块14发送至所述外部应用程序15;
步骤60、完成所述外部应用程序15与所述外部装置3的信息交互后,所述外部应用程序15调用所述接口封装模块14发送代表释放通道的请求信息给所述后台程序12,等待下次所述外部应用程序15出现对任意一所述外部装置3进行交互的需求,重新进入步骤30;其中,外部应用程序15可通过某种用于进程间通讯的IPC机制把代表申请通道或释放通道的请求信息传递到后台程序12。
本发明在应用时,通过一个多路硬件切换开关芯片把相关串口外设连接到CPU的某一个串口;并且通过一个后台程序模块,为连接的每一个外设串口虚拟一个虚拟串口设备(如:pty设备),后台程序负责物理串口和虚拟串口之间的数据分发和投递。同时负责物理串口(即CPU串口)使用的请求和释放操作。后台程序根据CPU所执行的外部应用程序所发出的请求(即请求信息)来确定把物理串口切换到那个外设串口(即将CPU串口切换到对应的外设串口),同时确定从物理串口接收到的数据投递到那个虚拟串口;外部应用程序通过这些串口(包含虚拟或物理串口)向外部装置进行数据交互,而不是直接通过共享的物理串口进行交互。外部应用程序在发起一个交互操作时要先向后台程序发起通道切换申请,得到成功应答后(即外部应用程序得到后台程序返回一个申请成功的标识)才能开始交互,交互结束时也要向后台发起一个释放的请求(即外部应用程序发送代表释放通道的请求信息给所述后台程序),把共享的物理串口标记为空闲状态。
其中,后台程序主要实现以下功能:
1.)使用LINUX伪终端技术给每个外设串口外设都虚拟出一个对应的虚拟串口(PTY设备)。设备名可以根据具体的设备类型做命名,比如串口打印机/dev/printer,智能IC卡则为/dev/icc0,/dev/icc1,条码设备为/dev/barcode等等。
2.)通过CPU的GPIO脚来控制切换开关芯片,实现CPU串口(物理串口)的切换申请和释放操作。比如现在要申请同连接在外设串口0上的设备进行交互,那么通过GPIO来控制切换开关芯片把CPU串口导通(切换)到外设串口0去。这样CPU串口发送的数据就会送到外设串口0去。同样外设串口0上接收到的数据也会送到CPU串口的接收端。
3.)实现通道切换申请和释放的服务。外部应用程序可通过某种IPC机制(进程间通讯)把申请和释放的请求消息传递到此程序。如果目前CPU串口处于空闲状态,那么会返回一个申请成功的标识给外部应用程序,同时控制切换开关芯片把CPU串口切换到对应的通道上去。如果CPU串口处于非空闲状态,则返回一个申请拒绝的标识给外部应用程序。
4.)根据通道的切换情况负责在虚拟串口和CPU串口之间进行数据转发与投递。比如目前CPU串口被切换到外设串口0上去,那么CPU串口接收到的数据会被投递到对应的虚拟串口PTY0的设备上去,同时从PTY0虚拟串口上接收的数据会被投递给CPU串口。
通道切换代理模块主要实现以下功能:通道切换代理模块提供通道切换请求和释放的接口。供其它程序模块(如:接口封装模块、外部应用程序)使用。其它模块可直接通过函数调用的方式或IPC的机制来访问此模块提供的接口。
接口封装模块主要实现以下功能:实现设备的打开(打开物理串口或虚拟串口)或关闭,以及与外部装置进行交互的串口通讯协议的封装,供其它应用模块(如:外部应用程序)使用。提供的每个接口中在开始通过串口与外设进行交互执行时,都会通过接口封装模块来申请和释放通道。申请成功了才会执行会话操作。最终实现外部应用程序通过接口封装模块所提供的接口同外设串口进行交互。
后台程序和通道切换代理模块有很强的可扩展性,能够灵活的适应各种需求的变更。例如:有个串口条码设备,它对应的虚拟串口的设备是/dev/barcode。之后由于硬件的变更,给此设备分配了一个单独的物理串口而不在与其它设备共享一个物理串口。那么只需要把新分配的这个物理串口也命名为/dev/barcode。同时在后台程序或通道切换代理模块中接收到对应的接口封装模块申请或释放通道的请求时,直接返回成功便可以。外部应用程序和接口封装模块不需要做任何的改动。这样便可实现硬件变更对应用程序的透明性,即使是在硬件资源不足的情况下。能够适应各种需求变更。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (1)
1.一种嵌入式LINUX系统中实现串口多路复用的方法,其特征在于:所述系统包含一CPU、一切换开关芯片及复数个外部装置;所述CPU通过复数根GPIO脚与所述切换开关芯片连接;所述CPU包含至少一CPU串口,该CPU串口与所述切换开关芯片连接;所述切换开关芯片包含复数个用于与每所述外部装置一一对应连接的外设串口;所述CPU串口通过所述切换开关芯片与任意一所述外设串口连接;
所述方法具体包括如下步骤:
步骤10、执行后台程序;通过LINUX伪终端技术,给每所述外设串口虚拟一个与该外设串口对应的虚拟串口;
步骤20、建立一通道切换代理模块及复数个与所述虚拟串口一一对应的接口封装模块;每所述接口封装模块包含与相应所述外部装置对应的通讯协议封包;
步骤30、当所述CPU执行的外部应用程序需要通过所述CPU串口与任意一所述外部装置进行交互时,该外部应用程序通过相应于该外部装置的所述接口封装模块对所述通道切换代理模块发出代表申请通道的请求信息;所述通道切换代理模块将该代表申请通道的请求信息发送给所述后台程序;当所述后台程序判断所述CPU串口与相应的外设串口处于不连通状态时,进入步骤40;当所述后台程序判断所述CPU串口与相应的外设串口处于连通状态时,进入步骤50;
步骤40、所述外部应用程序调用相应所述接口封装模块给所述后台程序发送串口切换指令;所述后台程序依据该串口切换指令对所述CPU串口进行切换;当所述CPU串口处于空闲状态,所述后台程序将所述CPU串口与该串口切换指令所指定的外设串口连通,并返回一个申请成功的标识给所述外部应用程序,进入步骤50;当所述CPU串口处于非空闲状态,所述后台程序返回一个申请拒绝的标识给所述外部应用程序,返回步骤30;
步骤50、所述外部应用程序调用相应所述接口封装模块发送交互数据;所述后台程序接收到该交互数据后,将该交互数据写入所述CPU串口到达相应所述外部装置;所述外部装置将相应于所述交互数据所发送的返回数据通过所述CPU串口到达所述后台程序,所述后台程序再将该返回数据写入相应所述接口封装模块发送至所述外部应用程序;
步骤60、完成所述外部应用程序与所述外部装置的信息交互后,所述外部应用程序调用所述接口封装模块发送代表释放通道的请求信息给所述后台程序,等待下次所述外部应用程序出现对任意一所述外部装置进行交互的需求,重新进入步骤30。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310164064.0A CN103294630B (zh) | 2013-05-07 | 2013-05-07 | 一种嵌入式linux系统中实现串口多路复用的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310164064.0A CN103294630B (zh) | 2013-05-07 | 2013-05-07 | 一种嵌入式linux系统中实现串口多路复用的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103294630A true CN103294630A (zh) | 2013-09-11 |
CN103294630B CN103294630B (zh) | 2015-11-04 |
Family
ID=49095535
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310164064.0A Active CN103294630B (zh) | 2013-05-07 | 2013-05-07 | 一种嵌入式linux系统中实现串口多路复用的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103294630B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104619042A (zh) * | 2013-11-04 | 2015-05-13 | 福建鑫诺通讯技术有限公司 | 一种在linux内核中实现gsm0710协议的方法及装置 |
CN105610666A (zh) * | 2015-12-18 | 2016-05-25 | 曙光信息产业(北京)有限公司 | 一种基于linux操作系统的接口扩展方法和装置 |
CN106021136A (zh) * | 2016-05-09 | 2016-10-12 | 广州广电运通金融电子股份有限公司 | 一种基于Linux或Unix内核操作系统的串口映射方法及装置 |
CN107393594A (zh) * | 2017-07-27 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种多核固态硬盘调试方法及系统 |
CN107764313A (zh) * | 2018-01-24 | 2018-03-06 | 深圳航天东方红海特卫星有限公司 | 一种微小卫星星上部件智能测试系统 |
CN109766291A (zh) * | 2018-12-06 | 2019-05-17 | 珠海格力电器股份有限公司 | 一种i/o端口的自动配置方法及系统 |
CN109766299A (zh) * | 2019-02-21 | 2019-05-17 | 苏州佳世达电通有限公司 | 一种电子装置及其数据传输方法 |
CN111857750A (zh) * | 2020-07-09 | 2020-10-30 | 广芯微电子(广州)股份有限公司 | 一种多通道烧录器及多通道烧录方法 |
CN112306915A (zh) * | 2020-10-26 | 2021-02-02 | 英业达科技有限公司 | 通信接口控制系统及其方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050005044A1 (en) * | 2003-07-02 | 2005-01-06 | Ling-Yi Liu | Storage virtualization computer system and external controller therefor |
CN101247600A (zh) * | 2008-02-26 | 2008-08-20 | 中兴通讯股份有限公司 | 一种多模手机系统中实现多串口复用的装置 |
CN101621440A (zh) * | 2009-05-22 | 2010-01-06 | 浙江天正电气股份有限公司 | 远程多路串口通讯映射系统 |
CN102279826A (zh) * | 2010-06-09 | 2011-12-14 | 马苗苗 | 一种串口复用装置 |
-
2013
- 2013-05-07 CN CN201310164064.0A patent/CN103294630B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050005044A1 (en) * | 2003-07-02 | 2005-01-06 | Ling-Yi Liu | Storage virtualization computer system and external controller therefor |
CN101247600A (zh) * | 2008-02-26 | 2008-08-20 | 中兴通讯股份有限公司 | 一种多模手机系统中实现多串口复用的装置 |
CN101621440A (zh) * | 2009-05-22 | 2010-01-06 | 浙江天正电气股份有限公司 | 远程多路串口通讯映射系统 |
CN102279826A (zh) * | 2010-06-09 | 2011-12-14 | 马苗苗 | 一种串口复用装置 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104619042A (zh) * | 2013-11-04 | 2015-05-13 | 福建鑫诺通讯技术有限公司 | 一种在linux内核中实现gsm0710协议的方法及装置 |
CN105610666A (zh) * | 2015-12-18 | 2016-05-25 | 曙光信息产业(北京)有限公司 | 一种基于linux操作系统的接口扩展方法和装置 |
CN106021136A (zh) * | 2016-05-09 | 2016-10-12 | 广州广电运通金融电子股份有限公司 | 一种基于Linux或Unix内核操作系统的串口映射方法及装置 |
CN106021136B (zh) * | 2016-05-09 | 2019-01-01 | 广州广电运通金融电子股份有限公司 | 一种基于Linux或Unix内核操作系统的串口映射方法及装置 |
CN107393594A (zh) * | 2017-07-27 | 2017-11-24 | 郑州云海信息技术有限公司 | 一种多核固态硬盘调试方法及系统 |
CN107764313A (zh) * | 2018-01-24 | 2018-03-06 | 深圳航天东方红海特卫星有限公司 | 一种微小卫星星上部件智能测试系统 |
CN109766291A (zh) * | 2018-12-06 | 2019-05-17 | 珠海格力电器股份有限公司 | 一种i/o端口的自动配置方法及系统 |
US11507043B2 (en) | 2018-12-06 | 2022-11-22 | Gree Electric Appliances, Inc. Of Zhuhai | Method and system for automatically configuring I/O port |
CN109766299A (zh) * | 2019-02-21 | 2019-05-17 | 苏州佳世达电通有限公司 | 一种电子装置及其数据传输方法 |
CN111857750A (zh) * | 2020-07-09 | 2020-10-30 | 广芯微电子(广州)股份有限公司 | 一种多通道烧录器及多通道烧录方法 |
CN112306915A (zh) * | 2020-10-26 | 2021-02-02 | 英业达科技有限公司 | 通信接口控制系统及其方法 |
Also Published As
Publication number | Publication date |
---|---|
CN103294630B (zh) | 2015-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103294630A (zh) | 一种嵌入式linux系统中实现串口多路复用的方法 | |
CN101484873B (zh) | 接口的同时运行 | |
CN102195845B (zh) | 一种实现主控板主备切换的方法、装置和设备 | |
CN105518620A (zh) | 一种网卡配置方法及资源管理中心 | |
CN108184208B (zh) | 一种宽带集群系统中的通信方法及核心网设备 | |
EP4087270A1 (en) | Onu management method, apparatus, device, and system, and computer readable storage medium | |
CN111666242A (zh) | 一种基于飞腾平台lpc总线的多路通信系统 | |
Zami | Contention simulation within dynamic, colorless and unidirectional/multidirectional optical cross-connects | |
CN109032754A (zh) | 提高通信路径可靠性的方法和设备 | |
CN111200653B (zh) | 多平台通讯方法、多平台通讯装置及中间服务器 | |
CN102201959A (zh) | 基板管理控制器的网络接口系统 | |
CN107301100A (zh) | 一种停车场远程控制方法、装置和系统 | |
CN102004716A (zh) | 实现设备共享的系统及其方法 | |
CN106970844A (zh) | 一种双Android系统的MTP管理方法 | |
CN111741175A (zh) | 呼叫中心系统、信号传递方法、装置、服务器及介质 | |
CN110401939A (zh) | 一种低功耗蓝牙控制器链路层装置 | |
CN102880583A (zh) | 一种多路服务器动态链路配置装置和方法 | |
CN111489279A (zh) | Gpu加速优化方法、装置及计算机存储介质 | |
CN113110950B (zh) | 处理器及通信方法、存储介质及计算设备 | |
CN104954065A (zh) | 一种无源光网络系统及通信方法 | |
CN102118305B (zh) | 一种通信设备的业务板及包含该业务板的通信设备 | |
CN214480671U (zh) | 一种基于spi通讯的一对多通讯电路 | |
US8402475B2 (en) | SCA-based system and method of connecting components to each other | |
CN100393055C (zh) | 自动保护倒换协议测试方法 | |
CN113900985A (zh) | Io和spi复用芯片、复用辅助芯片和数据交互方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |