2017-08-24 4 views
0

Je travaille sur un projet impliquant le capteur optique d'une souris. J'ai deux broches de communication (données et horloge) isolées, mais je n'ai pas de fiche technique et je me suis cogné la tête contre un mur en essayant de comprendre cette chose. J'ai finalement obtenu une capture décente du protocole en utilisant mon microcontrôleur - bien qu'il ne soit pas parfaitement synchronisé, la résolution devrait être assez élevée pour identifier ce qui se passe - chaque échantillon est pris, suivi d'un retard de ~ 4usProtocole d'ingénierie inverse

Comme je l'ai Je regarde ces données tracées, je vois la ligne de données se déplaçant parfois lorsque l'horloge ne l'est pas - et la ligne de données semble se déplacer beaucoup plus cohérente que l'horloge, ce qui me laisse croire que mes hypothèses concernant les données et qui est l'horloge peut avoir été en arrière. Cependant, je vois aussi la ligne de l'horloge se déplacer lorsque les données ne sont pas - ce qui n'aurait aucun sens avec ma conjecture. Ce que je m'attends à voir ici - même si je suis de moins en moins confiant que le protocole est configuré de cette façon - est une demande d'information sur un enregistrement spécifique, suivie d'un retour de cette information. Peut-être y a-t-il un appariement ou une initialisation au tout début de la communication (qui est le début de cette capture).

J'apprécierais vraiment un peu d'aide pour comprendre ce qui se passe ici, parce que je suis assez nouveau à ceci - et entièrement perdu.

données se trouve au format CSV ici: https://pastebin.com/h9Hx1dyw

Les 50 premières lignes sont juste premières ici parce que le coller site ne me laisse pas de poser ma question sans un code:

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 
+0

https://reverseengineering.stackexchange.com/ –

Répondre

1

Je voudrais utiliser gtkwave pour analyser vos échantillons, en fait je l'ai fait, il supporte .vcd fichiers en entrée, ce qui semble être facile à générer.

Il y a un outil pour convertir .csv fichiers à .vcd, csv2vcd, mais votre csv d'abord besoin d'une mise en forme, j'ai utilisé la commande awk, pour déplacer la première colonne à la dernière et de transformer sa valeur à microsecondes « nous » (le temps 0 besoin que d'être en quelques secondes, le suffixe 's', ou csv2vcd échouera)

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

output.csv sera besoin d'être modifié manuellement puis, comme ça

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

et enlever la dernière ligne dans le fichier ou csv2vcd échouera (d0 et d1 sont par exemple, je pense que vous pouvez les nommer comme vous le souhaitez)

À ce stade, vous pouvez charger le fichier vcd dans gtkwave, faites glisser les signaux dans le temps (c'est comme ça que ça marche dans Linux au moins) et analysez vos échantillons.

Vous pouvez utiliser combiner haut/bas (plusieurs fois) pour combiner les bits à deux bits, un quartet, un octet et ainsi de suite.J'ai essayé avec vos données mais sans décoder le protocole (ack/nack/stop/sync/peu importe) semble inutile.

Mais la chose est vcd Les fichiers peuvent être plus complexes et contiennent plus de données, voir les captures d'écran there pour des exemples avec des données décodées et protocole.

Cela pourrait être utile pour vous, si vous allez essayer de décoder le protocole, afin de vérifier le décodeur, voir ce module decode_i2c.cc de projet ArduLogic qui créent un vcd fichier à partir d'une entrée de bits I2C 2.

+0

Le fait que SOMEBODY ait fait un effort pour m'aider est vraiment apprécié. Profitez de votre générosité, mon ami. – Helpful

+0

@Helpful merci, désolé ne pouvait pas aider plus, j'ai jeté un coup d'oeil au bitstream mais pour moi ne ressemble pas à un i2c ou quoi que ce soit je sais (je peux me tromper), [là] (https: // pastebin .com/Yp9LXSDg) votre fichier csv converti en vcd et encodé en base64, vous devrez le décoder si vous voulez le charger dans gtkwave – Alex