解码二进制信号

时间:2012-11-27 19:40:37

标签: c binary protocols reverse-engineering gpio

我正从Raspberry Pi上的gpio引脚读取以下二进制信号(这是气象站的输出)。

第一列是二进制高或二进制低。第二列是它在州内花费的时间(秒)。

如何将此信号转换为十六进制?!

...
0 14.929292
1 0.002127
0 0.006867
1 0.001393
0 0.005303
1 0.001274
0 0.006126
1 0.001361
0 0.007541
1 0.001417
0 0.005062
1 0.001474
0 0.005119
1 0.001565
0 0.004906
1 0.001587
0 0.004916
1 0.002031
0 0.006007
1 0.001479
0 0.003678
1 0.001485
0 0.000994
1 0.004142
0 0.000865
1 0.006277
0 0.003858
1 0.001288
0 0.001028
1 0.001468
0 0.000945
1 0.004138
0 0.003327
1 0.001303
0 0.001174
1 0.001318
0 0.001017
1 0.001510
0 0.001485
1 0.001080
0 0.001907
1 0.002782
0 0.001083
1 0.002012
0 0.000712
1 0.003984
0 0.001785
1 0.001291
0 0.003149
1 0.001185
0 0.001020
1 0.001719
0 0.000993
1 0.003965
0 0.001157
1 0.001346
0 0.001762
1 0.001353
0 0.003219
1 0.001090
0 0.001106
1 0.001475
0 0.001160
1 0.001079
0 0.003874
1 0.001387
0 0.001015
1 0.001168
0 0.001092
1 0.001336
0 0.002504
1 0.001466
0 0.006063
1 0.001391
0 0.001196
1 0.001460
0 0.001082
1 0.001237
0 0.005049
1 0.001654
0 0.004914
1 0.001410
0 0.002722
1 0.001601
0 47.818081
1 0.001452
0 0.007532
1 0.001438
0 0.007975
1 0.001494
0 0.003077
1 0.002131
0 0.003056
1 0.001254
0 0.002685
1 0.001372
0 0.005003
1 0.002051
0 0.006997
1 0.001608
0 0.004868
1 0.001524
0 0.002524
1 0.001397
0 0.003103
1 0.001211
0 0.002434
1 0.001328
0 0.003475
1 0.001469
0 0.003672
1 0.001384
0 0.003847
1 0.001101
0 0.001133
1 0.001352
0 0.003504
1 0.002133
0 0.003257
1 0.001070
0 0.001182
1 0.001511
0 0.003301
1 0.001482
0 0.003779
1 0.001210
0 0.001099
1 0.001396
0 0.001127
1 0.001433
0 0.001697
1 0.001434
0 0.003132
1 0.001175
0 0.001754
1 0.001520
0 0.002905
1 0.001425
0 0.003625
1 0.001155
0 0.001036
1 0.001469
0 0.001041
1 0.001422
0 0.001251
1 0.001275
0 0.003414
1 0.001446
0 0.001734
1 0.001653
0 0.000435
1 0.002349
0 0.000974
1 0.005346
0 0.003247
1 0.001265
0 0.001192
1 0.001213
0 0.001404
1 0.001349
0 0.000963
1 0.003732
0 0.001186
1 0.001220
0 0.002529
1 0.001357
0 0.002573
1 0.001700
0 0.001158
1 0.001058
0 0.002571
1 0.001314
0 0.001164
1 0.001364
0 0.124659
1 0.001485
0 0.007492
1 0.002176
0 0.006881
1 0.002083
0 0.005526
1 0.001351
0 0.005029
1 0.001528
0 0.001726
1 0.001366
0 0.002089
1 0.001258
0 0.002579
1 0.001463
0 0.001262
1 0.001487
0 0.000975
1 0.003736
0 0.002321
1 0.002073
0 0.004412
1 0.001433
0 0.002619
1 0.001390
0 0.002817
1 0.001201
0 0.003475
1 0.001512
0 0.000906
1 0.003958
0 0.003492
1 0.001581
0 0.000985
1 0.004103
0 0.001370
1 0.001046
0 0.001162
1 0.001534
0 0.001080
1 0.001510
0 0.003077
1 0.002124
0 0.003046
1 0.001293
0 0.003908
1 0.001406
0 0.001002
1 0.001109
0 0.001524
1 0.001009
0 0.001347
1 0.001448
0 0.000950
1 0.003651
0 0.001133
1 0.002038
0 0.002838
1 0.001991
0 0.002866
1 0.001291
0 0.003824
1 0.001191
0 0.001163
1 0.001447
0 0.000970
1 0.004059
0 0.000972
1 0.006388
0 0.001252
1 0.001262
0 0.001345
1 0.001329
0 0.004930
1 0.001273
0 0.003556
1 0.001570
0 0.003431
1 0.001550
0 0.001256
1 0.001461
0 0.001098
1 0.001005
0 0.002555
1 0.001503
0 0.005044
1 0.002070
0 0.004427
1 0.001499
...

正如你所看到的那样,在48秒内它为零,然后激发1和0的负载并再次回到零。

我需要弄清楚协议。我不知道它是什么。我所掌握的唯一信息是当前温度为21摄氏度,风速为零,风向为零。非常感谢任何见解,

plot of binary data

以上是两种不同传输的一些二进制数据图。

1 个答案:

答案 0 :(得分:2)

正如@NikolaiNFetissov所说,绘制你测量的时期。但是在48秒休息之后的第一个间隔开始时,从几个开始,一个在另一个之上。

所以你会:

A (21C) _____|----------|_____|-----|_____|-----

B (24C) ______|---------|_____|-----------|__________

Clock   _____|-----|_____|-----|_____|-----|_____|-----

etc

我将测量具有不同条件的几个循环(例如,不同的温度但风/方向相同),绘制它们,然后看看是否可以看到模式的哪些部分发生变化。如果您知道采样率并将其绘制出来也会有所帮助。你说它是尽可能最快的,但我想你在计算时钟滴答或其他什么 - 或者你还有其他的确定秒数?

编辑:

如何策划?我想象的是一张方形纸和一支铅笔:-)至于一个程序,我唯一的(简短的)经验是使用gnuplot。为此,你必须从你的间隔创建坐标列表,所以:

1 0.006
0 0.002
1 0.005
0 0.001

可能会变成:

x,     y
0.0,   1
0.006, 1
0.006, 0
0.008, 0
0.008, 1
0.013, 1
0.013, 0
0.014, 0

etc

我的猜测是,在安装和学习使用gnuplot并创建坐标所需的时间内,您可以在纸上绘制数据并找出代码。但对我来说,时钟频率是关键......(抱歉继续下去; - )