Java 分析可能不完全符合RS-232的串行通信?

Java 分析可能不完全符合RS-232的串行通信?,java,serial-port,embedded,uart,Java,Serial Port,Embedded,Uart,我有一个旧的java程序,它正在与2000年生产的嵌入式设备通信。该程序使用标准的Windows串行堆栈与该设备通信(据我所知,当我在Windows中使用PORTMON捕获数据时,我会看到诸如IRP\u MJ\u WRITE和IOCTL\u serial\u SET\u RTS)之类的请求) 但是,该设备使用串行至立体声插头连接到计算机上的串行端口,类似于。我相信这意味着设备本身只能使用两个引脚发送信号 如何分析两个设备之间的原始通信以尝试对协议进行反向工程?我使用的是Windows,但我可以移

我有一个旧的java程序,它正在与2000年生产的嵌入式设备通信。该程序使用标准的Windows串行堆栈与该设备通信(据我所知,当我在Windows中使用PORTMON捕获数据时,我会看到诸如
IRP\u MJ\u WRITE
IOCTL\u serial\u SET\u RTS
)之类的请求)

但是,该设备使用串行至立体声插头连接到计算机上的串行端口,类似于。我相信这意味着设备本身只能使用两个引脚发送信号


如何分析两个设备之间的原始通信以尝试对协议进行反向工程?我使用的是Windows,但我可以移动到OS X或*unix。我知道在某个时候,我将不得不写一些东西来处理设备通信的细节,但是你们推荐什么来收集信息呢

立体声插孔只是实现最小RS-232连接的廉价方式。这不应该影响监控


Portmon应该显示调查协议所需的数据。
IRP_MJ_WRITE
请求包含发送到设备的数据,而
IRP_MJ_READ
请求包含设备发送的数据。

如果您无法通过软件拦截方式实现这一点,请使用简单的多通道逻辑分析(例如FX2 USB设计之一)应能够捕获传输线和接收线上的通信量,然后允许您在空闲时对其进行软件解码,以查看传输、响应和其间任何延迟的完整相互作用。

一个立体声插头/插孔足以支持三线RS232链路(TxD、RxD、gnd)。使用示波器验证电压水平,并尝试测量波特率。“串行”不是名词,而是形容词。“然后,安装程序会提示用户输入一个序列号,…”--一个序列号什么?“我看到了序列号……”——序列号?除了波特率,您还需要确定其他配置参数:数据长度、奇偶校验和停止位。确定数据是全部ASCII还是二进制。“它可以是一种混合物吗?”--当然可以。查看PuTTY是否可以将接收到的数据或会话记录或捕获到文件中(大多数终端仿真器程序都具有此功能)。然后使用十六进制编辑器查看日志/捕获文件。其他人可能会想出一个实时监控程序。@crims0n数据可能由不可打印的字符组成。在Portmon上尝试“Show hex”选项。填充通常被称为框架,并且有许多常用的格式和大量的临时方案是根据软件工程师的心血来潮实现的。帧消息的典型样式可能是
023039cc 03
,其中消息
9999
STX
ETX
02h
03h
)包围,前导码指定块类型,例如
0
30h
),然后输入序列号9999和校验和字节。以1200波特运行的三线制系统应足够,握手和/或流量控制可通过软件完成,作为消息协议的一部分。