WinCE中串口通讯的调试方法,实时监控串口数据

2019-10-01 14:36 来源:未知

  工欲善其事必先利其器,之前做WinCE开发时,经常写一些小工具以提高开发调试的效率,如WinCE驱动调试助手、WinCE串口调试助手、WinCE6.0寄存器访问工具、WinCE远程桌面助手和S3C2410 IIC调试助手等,虽然有些功能不算完善,但在实际工作中还是发挥了一些作用。现在搞Android开发,基本不用自己造轮子了,Linux下有瑞士军刀美称的Busybox就足以处理大多数问题。

    之前在做WinCE车载方案时,曾做过一个小工具TraceMonitor,用于显示WinCE系统上应用程序的调试信息,特别是在实车调试时,用于监控和显示CAN盒与主机之间的串口数据。因为需要抢占市场先机,经常在新车上市前,就得配合CAN解码盒厂商同步调试车机端软件。这时候,TraceMonitor就可能派上大用场。遇到说不清是哪一边的问题时,抓数据一看,就清清楚楚了。有时终端客户的机器出现了原车功能异常的问题,也可以直接运行该工具,实时抓取串口数据提供给我们以分析问题原因。不过该工具需要业务应用程序做特殊处理,不具备通用性,并且是在应用层实现,使用时可能会对性能有影响,但比没有强了。有一次跟GYP一起调试RK3188安卓车载导航,车机端始终收不到数据,硬件工程师说CAN盒肯定会发,纠结半天,最后只能用USB转串口板接出来在电脑上看,数据是有的,但帧格式不对。如果Android上也有一个可以实时监控串口数据的工具就方便多了。

      串口是嵌入式系统中应用很广的一种通讯接口。在WinCE中,通常会有一个串口供调试使用,另外的串口可与外围设备连接,如GSM和GPS等模块,以获取相应的信息并进行处理。

  今天就以测试一个字符设备驱动为例简单介绍下BusyBox的使用。

    前文《Android(Linux)线路规程的使用》中已经提到,在调整Android底层串口通讯的框架时使用了线路规程,意外发现可以很方便地在驱动中获得串口收发的所有数据,只需再写一个应用配合显示就可以了。说干就干,折腾点小工具,方便自己,也方便别人。

      在WinCE中,为了使用串口,必须有相应的串口驱动程序,一般在BSP中都有实现。串口驱动是典型的流驱动。应用程序中可通过CreateFile()、ReadFile()和WriteFile()等文件系统的操作函数来访问串口,从而实现串口数据的收发。

  Busybox官网下载地址:

    思路有了,实现并不复杂,先写一个字符驱动bonovo_mon,用于缓存线路规程里发送和接收到的数据,应用程序ComMon则使用FileInputStream读取字符设备数据并显示。为了使用时方便,实现了数据帧过滤、十六进制显示、数据保存、发送保存的数据到指定邮箱等功能,比WinCE下的TraceMonitor强大不少,可以监测通信串口上的所有数据,业务APP无需做任何特殊处理,而且仅在字符驱动bonovo_mon被打开时才向线路规程注册请求缓存数据,所以不运行ComMon时,对系统几乎没有任何影响。

     虽然串口操作相对简单,但在实际调试时依然会碰到很多问题,譬如如何监视串口收发的数据。在调试GSM模块时,如果WinCE不能正确控制模块,我们就需要确认是发送还是接收的问题,是模块还是开发板的问题。在调试GPS模块时,经常需要监视GPS数据又不能影响固有GPS软件的运行。这些都要求我们能内建虚拟串口,以将物理串口收到的数据分发到不同的虚拟串口上,相反,发送则是由不同的虚拟串口往物理串口转发的过程。

  Android安装Busybox的方法及步骤可参考:

    ComMon的界面及主要功能的使用如下所示。

    Serial Splitter Mobile就是这样一款专业软件,它能满足上述要求。以前曾用它调试过一个串口设备。当时用的是一个试用版,单次连接只能收发1M Bytes,超过1M就不工作了。开始没在意,以为是串口驱动和自己软件的问题,后来发现是Serial Splitter试用版的限制。调试手段引入的错误,是最让人郁闷的。为了方便使用,今天到其官网下载了最新的版本,并破解之,去除了收发数据的限制和应用程序中的注册信息。

TAG标签:
版权声明:本文由金沙澳门官网4166发布于中国史,转载请注明出处:WinCE中串口通讯的调试方法,实时监控串口数据