Tout d'abord, Olin a également remarqué: les niveaux sont l'inverse de ce qu'un microcontrôleur sort habituellement:
Ne vous inquiétez pas, nous verrons que nous pouvons également le lire de cette façon. Nous devons juste nous rappeler que sur l'oscilloscope un bit de début sera un 1
bit d'arrêt 0
.
μμμ1
μ0
0x00
1
μ
0xFF
μ
estimations:
0b11001111 = 0xCF
0b11110010 = 0xF2
0b11001101 = 0xCD
0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2
modifier
Olin a absolument raison, c'est quelque chose comme ASCII. En fait, c'est le complément 1 de ASCII.
0xCF ~ 0x30 = '0'
0xCE ~ 0x31 = '1'
0xCD ~ 0x32 = '2'
0xCC ~ 0x33 = '3'
0xCB ~ 0x34 = '4'
0xCA ~ 0x35 = '5'
0xF2 ~ 0x0D = [CR]
Cela confirme que mon interprétation des captures d'écran est correcte.
edit 2 (comment j'interprète les données, sur demande populaire :-))
Attention: c'est une longue histoire, car c'est une transcription de ce qui se passe dans ma tête quand j'essaie de décoder une chose comme ça. Ne le lisez que si vous voulez apprendre une façon de l'aborder.
Exemple: le deuxième octet sur la 1ère capture d'écran, en commençant par les 2 impulsions étroites. Je commence par le deuxième octet exprès car il y a plus de bords que dans le premier octet, il sera donc plus facile de bien faire les choses. Chacune des impulsions étroites est d'environ 1 / 10e de division, de sorte qu'elle peut avoir 1 bit de haut chacune, avec un bit bas entre les deux. Je ne vois rien de plus étroit que cela, donc je suppose que c'est un peu. Voilà notre référence.
Ensuite, après 101
une période plus longue à faible niveau. Semble environ deux fois plus large que les précédents, ce qui pourrait être le cas 00
. La suite élevée qui est encore deux fois plus large, ce sera le cas 1111
. Nous avons maintenant 9 bits: un bit de début ( 1
) plus 8 bits de données. Donc, le bit suivant sera le bit d'arrêt, mais parce qu'il est0
ce n'est pas immédiatement visible. Donc, nous avons mis tout cela ensemble 1010011110
, y compris le bit de démarrage et d'arrêt. Si le bit d'arrêt n'était pas nul, j'aurais fait une mauvaise hypothèse quelque part!
N'oubliez pas qu'un UART envoie le LSB (bit le moins significatif) en premier, donc nous devrons inverser les 8 bits de données: 11110010
= 0xF2
.
Nous connaissons maintenant la largeur d'un bit unique, d'un bit double et d'une séquence de 4 bits, et nous examinons le premier octet. La première période haute (l'impulsion large) est légèrement plus large que 1111
dans le deuxième octet, ce qui fait 5 bits de large. La période basse et la période haute qui la suit sont aussi larges que le bit double dans l'autre octet, donc nous obtenons 111110011
. Encore une fois 9 bits, donc le suivant devrait être un bit faible, le bit d'arrêt. C'est OK, donc si notre estimation est correcte, nous pouvons à nouveau inverser les bits de données: 11001111
= 0xCF
.
Ensuite, nous avons obtenu un indice d'Olin. La première communication est longue de 2 octets, 2 octets plus courte que la seconde. Et "0" est également 2 octets plus court que "255". C'est donc probablement quelque chose comme ASCII, mais pas exactement. Je note également que les deuxième et troisième octets du "255" sont identiques. Super, ce sera le double "5". Nous allons bien! (Vous devez vous encourager de temps en temps.) Après avoir décodé les "0", "2" et "5", je remarque qu'il y a une différence de 2 entre les codes pour les deux premiers, et une différence de 3 entre les derniers deux. Et enfin, je remarque que 0xC_
c'est le complément de 0x3_
, qui est le modèle de chiffres en ASCII.