通过万用表和逻辑分析仪分析UART串口

通过万用表检测UART串口引脚,通过逻辑分析仪分析串口波特率及读取串口数据。


串口分析

工具

万用表

fluke_17b

逻辑分析仪

kingst_la5016

目标主板

target_motherboard

使用万用表确定串口引脚

串口一般有四个引脚VCC,RX,TX,GND

确认VCC引脚

我们查看主板上的引脚,一般来说,vcc的引脚是方形的,其他引脚是圆形的uart-vcc

确定TX引脚

如果串口在不断的输出数据,那么TX引脚的电压肯定不断在变化。

我们可以通过测试引脚和VCC引脚的电压来确定TX引脚,只要哪个引脚和VCC电压不断在变化,那个引脚就是TX引脚。

uart-tx1

uart-tx2

uart-tx3

我们看到不断变化的电压,可以推断这个是TX引脚uart-tx

确定RX引脚

到这里,我们已经探测出VCC和TX引脚

RX引脚的探测可以和TX引脚探测一样的思路,通过不断在串口输入数据,检测那个引脚电压的不断变化。

还有一种更简单方式,RX引脚默认是高电平的,所以只要不输入的情况下,用电压表检测哪个引脚和VCC的电压差是0,就可以推断出哪个引脚是RX引脚

uart-rx1

uart-rx2

确定GND引脚

其实上面三个引脚确定后,GND引脚已经可以确定了

进一步验证可以使用电压表测量GND和VCC的电压差,无论串口输入还是输出,电压差都不会变动即可

uart-gnd

最终确认的引脚标注

uart-pins

使用逻辑分析仪分析串口波特率

接下来轮到逻辑分析仪出手了。

逻辑分析仪简介

逻辑分析仪是利用时钟从被测系统中采集和显示数字信号的仪器,主要作用在于时序判定和分析。逻辑分析仪不像示波器那样有许多电压等级,而是只显示两个电压(逻辑 1 和 0)。设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考电压为逻辑 1,低于参考电压为逻辑 0,在 1 与 0 之间形成数字波形。在针对单片机、 嵌入式、 FPGA、 DSP等数字系统的测量测试时,相比于示波器,逻辑分析仪可以提供更佳的时序精确度、更强大的逻辑分析手段以及大得多的数据采集量。

例如:一个待测信号使用 1MHz 采样率的逻辑分析仪进行采样,当参考电压(阈值电压)设定为 1.5V 时,逻辑分析仪每隔 1us 将当前电压与 1.5V 相比较,超过 1.5V 判定为高电平(逻辑 1),低于 1.5V 判定为低电平(逻辑 0),从而生成一个采样点,然后将所有采集到的采样点(逻辑 1 和 0)用直线连接成一个波形,用户便可以从中观察和分析实际信号的时序、逻辑错误、相互关系等等。

查看说明书了解更多

kingst-theory

逻辑分析仪使用

驱动/软件的安装在此不多说,请查看官网http://www.qdkingst.com/cn

逻辑分析仪接线

tx-read可以看到我只把逻辑分析仪CH0的线接到目标板的TX引脚,并没有把逻辑分析仪的GND和目标板的GND连接,因为两个设备的GND连接在一起会出错,原因不明。

下面看一张我测试中的软件截图,la5016-overview关于逻辑分析仪的所有操作,都围绕上面这张图展开

配置采样率,采样时间,阈值电压

采样率

前面“逻辑分析仪简介”有介绍过着几个概念,一般来说,针对UART串口的采样,采样率500KHZ就能满足分析要求,当然采样越大理论上是越准确的,实际上500MHZ的采样率和500KHZ的采样率,采样结果应该是一样的。

所以我们把采样率定位500KHZ

采样时间

采样时间,视逻辑分析仪的存储容量,以及采样率,采样时间是可调整的。在500KHZ的采样频率下,我们选择20M样本,差不多40s的采样时间。

阈值电压

