我有一个项目涉及到鼠标的光学感应器。我有两个通讯引脚(数据和时钟)隔离,但我没有数据表,我一直在咬我的头靠墙试图找出这件事。我终于用我的微控制器捕获到了协议--尽管它不是完全同步的,但是分辨率应该足够高,可以识别出发生了什么--每个样本都会被采集,然后是~4 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发布于 2017-09-01 15:36:56
我会使用gtkwave来分析您的示例,事实上,它支持.vcd文件作为输入,这似乎很容易生成。
有一个工具可以将.csv文件转换为.vcd、csv2vcd,但是您的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.vcdoutput.csv 需要手动编辑,就像这样
"d0","d1","Time"
0,1,0.0 s
1,1,4.0 us
...删除文件中的最后一行,否则csv2vcd将失败(例如,d0和d1,我认为您可以随意命名它们)
此时,您可以将vcd文件加载到gtkwave中,将信号拖到时间(至少在linux中是这样的),并分析您的示例。
您可以使用组合向上/向下(多次)将比特组合成两位,一个比特,一个字节等等。我尝试过处理您的数据,但是没有解码协议(ack/nack/stop/sync/任何位)似乎是无用的。
但问题是vcd文件可能更复杂,包含更多的数据,请参见屏幕截图那里中的解码数据和协议示例。
这对您可能很有用,如果您要对协议进行解码,以验证解码器,请参阅来自ArduLogic项目的模块ArduLogic,该模块从i2c 2位输入创建vcd文件。
https://stackoverflow.com/questions/45865628
复制相似问题