Skip to content

bigbigzxl/SerialTool

Repository files navigation

SerialTool

discription

muti-channel Serial or USB Tool.

初衷

要学会使用pyqt,因此边学边做,同时也想摸索一下学习新东西新工具有没有更好的窍门。

额·····其实主要原因是任务来的。

这个工具平时是自己用的,刚写完第一版,很是粗糙,先放到git上来,慢慢优化代码,力求做到代码简洁

背景

这是一个专用工具,用来进行DDR的QA验证的。

当前国内很多公司,包括华为,都是直接买的内存die,然后去封装厂做个封装,加个丝印,测一下就是产品卖出去啦!

所以成本的关键点就在测试了,测试的准不准?测试的时间多长?这些都是直接关系到成本关系到钱的啊!

测试内容就是针对DRR设计一些QA测试pattern,分两个部分,其一为安卓压力应用(比如memtester,4K 大码流视频等),其二为针对cell设计一些测试算法,最终通过安卓下的JNI来跑这些算法。

因此我们的验证系统就是分软硬件两部分,硬件板端来跑安卓系统,以及验证pattern,PC上位机负责控制以及数据的收集,通信接口是USB跟串口(嗯,可以很负责任的告诉你,目前(2018.3)国内大部分中小企业都是这么干的,中小的定义就是有没有买几百万美金一台的ATE设备)。

上面为系统架构图,PC机负责流程控制,中间的通信服务器负责duosite管理以及稳定数据交互,下面的clients接收指令及pattern并按指令运行。

这里分享的是PC机的多site部分。

待分享:

  • 串口通信服务器
    • 服务器架构
    • 服务器硬件设计及关键器件选型
    • 服务器下位机设计
    • 服务器通信接口设计
    • 服务器应用之《基于机器学习的异常客户端识别》
  • clients值UDT
    • 硬件架构原则 (基本的最小系统框架)
    • 基于ARM A53的硬件设计 (不适合分享)
    • 基于NEON的汇编加速研究(已分享,见memtester-LPDDR3-仓库)

关于DDR cell的测试算法介绍以及关键研究点(不涉及具体实现代码),我会在知乎里面写个专栏的,感兴趣的到时可以去看哈!

目的

写这篇的目的是分享系统架构,软件界面代码,不分享的是DDR cell的测试pattern,这部分属于公司机密。

使用方法

  1. 第一步就是从下拉菜单选择你要打开的串口(点击refresh进行串口号刷新),选择对应的串口号时就自动创建了一个串口实例;
  2. 第二步就是点击开始测试,这时上位机就会发送测试pattern到下面硬件板内进行测试啦!

版本release

前后上线压力运行2000+次,均稳定运行,结论PASS。

bug fix list

2018.3.29

关于之前考虑的,如何实时更新测试pattern的问题,我们在工程下新建一个pattern文件夹,里面写一个pattern类,然后在主界面函数里面直接实例化测试pattern类,然后逐一调用里面的方法就好了!

这样子的话就可以实现每次仅需替换pattern文件就可实现pattern更新了,甚至在没有python环境的电脑上可以直接用txt方式修改测试pattern(界面函数是不动的)。

2018.3.23

设计模式: 1、串口号即代表通道,每次传入串口号我就对应实例化一个类,这是简单工厂模式; 2、反射:我可以先把所有的pattern都写好,然后通过动态调用(通过字符串来调用)来实现实时更新pattern,这样我只要更新pattern文件就好了,缺点是后面的人不好维护。

2018.3.22

问题已解决:

   1、电流值抓不到是因为checksleep模块策略问题,以及lpc1768底层中断的问题,会丢数据,修改中断优先级解决;

   2、第一次开机开不起,第二次才行的情况:是因为我的上次测试结束后我的buffer没有及时清空,因此下次点击开始测试后,读的是上次残留的数据“psci”,因此提前进入booting状态,导致开机不成功提前断电。

后续可优化:

   当前代码的结构式界面逻辑分离,channel均已class化,新增channel时只需实例话就好;不足之处在于假如要新增pattern,我只能在pattern class新增,并重新编译成exe再上线,这样子对远程更新很不友好,因此可以写成配置文件的方式,每次更新仅需更新配置文件即可,界面代码无需更新。

2018.3.18

发现在座位上测2site,测了45+颗,出现过一次现象,怀疑是硬件串口线的问题

2018.3.17

偶尔出现数据抓不到的现象。 分析:开机抓不到,电流数据抓不到,因此排除是数据速率太快的原因,数据处理速度那边我测了一下处理时间几乎是0s(即使是在字符串长度为2K的时候),因此剩下的原因有二,其一为处理流程,其二为串口线硬件问题。 1、我是在pyserial最底层接收数据,每收到一行就调用一个处理函数,把数据拼接到主线程里面的self.receiveddata_zxl里面,当然拼接前都是要做取锁处理的。 2、处理流程那边则也是要获取到锁才操作,这样可以保证数据是一行一行的不会被截断。

2018.3.16

  1. 出现不开机的现象,原因是我开机分三个步骤(正在开机、进入内核、进入安卓),我在进入内核检测的时候会发送大量的su指令,这会使得系统卡在uboot里面进不去,效果就是界面卡住不动了,一超时检测到就断电了结束了,解决方案是直接把内核进入代码屏蔽掉,不检测;

  2. 新增电流limit检测功能,通过修改配置文件来设置电流限。

  3. 新增配置文件conf,每次均需正确读取方能进行测试,步骤为读配置文件,选择系统,然后连接串口,接着进行测试。

2018.3.15

  1. 新增兼容安卓4.4跟7.1的程序。 安卓7的正常,安卓4fail,后面发现是安卓四跟7的开机时间不一致导致的。

2018.3.14

  1. 4site 总有一个site无法点击(input方式输入坐标,不是查找的控件的方式)到捕鱼达人的界面。 对比试验确定了不是软件问题,不是硬件问题,不是通信链路问题,最终找到是由于显示器(同型号)导致系统获取的屏幕参数不一致从而位置参数变了,最终换显示器解决。

About

muti-channel Serial or USB Tool.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published