ForkEureka 发表于 2010-3-17 23:19:06

关于如何侦测未知串口通讯波特率的问题求助。

如题,现在接到了一个没有任何资料的设备,要求通过串口与其进行数据交换。

目前最大的障碍是不知道该串口的波特率,有没有什么好办法探测到串口通讯的波特率?

波特率可以说是本次任务的第一个难点,也是决定成败的关键。如果无法准确地探测到串口的波特率,那么一切后续工作都无从谈起了。

不知道大家以前是否曾经遇到过类似的问题,是通过什么手段解决的?

希望各位坛友不吝赐教,广伸援手,小生在此谢过了。

armecos 发表于 2010-3-18 00:51:02

ggyyll8683 发表于 2010-3-18 00:52:52

这个我也不知道,mark

quzegang 发表于 2010-3-18 01:07:08

呵呵,或者自己写一个小程序,用暴力破解的方法。

wychao 发表于 2010-3-18 08:09:02

如果这个设备能主动发数据就容易了,用示波器看

master5888 发表于 2010-3-18 08:25:24

自己写个程序,根据最小脉宽判定。如果前面加入延迟线,可以做到自适应效果

ForkEureka 发表于 2010-3-18 09:35:00

回复【1楼】armecos
简单啊,用超级现代串口协议分析仪即可,工程师和公司必备开发工具!!!
你只要运行一下就能捕捉到你想要的所有数据了。
下载地址:
http://download.cnet.com/ComTrace/3000-2218_4-75156892.html?tag=mncol
感觉好别忘了给个review(评论),谢谢!
-----------------------------------------------------------------------
首先感谢您的回复,但是您提供的这个软件似乎只能监控本地计算机上的串口,也就是运行这个软件的那台计算机的串口,
类似的软件我已经用过很多了,经过我的分析,这类软件似乎并不会检测串口当前使用的波特率。


回复【4楼】wychao
如果这个设备能主动发数据就容易了,用示波器看
-----------------------------------------------------------------------
首先感谢您的回复,我想知道如何才能用示波器分析出串口的波特率?能说得稍微详细点吗?


回复【5楼】master5888
自己写个程序,根据最小脉宽判定。如果前面加入延迟线,可以做到自适应效果
-----------------------------------------------------------------------
首先感谢您的回复,不过请问您说的最小脉宽就是串口发送数据过程中出现的单个“0”或者单个“1”时的状态吗?

master5888 发表于 2010-3-18 10:49:53

是的。用示波器也是这么看单个最小脉宽

jack3018 发表于 2010-4-15 13:46:41

用示波器截获波形,然后用测量单个最小脉宽,100US左右大概是9600,200uS大概是4800。
不知对不对,你试验一下吧

security 发表于 2010-4-15 20:56:12

以波特率9600 bps 常用配置“9600,8个数据位,1个停止位,无奇偶校验,无流控制”为例
数据串,它的实际传输格式是这样的(停止位为1,起始位为0):
   第一个字符                        保护时间(N待定)                第二个字符            保护时间(N待定)
“1个起始位 + 8个数据位 + 1个停止位” + “N 个停止位” + “1个起始位 + 8个数据位 + 1个停止位” + “N 个停止位”....
其中 起始位、数据位、停止位的持续时间长短,实际上就决定了波特率的大小
9600 bps 意味着,每个比特的持续的时间为1000000 / 9600 us = 104us。

Helloeveryon 发表于 2011-10-18 11:21:52

MARK

xxdcq 发表于 2012-2-8 13:54:28

如果是用pc发串口命令来控制设备动作的产品可以采用我们的学习型串口控制模块
不用去关心pc端软件的命令协议和波特率等内容
可以支持300--57600任意波特率
http://www.yofeng.com/LrComCtr.asp

xinfa190 发表于 2012-2-8 14:16:46

知道控制协议的话,一个一个的试也用不了多大会

flyunlimit 发表于 2012-2-8 15:21:11

“波特率可以说是本次任务的第一个难点,也是决定成败的关键。如果无法准确地探测到串口的波特率,那么一切后续工作都无从谈起了。 ”

如何知道未知串口的波特率这应该是一个电子工程师手到擒来的事。用示波器测、用串口助手看,几分钟就搞定的事也值得楼主发帖子,还说这么严重。我不得不怀疑楼主的能力,以及“本次任务的第一个难点”不是串口波特率而是负责人的能力。

ForkEureka 发表于 2012-2-8 23:33:25

回复【13楼】flyunlimit 飞行面条
“波特率可以说是本次任务的第一个难点,也是决定成败的关键。如果无法准确地探测到串口的波特率,那么一切后续工作都无从谈起了。 ”
如何知道未知串口的波特率这应该是一个电子工程师手到擒来的事。用示波器测、用串口助手看,几分钟就搞定的事也值得楼主发帖子,还说这么严重。我不得不怀疑楼主的能力,以及“本次任务的第一个难点”不是串口波特率而是负责人的能力。
-----------------------------------------------------------------------

呵呵,您的态度十分明确,甚至可谓稍显傲慢。
对此我并不觉得奇怪,因为我确实没有交代清楚当时的场景和情况。

