关于Linux下如何对串口进行测试
一、简介
在实际开发中,有时会需要我们对串口执行一系列操作。但是在展开实际的软件开发前,需要我们首先确保硬件是完好的,以避免出现问题,无法定位。本文主要从软件开发人员角度,介绍在Linux系统中,如何对串口进行测试,以确定硬件是否完好。二、测试过程
针对稍大一点的项目,一般都会采用分层开发的模式,每个开发人员负责某一部分的实现。类似于一条数据流,每个人可能既是生产者,也是消费者。倘若某个点断开,后续都有可能收到影响。
基于此,本次的测试采取了一个自下向上,层层追溯的过程。
1. 对硬件进行基本测试
在上电测试之前,需要我们首先确认串口的电平特性,具体是RS232,RS485,以及TTL中的哪一种,关于三者的异同,详见:【E课堂】串口、COM口、TTL、RS-232、RS-485区别详解。不同电平混接的话,有可能会导致硬件损坏。
2. 确定资源是否分配
对串口的直接操作,实际上是由驱动层完成的。因此,我们在第一步需要做的就是,确保驱动层已经获取到相应资源,并保证驱动已经成功加载。
(注:对于驱动层的实现还缺少一定理解,后续需要补充)
3. 尝试对串口进行操作
针对串口的操作,已有很多现成的工具,并不需要我们再浪费时间去编写Demo,去执行open,read,write等一些列操作。以下是一些常用工具:
- minicom
- microcom
- jpnevulator
其中,minicom是在PC中较常用的工具,关于其安装以及使用方法,详见:linux超级终端minicom的使用方法。
minicom功能完善,且有类图形界面支持,但由于该工具要依赖于libncureses
等库,因此,很多资源受限的嵌入式平台并不提供该工具。而是使用busybox
中集成的microcom,该工具的功能单一,且根据工作经验,多数平台都会集成该工具(关于该工具的使用方式,详见:microcom用法(嵌入式平台串口工具))。
不怕一万就怕万一,倘若真遇到连microcom都无法使用的情况,那么jpnevulator也不失为一个好的选择。实际的使用中,我们执行以下命令,就可以实现对指定串口的检测:
jpnevulator --ascii --timing-print --tty /dev/ttyS0--read
其中--tty
选项,后接我们需要操作的串口。当串口有接收到数据后,会有如下打印:
# ./jpnevulator --ascii --timing-print --tty /dev/ttyS0 --read
2019-04-12 03:13:36.279797:
31 31 31 0A 111.
该工具作为开源软件,你可以点击这里,获取代码,并学习基本的使用方法。
以上提到的工具,除了可以帮我们确认串口的工作状态。对于手中缺少必要文档的开发平台,我们也可以借助这些工具,来确认串口节点与硬件资源的对应关系(有时,我们可能无法确认串口具体对应哪几个引脚,或是无法区分TX
,RX
)。
三、小结
上文提到的测试方法,看似只是解决了日常工作中的一个细小问题。但是通过对该问题的解决过程中的思考,我们应从中归纳出解决问题的一般性思路。
于我个人而言,在早期从事应用层开发时,如果遇到类似问题,很多时候,都需要凭自己一人之力去推动:应用层无法拿到数据,那就需要去询问驱动工程师,这个时候,其多半会甩给自己一个测试程序,要求你去帮忙抓个打印(可能连个环境都懒得搭);驱动层排插完,又再交给硬件,这时,硬件可能就会拿着各种仪器过来,进行测试。当然,最终问题都能够得到有效解决。但是,这其中自己可能一直都要搭时间进去,起到也只是一个协调的作用。
当然,无论是自上而下,还是自下而上,最终都能够解决问题,但是如果,我们能够拥有一个妥善,便捷的解决方法,其结果可能是事半功倍的。
注:以上,仅是个人工作经验的总结,如果不当之处,还望各位批评指正。
四、参考与链接
1.【E课堂】串口、COM口、TTL、RS-232、RS-485区别详解:http://www.eepw.com.cn/article/201607/294481.htm
2. linux超级终端minicom的使用方法:https://blog.youkuaiyun.com/bird67/article/details/2127235
3. microcom用法(嵌入式平台串口工具):https://blog.youkuaiyun.com/zhaoxd200808501/article/details/76578299
4. jpnevulator:https://jpnevulator.snarl.nl/
五、文档信息
作者: Litost_Cheng发表日期:2020年01月10日
更多内容: