Изпращане на Ethernet пакет

един
е

Може да се наложи да се свържете с локална мрежа за различни задачи. В тази статия искам да разгледам най-простата операция - предаването на Ethernet UDP пакет от платкатаMars Rover.

Първо, малко за стандарта 10baseT Ethernet. Скоростта на трансфер на данни в този режим е 10Mbps. Данните се предават и получават по две различни двойки UTP CAT5 кабел. В нашия случай е необходим само един чифт за предаване. В конектора тази двойка е свързана към пинове 1, 2. За да кажем на хъба или мрежовата карта, към която искаме да свържем нашето устройство, с каква скорост ще прехвърляме данните, има специален механизъм - "Autonegotiation". За скорост от 10Mbps е необходимо да се предава еднополюсен положителен импулс с продължителност от 100 до 200ns в линията на интервали от 16ms (+/- 8ms). В резултат на това на хъба (мрежовата карта) трябва да светне специална светлина, което показва, че към него е свързано 10Mbit устройство. Методът за кодиране на данни се нарича "Манчестър". При него всеки бит от предаваните данни е кодиран от последователност от два бита на носещата честота. За предаване на "0" се използва последователността "1.0", а за "1" - "0.1". За реализиране на такъв алгоритъм е достатъчен един XOR елемент:

изпращане
ethernet

Пакетът завършва с четирибайтова контролна сума ( CRC32 ). Освен това има ограничения за минималната и максималната дължина на пакета, минимумът е 60 байта (без префикс и CRC32).

За практическа реализация се заехме с конкретна задача - управление с помощта на нашето устройство на борда наMars Rover, голям индустриален хладилник, разположен в отделна сграда.

За да се свържете с мрежата, както вечеказахме по-рано, имаме нужда само от един чифт. На платката на роувъра го свързваме към щифтовете DP и DN.

Освен това се нуждаете от тактова честота от 10 MHz (меандър). За да го получим, инсталирахме външен кристален осцилатор на 80 MHz (можете да използвате друг, от който чрез цяло число можете да получите 10 MHz).

ethernet

С помощта на програмата Wireshark прехвърлихме всички стойности на константата C64X8.V - това е файл на езика Verilog.

Така нашият изпратен пакет, преди началото на UDP данните, винаги ще бъде един и същ.

Следващите четири байта ще носят полезния товар: 0 - Номер на температурния сензор за запитване 1 - Състояние на клавиша на бутоните[3..0] (За управление на вратите на хладилника) 2,3 - Резултатът от измерването на температурата на един от сензорите.

Проектът, който създадохме за бордаRover за Altera Quartus II може да бъде намерен тук:

Зашиваме проекта с програмиста Quartus II и пристъпваме към лабораторни тестове:

За получаване на пакети използвахме програмата udp-marsohod.exe, която показва получените данни на екрана.

Първата колона е номерът на температурния датчик, от който идва информацията, UDP пакета. Второто е състоянието на бутоните на дъската. Виждате как натискаме бутоните един по един и идват числата 8, 4, 2, 1. Следващите два байта са стойността на температурата. Можете да видите как се променя, когато докоснем сензора с пръсти.

В лабораторията тествахме два различни температурни сензора DS18B20 и DS1820. Освен това се опитахме да вземем сензора на разстояние 10 м от устройството и увеличихме дължината на мрежовия кабел до 80 м - всичко работи.

Ще докладваме допълнително за резултатите от тестовете и работата в реално съоръжение.