但是由于种种原因,我无法将具体情况说的过于明晰,
只能说,串口调试助手是我在发帖之前就已经使用过的,
但是对方的设备是只有在接收到特定的串口指令之后才会发送数据做出响应,
如果没有正确的指令,对方设备会一直保持缄默,
而原来用来发送串口指令的设备被严格控制,
我没有机会对其进行剖析和测量,二者之间通讯连接用的电缆也是不允许破坏的,。

另外还有一个问题您是否考虑过,为什么是未知串口格式?为什么没有任何资料?
按说,既然是上级下达的研究任务,我们是有充足的理由向原设备研制单位索取任何资料,
但是这次的任务不一样,没有这样的条件。
这就说明原设备的研制单位在有意防着我们,活者是在防着任何企图通过串口获取数据的人。
至于防备到什么程度,我只能说是你死我活的地步。
如果让您设计这样一个系统,会轻易暴漏自己设备的通讯格式吗?

如果问题真的如此简单,您又觉得我没有想到,那只能说您低估了我的能力。

这个帖子已经过去近两年的时间了,其实整个项目已经结束了,并且取得了成果。
现在大致说说当时采用的方法和最终的结果吧。

以下内容都是在没有任何资料的情况下,经过大量的数据采集之后对数据进行分析,
并一步步模仿通讯过程摸索出来的。

首先,经过我们的测试和分析,双方设备在一次完整的通讯过程中总共使用了四种波特率,上行和下行各两种,
举个例子,控制方首先以4800的波特率发送指令,长度不定,随后以9600的波特率发送指令执行参数,长度不定。
机载设备在收到这个指令及其参数后,以14400的波特率发送第一个数据包的头,64个字节,接着以115200的波特率发送第一个数据包内容,内容长度不定,至少为256k字节,发送过程中,每128个字节为一组,进行校验,在控制方收到校验字节并进行校验后,必须在5ms之内返回特定指令以继续下一个128字节的通讯过程,否则机载设备将结束通讯过程并有20秒左右的闭锁期,期间不接受任何指令,在数据包发送结束后,以14400的波特率发送16个字节的特定内容,以示该数据包的用途,随后控制方以4800的波特率发送第二组控制指令并以9600的波特率发送第二组指令执行参数,设备进行第二次回应,发送第二个数据包……,如此循环,共8次通讯过程,得到8个数据包,总共将近3M字节的数据量。

如前所述,原设备的控制方设备被严格控制,我们只能使用而不能有任何破坏包括打开机壳之类的操作,而原设备双方通讯连接所用的电缆也是不允许破坏的。我们当时采用的办法是专门订购了配套的接插件,在二者之间的电缆连接处延长一段,并将上行和下行的差分信号共计4条线和地线引出来,经过MAX3491转换成TTL电平之后,送入由FPGA和SDRAM构成的记录设备,将整个通讯过程中上行信号和下行信号的电平时序完整地录制下来,一个字节一个字节地观察,找出规律,再用我们自研的设备一步步模仿控制方的行为,对设备进行操作,并最终完成了数据获取的任务的。

当时【1楼】 armecos 网友提到的“超级现代串口协议分析仪”之类的软件我也测试过,经过分析,这类软件只能监测软件运行的这台计算机上的串口通讯的数据,虽然并不受不同波特率影响,但是前提必须是通讯过程是正确的,也就是说,如果波特率不对,监测软件照样是什么也收不到,或者收到错误的数据。

所以我觉得,这类软件似乎都是通过监测系统的串口缓冲区内容来进行数据分析的,自然不必关心硬件通讯的波特率了。可是如果波特率不对,硬件串口设备收不到正确的数据,那么缓冲区里的数据也就不可能正确,那么这类串口监视软件也就无法监视串口数据了。

都过去两年时间的帖子,又被大家挖出来,真是深感荣幸,上面啰啰嗦嗦说了一大堆,似乎有狡辩之嫌,实则不然,
只是不甘心自己当时费尽心机破_解对方设备层层壁垒的努力被网友用“几分钟就搞定的事”来一笔带过,
同时也意识到,尽管当时还真的没有想到他们搞得这么复杂,但是当时发帖时确实没有说清楚自己遇到的困难,
所以引起大家的不满和鄙视也算是咎由自取了。

还是要感谢上面各位网友的热心帮助和批评指正,小生再一次说声谢过了。

gaoyukun 发表于 2012-2-9 00:40:55

解决了就好:)

flyunlimit 发表于 2012-2-9 09:14:21

擦,没看发帖时间。该死的11楼

Hz01800475 发表于 2012-6-15 17:04:24

其实最后都是波形。

eblc1388 发表于 2012-6-15 17:19:18

记起教授给的习作:

教授自制的一个设备, 不知波特率,但知是 8N1,教授按一下键设备就发出一个64位(64x8bits)的讯息。 同学要在单片机实验板上的 LCD 显示这 64位 讯息, 只有一次机会。

全班只有 20% 的人成功。

349264710 发表于 2014-7-12 14:15:09

楼主的做法对我提示很大,没想到串口也玩跳频。
页: [1]
查看完整版本: 关于如何侦测未知串口通讯波特率的问题求助。