Спочатку щось помітив і Олін: рівні - це зворотне значення того, що мікроконтролер зазвичай видає:
Не хвилюйтесь, ми побачимо, що ми можемо читати і цей шлях. Ми просто повинні пам’ятати, що в області запуску біт буде 1
бітом стоп і стоп 0
.
Далі ви маєте неправильну базу часу, щоб правильно прочитати це. 9600 біт на секунду (більш відповідні одиниці, ніж Бод, хоча останні не є помилковими за кожний сеанс) - це 104 за біт, що становить 1/10 частини ділення у вашому поточному налаштуванні. Збільшити масштаб і встановити вертикальний курсор на перший край. Це початок вашого стартового біта. Перемістіть другий курсор до кожного наступного краю. Різниця між курсорами повинна бути кратною 104 . Кожні 104 s - це один біт, спочатку біт запуску ( ), потім 8 бітів даних, загальний час 832 s та стоп-біт ( ). мкмкмк1
мк0
Це не схоже на те, що дані на екрані відповідають відправленим 0x00
. Ви повинні побачити вузький 1
біт (початковий біт) з подальшим більш низьким рівнем (936 мс, 8 нульових біт даних + стоп-біт).
Те саме, що ви надсилаєте; ви повинні побачити довгий високий рівень (знову 936 , на цей раз стартовий біт + 8 бітів даних). Отже, це має бути майже 1 поділ з вашим поточним налаштуванням, але це не те, що я бачу.
Це більше схоже на першому скріншоті, який ви надсилаєте два байти, а в другому чотирьох - з 2-м і 3-м тим самим значенням. мк
0xFF
мк
здогадки:
0b11001111 = 0xCF
0b11110010 = 0xF2
0b11001101 = 0xCD
0b11001010 = 0xCA
0b11001010 = 0xCA
0b11110010 = 0xF2
редагувати
Олін абсолютно прав, це щось на зразок ASCII. По суті, це доповнення 1 ASCII.
0xCF ~ 0x30 = '0'
0xCE ~ 0x31 = '1'
0xCD ~ 0x32 = '2'
0xCC ~ 0x33 = '3'
0xCB ~ 0x34 = '4'
0xCA ~ 0x35 = '5'
0xF2 ~ 0x0D = [CR]
Це підтверджує, що моє тлумачення скріншотів правильне.
редагувати 2 (як я інтерпретую дані на запит населення :-))
Попередження: це довга історія, тому що це стенограма того, що відбувається в моїй голові, коли я намагаюся розшифрувати подібну річ. Читайте його лише якщо ви хочете навчитися одному із способів вирішити його.
Приклад: другий байт на 1-му екрані, починаючи з 2 вузьких імпульсів. Початково я починаю з другого байту, тому що там більше ребер, ніж у першому байті, тому буде легше це правильно виправити. Кожен з вузьких імпульсів становить приблизно 1/10 частини поділу, так що може бути 1 біт високий кожен, з низьким бітом між ними. Я також не бачу нічого вужчого, ніж це, тому, мабуть, це єдиний шматочок. Ось наш довідник.
Потім після 101
більш тривалого періоду на низькому рівні. Виглядає приблизно вдвічі ширше попередніх, так що могло бути 00
. Високий наступний, що знову вдвічі ширший, так що буде 1111
. Зараз у нас є 9 біт: початковий біт ( 1
) плюс 8 бітів даних. Тож наступним шматочком буде стоп-біт, а тому що це0
це не відразу видно. Таким чином, склавши все це у нас є 1010011110
, включаючи біт старту та зупинки. Якби стоп-біт не дорівнював би нулю, я б десь зробив погане припущення!
Пам'ятайте, що UART спочатку надсилає LSB (найменш значущий біт), тому нам доведеться повернути 8 бітів даних: 11110010
= 0xF2
.
Тепер ми знаємо ширину одного біта, подвійного біта та 4-бітової послідовності, і ми подивимось на перший байт. Перший високий період (широкий імпульс) трохи ширший, ніж 1111
у другому байті, так що шириною буде 5 біт. Низький і високий період, що слідує за ним, такі ж широкі, як і подвійний біт в іншому байті, тому ми отримуємо 111110011
. Знову 9 біт, тому наступним повинен бути низький біт, стоп-біт. Це нормально, тож якщо наша здогадка правильна, ми можемо знову змінити біти даних: 11001111
= 0xCF
.
Тоді ми отримали підказку від Оліна. Перша комунікація завдовжки 2 байти, 2 байти коротша за другу. І "0" також на 2 байти коротше, ніж "255". Тож це, мабуть, щось на кшталт ASCII, хоча і не зовсім. Також зазначу, що другий та третій байти "255" є однаковими. Чудово, що це буде подвійне "5". У нас все добре! (Доводиться час від часу заохочувати себе.) Після розшифровки "0", "2" і "5" я помічаю, що між кодами для перших двох є різниця в 2, а різниця - 3 між останніми два. І, нарешті, я помічаю, що 0xC_
це доповнення 0x3_
, яке є схемою для цифр в ASCII.