Prima cosa che Olin ha notato anche: i livelli sono il contrario di ciò che un microcontoller solitamente produce:
Niente di cui preoccuparsi, vedremo che possiamo leggerlo anche in questo modo. Dobbiamo solo ricordare che sull'ambito un bit di inizio sarà un 1
e il bit di stop 0
.
μμμ1
μ0
0x00
1
μ
0xFF
μ
guesstimates:
0b11001111 = 0xCF
0b11110010 = 0xF2
0b11001101 = 0xCD
0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2
modifica
Olin ha perfettamente ragione, questo è qualcosa come ASCII. È un dato di fatto è il complemento 1 di ASCII.
0xCF ~ 0x30 = '0'
0xCE ~ 0x31 = '1'
0xCD ~ 0x32 = '2'
0xCC ~ 0x33 = '3'
0xCB ~ 0x34 = '4'
0xCA ~ 0x35 = '5'
0xF2 ~ 0x0D = [CR]
Ciò conferma che la mia interpretazione degli screenshot è corretta.
modifica 2 (come interpreto i dati, su richiesta popolare :-))
Attenzione: questa è una lunga storia, perché è una trascrizione di ciò che accade nella mia testa quando provo a decodificare una cosa del genere. Leggilo solo se vuoi imparare un modo per affrontarlo.
Esempio: il secondo byte nel primo screenshot, a partire dai 2 impulsi stretti. Comincio con il secondo byte apposta perché ci sono più spigoli rispetto al primo byte, quindi sarà più facile farlo bene. Ciascuno degli impulsi stretti è circa 1/10 di una divisione, quindi potrebbe essere 1 bit alto ciascuno, con un bit basso nel mezzo. Inoltre non vedo nulla di più stretto di così, quindi immagino sia un po '. Questo è il nostro riferimento.
Quindi, dopo 101
un periodo più lungo a basso livello. Sembra circa il doppio rispetto ai precedenti, quindi potrebbe essere 00
. Il seguito alto che è di nuovo il doppio, quindi sarà 1111
. Ora abbiamo 9 bit: un bit di inizio ( 1
) più 8 bit di dati. Quindi il prossimo bit sarà il bit di stop, ma perché lo è0
non è immediatamente visibile. Quindi abbiamo messo tutto insieme 1010011110
, incluso start e stop bit. Se il bit di stop non fosse zero, avrei fatto una cattiva ipotesi da qualche parte!
Ricorda che un UART invia prima l'LSB (bit meno significativo), quindi dovremo invertire gli 8 bit di dati: 11110010
= 0xF2
.
Ora conosciamo la larghezza di un singolo bit, un doppio bit e una sequenza di 4 bit e diamo un'occhiata al primo byte. Il primo periodo alto (l'impulso largo) è leggermente più largo rispetto 1111
al secondo byte, quindi sarà largo 5 bit. Il periodo basso e quello successivo che lo seguono sono ampi quanto il doppio bit nell'altro byte, quindi otteniamo 111110011
. Ancora 9 bit, quindi il prossimo dovrebbe essere un bit basso, il bit di stop. Va bene, quindi se la nostra stima è corretta possiamo di nuovo invertire i bit di dati: 11001111
= 0xCF
.
Quindi abbiamo ricevuto un suggerimento da Olin. La prima comunicazione è lunga 2 byte, 2 byte più brevi della seconda. E "0" è anche 2 byte più corto di "255". Quindi è probabilmente qualcosa come ASCII, anche se non esattamente. Noto anche che il secondo e il terzo byte del "255" sono gli stessi. Fantastico, quello sarà il doppio "5". Stiamo andando bene! (Di tanto in tanto devi incoraggiarti.) Dopo aver decodificato "0", "2" e "5" noto che c'è una differenza di 2 tra i codici per i primi due e una differenza di 3 tra gli ultimi Due. E finalmente noto che 0xC_
è il complemento di 0x3_
, che è il modello per le cifre in ASCII.