逆向工程协议

时间:2017-08-24 15:31:08

标签: serial-port protocols reverse-engineering i2c spi

我正在研究一个涉及鼠标光学传感器的项目。我有两个通信引脚(数据和时钟)隔离,但我没有数据表,我一直在试图弄清楚这个问题。我终于使用我的微控制器很好地捕获了协议 - 虽然它并不完全同步,但分辨率应足够高,以确定发生了什么 - 每个采样,然后是〜4us延迟

当我正在查看这些绘制的数据时,我看到数据线有时会在时钟不动时移动 - 并且数据线看起来比时钟更加一致,这使我相信我的假设是关于哪个是数据和时钟可能已经落后了。但是,当数据没有时,我也看到时钟线在移动 - 这对我猜想没有任何意义。

我期待在这里看到的内容 - 尽管我越来越确信协议是以这种方式设置的 - 是对某个特定注册信息的一些请求,然后返回该信息。也许在通信一开始就有配对或初始化(这是捕获开始的地方)。

我真的很感激帮助弄清楚这里发生了什么,因为我对此很新 - 而且完全迷失了。

此处以CSV格式找到数据:https://pastebin.com/h9Hx1dyw

前50行只是原始粘贴在这里,因为如果没有一些代码,网站不会让我问我的问题:

Time Index,Data,Clock
0,0,1
1,1,1
2,1,1
3,1,1
4,1,1
5,1,1
6,1,1
7,1,1
8,1,1
9,1,1
10,1,1
11,1,1
12,1,1
13,1,1
14,1,1
15,1,1
16,1,1
17,1,1
18,1,1
19,1,1
20,1,1
21,1,1
22,1,1
23,1,1
24,1,1
25,1,1
26,1,1
27,1,1
28,1,1
29,1,1
30,1,1
31,1,1
32,1,1
33,1,1
34,1,1
35,1,1
36,1,1
37,1,1
38,1,1
39,1,1
40,1,1
41,1,1
42,1,1
43,1,1
44,1,1
45,1,1
46,1,1
47,1,1
48,1,1
49,1,1
50,1,1

1 个答案:

答案 0 :(得分:1)

我会使用gtkwave来分析您的样本,事实上我做了,它支持.vcd个文件作为输入,这似乎很容易生成。

有一个工具可以将.csv文件转换为.vcdcsv2vcd,但您的csv首先需要一些格式化,我使用命令awk来移动第一列到最后一列并将其值转换为微秒" us" (时间0虽然需要以秒为单位,后缀' s' csv2vcd 将失败)

cat input.csv | awk -F',' 'FNR==1{print $2","$3","$1; next}{print $2 "," $3 "," ($1*4)".0 us"}' >output.vcd

output.csv 需要手动修改,然后就像那样

"d0","d1","Time"
0,1,0.0 s
1,1,4.0 us
...

删除文件中的最后一行 csv2vcd 将失败(例如 d0 d1 我想你可以随心所欲地命名它们。

此时您可以将 vcd 文件加载到 gtkwave 中,将信号拖到 Time 中(这是它在linux中的工作原理)至少)并分析你的样品。

您可以使用组合向上/向下(多次)将这些位组合成两位,一个半字节,一个字节等等。我尝试了你的数据,但没有解码协议(ack / nack / stop / sync /无论位)似乎没用。

但事情是 vcd 文件可能更复杂并且包含更多数据,请参阅屏幕截图there以获取解码数据和协议的示例。

这可能对您有用,如果您要尝试解码协议,验证解码器,请参阅 ArduLogic 项目中的此模块decode_i2c.cc,该模块创建<来自i2c 2位输入的em> vcd 文件。