Передаємо Ethernet-пакет

передаємо
f

Підключення до локальної мережі може знадобитися для різних завдань. У цій статті хочу розглянути найпростішу операцію - передачу пакета Ethernet UDP платоюМарсохід.

Для початку трохи про стандарт Ethernet 10baseT. Швидкість передачі даних у цьому режимі - 10Мбіт. Передача та прийом даних відбуваються по двох різних парах кабелю UTP CAT5. У нашому випадку знадобиться лише одна пара, призначена для передачі. У роз'ємі ця пара підключена до ніжок 1, 2. Для того щоб повідомити хабу або мережеву карту, до якої ми хочемо підключити наш пристрій, з якою швидкістю ми будемо передавати дані, існує спеціальний механізм - "Autonegotiation". Для швидкості 10Мбіт потрібно з періодичністю 16ms (+/- 8ms) передавати до лінії однополярний позитивний імпульс тривалістю від 100 до 200ns. В результаті цього на хабі (мережевій карті) повинна спалахнути спеціальна лампочка, що позначає, що до нього підключено 10Мбітний пристрій. Метод кодування даних називається "Manchester". У ньому кожен біт даних, що передаються кодується послідовністю з двох біт несучої частоти. Для передачі "0" використовується послідовність "1,0", а для "1" - "0,1". Для реалізації такого алгоритму достатньо одного елемента XOR:

передаємо
передаємо

Закінчується пакет чотирибайтної контрольної сумою (CRC32). Крім того існують обмеження на мінімальну і максимальну довжину пакета, мінімальна - 60 байт (без префікса і CRC32).

Для практичної реалізації ми взяли конкретне завдання - контроль, за допомогою нашого пристрою, платиМарсохід, великого промислового холодильника, що знаходиться в окремій будівлі.

Для підключення до мережі, як вжераніше було сказано, нам знадобиться лише одна пара. На платі Марсоход ми підключаємо її з пін DP і DN.

З іншого боку, потрібна тактова частота 10Мгц (меандр). Для її отримання ми встановили зовнішній кварцовий генератор на 80Мгц (можна якийсь інший, з якого, цілим діленням, можна отримати 10Мгц).

ethernet-пакет

Скориставшись програмою Wireshark, ми перенесли всі значення константу C64X8.V - це файл мовою Verilog.

Таким чином, наш пакет, що посилається, до початку UDP-даних, буде завжди однаковим.

Наступні чотири байти будуть нести корисне навантаження: 0 - Номер датчика температури, що опитується 1 - Стан кнопок key[3..0] (Для контролю дверей холодильника) 2,3 - Результат вимірювання температури одного з датчиків .

Створений проект для платиМарсохід для Altera Quartus II можна взяти тут:

Зашиваємо проект програматором Quartus II і приступаємо до лабораторних випробувань:

Для прийому пакетів ми використовували програму udp-marsohod.exe, яка показує прийняті дані на екрані.

Перший стовпець - це номер датчика температури, від якого надійшла інформація, пакет UDP. Другий це стан кнопочок на платі. Видно як по черзі натискаємо кнопочки і приходять числа 8, 4, 2, 1. Наступні два байти - значення температури. Видно як воно змінюється коли до датчика торкаємося пальцями.

У лабораторних умовах ми випробували два різні датчики температури DS18B20 та DS1820. Крім того, ми пробували віднести датчик на відстань 10м від пристрою та збільшували довжину мережевого кабелю до 80м – все працює.

Про результати випробувань та експлуатації на реальному об'єкті ми повідомимо додатково.