配置这个值告诉逻辑分析仪,高于阈值电压认为是数字信号1,低于阈值电压认为是数字信号0. 这个阈值电压可以根据万用表测量,万用表测试TX和GND的电压看是在哪两个区间变化,一般来说,阈值电压设置为3v,3.3v,我试过2.5v和3v,都能准确检测出数据,建议设置成3v一般都没什么问题。

配置解析器

软件右侧有个解析器配置,点击+号,选择UART协议

la5016-uart

重新配置UART解析参数,选择通道,猜测一个波特率,本实验预测115200,勾选自动检测波特率

la5016-uart1

配置解析格式为ASCII

la5016-uart-ascii

确定波特率(baudrate)

配置好 采样率,采样时间,阈值电压 和 解析器 后,点击开始按钮开始采样

等待采样结束,右下角有解析结果,可能解析结果是正常的ASCII码,那说明我猜测的波特率是对的,就是115200, 也可能是乱码

freq2baudrate我们看上图,右下角是乱码,不是正常ASCII码,那可能就是我们预先猜测的波特率是错误的,我们点击这个乱码,此时上方显示对于的波形。

此时我们去定位最小周期,类似于上图左上红框的位置,鼠标点击后,右侧会显示频率,我看看到上图频率是29.4117547KHZ,波特率大概是频率的两倍,所以波特率约为58823.5094这个值和57600非常接近,所以大概率波特率是57600

[备注]频率和波特率的关系有点复杂,目前没看到非常可信的材料。这部分内容待后续补充,不过从目前数据来看,波特率为频率的两倍这个计算方式是没问题的

确定好波特率后,重新设置解析器的波特率,即可看到亲切的ASCII码了。

la5016-ascii

我们看到,除了可视字符,特殊字符也会显示出来,比如CR,LF,ESC,SP等

导出逻辑分析仪数据并还原成可视文本

从解析器中,导出解析后的ASCII码到文件文件中

la5016-export-txt

通过下面的脚本解析文本文件,即可打印出串口看到的数据

# la5016.py

export_file_name = '2019-08-13_14-33-48.txt'

with open(export_file_name, 'r') as fp:
    fc = fp.read()

cl = fc.split('\n')
op = ''

for ch in cl:
    if ch == '':
        continue

    ch = ch.split(',')[1]

    if ch == 'EST' or ch == 'CR ':
        continue

    if ch == 'LF ':
        ch = '\n'
    elif ch == '(SP)':
        ch = ' '
    op += ch

print(op)

样例文本2019-08-13_14-33-48.txt

0.220990000,[,,
0.221162000,0,,
0.221334000,m,,
0.221506000,[,,
0.221678000,l,,
0.221850000,i,,
0.222022000,b,,
0.222194000,w,,
0.222366000,p,,
0.222538000,a,,
0.222710000,_,,
0.222882000,s,,
0.223054000,u,,
0.223226000,p,,
0.223398000,p,,
0.223570000,l,,
0.223742000,i,,
0.223914000,c,,
0.224086000,a,,
0.224258000,n,,
0.224430000,t,,
0.224602000,],,
0.224774000,[,,
0.224946000,v,,
0.225118000,e,,
0.225290000,r,,
0.225462000,:,,
0.225634000,9,,
0.225806000,3,,
0.225978000,9,,
0.226152000,7,,
0.226324000,],,
0.226496000,E,,
0.226668000,v,,
0.226840000,e,,
0.227012000,n,,
0.227184000,t,,
0.227356000,(SP),,
0.227528000,S,,
0.227700000,C,,
0.227872000,A,,
0.228044000,N,,
0.228216000,_,,
0.228388000,R,,
0.228560000,E,,
0.228732000,S,,
0.228904000,U,,
0.229076000,L,,
0.229248000,T,,
0.229420000,S,,

脚步解析输出如下

[0m[libwpa_supplicant][ver:9397]Event SCAN_RESULTS

发表评论

已有 2 条评论

取消
Loading...

填写个人信息

姓名
电话
邮箱
公司
行业
职位
css.php