Съдържание:

WIDI - Безжичен HDMI, използващ Zybo (Zynq Board за разработка): 9 стъпки (със снимки)
WIDI - Безжичен HDMI, използващ Zybo (Zynq Board за разработка): 9 стъпки (със снимки)

Видео: WIDI - Безжичен HDMI, използващ Zybo (Zynq Board за разработка): 9 стъпки (със снимки)

Видео: WIDI - Безжичен HDMI, използващ Zybo (Zynq Board за разработка): 9 стъпки (със снимки)
Видео: БЕСПРОВОДНОЕ ВИДЕОНАБЛЮДЕНИЕ WIFI комплект KERUI со слежением за людьми 2024, Юли
Anonim
WIDI - Безжичен HDMI с помощта на Zybo (Zynq Development Board)
WIDI - Безжичен HDMI с помощта на Zybo (Zynq Development Board)
WIDI - Безжичен HDMI с помощта на Zybo (Zynq Board за разработка)
WIDI - Безжичен HDMI с помощта на Zybo (Zynq Board за разработка)

Искали ли сте някога да можете да свържете телевизора си към компютър или лаптоп като външен монитор, но не сте искали всички тези досадни кабели да ви пречат? Ако е така, този урок е само за вас! Въпреки че има някои продукти, които постигат тази цел, проектът „направи си сам“е много по -удовлетворяващ и потенциално по -евтин.

Тази концепция е различна от продукти като chromecast, тъй като е предназначена да заеме мястото на HDMI кабел, свързващ се с монитор, вместо да бъде стрийминг устройство.

Нашият проект е създаден като окончателен проект за курс по оперативни системи в реално време в Калифорнийския държавен политехнически университет, Сан Луис Обиспо.

Целта на проекта е да се използват две платки Digilent Zybo, които да действат като безжичен комуникационен интерфейс между HDMI предавателно устройство (компютър, blu-ray и т.н.) към HDMI приемащо устройство (настолен монитор, проектор, телевизор и др.).

Единият Digilent Zybo ще бъде свързан чрез HDMI към предаващото устройство, а другият ще бъде свързан чрез HDMI към приемащото устройство.

Безжичната комуникация ще се осъществява чрез използване на безжична локална мрежа, предназначена за предавателя и приемника, без да се пренасочва през домашен рутер или друго такова устройство. Безжичният модул, използван за този проект, е нанорутер tplink wr802n, единият от които работи като точка за достъп за установяване на мрежата, а другият за работа като клиент за свързване към мрежата. Всеки нанорутер ще бъде свързан чрез Ethernet кабел към която и да е Zybo платка. Когато са свързани с тези рутери, устройствата ще комуникират чрез TCP, сякаш са свързани с един единствен Ethernet кабел (което означава, че единствената конфигурация, необходима за установяване на връзка, е IP адресът на клиента).

Въпреки че целта на проекта беше да улесни поток от 1080x720 видео @ 60Hz, това не беше постижимо поради ограниченията на честотната лента в безжичната мрежа и липсата на компресия на видео в реално време за намаляване на данните, необходими за изпращане. Вместо това, този проект служи като рамка за бъдещо развитие за постигане на тази цел, тъй като той има строго ограничени ограничения в честотата на кадрите за правилно предаване на HDMI данни по предназначение.

Изисквания към проекта:

2x Digilent Zybo дъски за развитие (трябва да имат поне един HDMI порт)

2x HDMI кабели

2x microusb кабели (за свързване на Zybo към компютър за развитие)

2x нанораутери tplink wr802n (включително допълнително 2x microusb и адаптери за захранване на стената)

2x Ethernet кабели

*** Забележка: Този урок предполага запознаване с пакета за проектиране на Vivado и опит при създаването на нов проект и дизайн на блок. ***

Стъпка 1: Конфигурирайте Zynq програмируема логика за предавателя

Конфигурирайте Zynq програмируема логика за предавател
Конфигурирайте Zynq програмируема логика за предавател
Конфигурирайте Zynq програмируема логика за предавател
Конфигурирайте Zynq програмируема логика за предавател
Конфигурирайте Zynq програмируема логика за предавател
Конфигурирайте Zynq програмируема логика за предавател

Нашият подход към разработването на програмируема логика на предавателя беше да извършим hdmi-to-hdmi преминаване от компютър към монитор, използвайки два блока за видео директен достъп до памет (VDMA), един за запис и един за четене.

И двата са избрани за свободно работещ режим с 3 рамкови буфера (0-1-2). Тъй като видеоядрото е оптимизирано за 60 кадъра в секунда, това означава, че VDMA ще записва или чете в нов кадър на всеки 16,67 ms в този ред: 0, 1, 2, 0, 1, 2, 0, 1, 2. Местоположенията на DDR паметта за всеки кадър са различни за двата VDMA, тъй като вече не се синхронизират помежду си. Вместо това, хардуерен таймер (TTC1), конфигуриран за 60 Hz, се използва за синхронизиране на движението на данни между двете места на паметта.

Изображението по -горе показва 3 кадъра, техните размери и обема на паметта, от който всеки се нуждае (вдясно от кадъра). Ако присвоим VDMA за запис на тези места в паметта, тогава можем да присвоим прочетените VDMA места в паметта извън този набор, да речем, започвайки с 0x0B000000. Всеки кадър се състои от 1280*720 пиксела и всеки пиксел се състои от 8 бита червено, зелено и синьо за общо 24 бита. Това означава, че рамката се състои от 1280*720*3 байта (2.76 MB).

Вътре в таймера IRQ, който е описан в настройката на драйвера на VDMA, ще обработва копиране на данни между двете места на паметта на VMDA. VDMA предоставя указател към текущия кадър, към който се записва или от който се чете. Рамката е представена от определен сив код, който се преобразува в софтуер. Сивите дефиниции на код за конфигурация с 3 рамкови буфера могат да бъдат намерени в Ръководството за продукта на AXI VDMA в приложение В.

Това ни позволява да копираме съдържанието, което се записва в паметта, без да четем от кадър, в който се записва в момента.

*** Имайте предвид, че прочетеният VDMA не се използва при изпращане на данни през безжичната мрежа. Единствената му цел е да провери правилното функциониране на копирането на паметта от VMDA за запис. Прочетеното VMDA трябва да бъде деактивирано. ***

Ето стъпките за създаване на блок за проектиране на предавателя:

  1. Когато създавате нов проект, е добра идея да присвоите чип или платка на проекта. Тази връзка описва как да добавите нови файлове на борда към директорията на Vivado и да свържете правилната платка с вашия проект. Той ще бъде полезен при добавяне на блока Processing System и преминаване от хардуер към софтуер (страна SDK).
  2. Добавете следните блокове:

    • dvi2rgb
    • Видео в Axi4-stream
    • Контролер за синхронизация
    • axi4-поток за видео изход
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • Съветник за часовник
    • Постоянен
    • Обработваща система Zynq
  3. Когато добавяте системата за обработка, щракнете върху „Run Block Automation“от горната зелена цветна лента и се уверете, че е избрана опцията „Apply Board Preset“. Оставете всичко останало по подразбиране.
  4. Изображенията на всеки прозорец за конфигуриране на блок могат да бъдат намерени в изображенията по -горе. Ако не виждате изображение за определен прозорец, просто го оставете по подразбиране.
  5. Започнете да конфигурирате системата за обработка на Zynq:

    • В конфигурация PS-PL AXI Non Secure Активиране GP Master AXI, активирайте M AXI GP0 интерфейс
    • В PS-PL конфигурация HP Slave AXI интерфейс активирайте както HP0, така и HP1
    • В MIO конфигуриране Уверете се, че ENET0 е активиран под I/O периферия, след това Application Processor Unit, активирайте Timer0
    • В Clock Configuration PL Fabric Clocks активирайте FCLK_CLK0 и задайте на 100 MHz.
    • Щракнете върху OK
  6. Преди да щракнете върху „Стартиране на автоматизацията на връзката“, не забравяйте да свържете видео блоковете, както се вижда на изображението за дизайн на блока TX по -горе. Вие ще искате да преименувате константата на VDD и да зададете стойността на 1. Свържете видео блоковете съответно.
  7. Направете часовника на HDMI TMDS и пиновете за данни външни за блоковете rgb2dvi и dvi2rgb
  8. Създайте входен и изходен порт за сигнала за откриване на гореща връзка (HPD) и ги свържете заедно, те са дефинирани във файла с ограничения
  9. Пикселният часовник се възстановява от TMDS_Clk_p, който е създаден във файла с ограничения. Това ще бъде 74,25 MHz в съответствие с резолюция 720p. Важно е да свържете пикселния часовник (от блока dvi2rgb) към следните щифтове:

    • vid_io_in_clk (vid in към axi stream блок)
    • vid_io_out_clk (axi поток към блок за видео изход)
    • clk (контролер на времето)
    • PixelClk (rgb2dvi)
  10. *** Забележка: За да активирате възстановяването на часовника на пикселите, HDMI rx и tx конекторите трябва да бъдат включени в активен източник/мивка. Един начин да заобиколите това е да разделите видео rx и tx блоковете в различни часовникови домейни (с други думи, генерирайте нов 74,25 MHz часовник за подаване към tx блока). ***
  11. След това настройте часовника!
  12. Свържете щифта на системата за обработка на FCLK_CLK0 към входа на съветника за часовник
  13. В този момент щракнете върху „Изпълнение на автоматизацията на връзката“от зелената лента в горната част на прозореца за проектиране. Добра идея е да правите това за един блок наведнъж и да следвате изображението на дизайна на блока TX по -горе.
  14. Инструментът ще се опита да добави AXI Interconnect, който действа като главна/подчинена взаимовръзка за блоковете, които използват шината AXI-Lite (VDMA и GPIO).
  15. Той също така ще добави AXI SmartConnect, който действа като главна/подчинена взаимовръзка за AXI4-Stream и високопроизводителни процесорни интерфейси, използвани от VDMA (Stream to Memory Map и обратно).
  16. Инструментът ще добави и възстановяване на процесорната система. Уверете се, че това е свързано само с VDMA, GPIO и блокове, свързани с процесора. Не го свързвайте към никакви видео блокове (напр. Dvi2rgb, контролер за време, видео към поток и т.н.)
  17. След като автоматизацията на връзката е завършена, проверете дали връзките съвпадат с тези на изображението на TX блока. Ще забележите допълнителен блок ILA на системата, който не е споменат. Това е само за отстраняване на грешки и засега не е необходимо. Той използва 150M Processor Reset, така че и това не е необходимо. Навсякъде, където виждате малки зелени „бъгове“по автобусите, това се дължи на МНП и може да бъде игнорирано.
  18. Последната стъпка е да щракнете с десния бутон върху дизайна на блока в дървото на източниците на проекти и да изберете „Създаване на HDL обвивка“. Ако планирате да добавите логика към обвивката, тя ще се презаписва всеки път, когато това бъде избрано.
  19. Вижте раздела VDMA Driver Setup за подробности от страна на SDK.

Часовници и нулиране

Открих, че най -важните аспекти на всеки програмируем логически проект е внимателното разглеждане на часовниковите области и сигналите за нулиране. Ако те са правилно конфигурирани, имате добър опит да приведете дизайна си в действие.

Пикселният часовник и времето са заключени

За да проверите дали определени сигнали са активни, е добра идея да свържете тези сигнали към светодиоди (часовници, нулиране, брави и т.н.). Два сигнала, които намерих за полезни за проследяване на предавателната платка, бяха часовникът на пикселите и „заключеният“сигнал на блока AXI4-Stream to video out, който ви казва, че времето за видео е синхронизирано с контролера за синхронизация и източника на видео данни. Добавих малко логика към дизайна на блоковата обвивка, която проследява часовника на пикселите, използвайки сигнала PixelClkLocked на блока dvi2rgb като нулиране. Прикачих файла като hdmi_wrapper.v тук. Файлът с ограничения също е прикачен тук.

Стъпка 2: Конфигурирайте Zynq програмируема логика за приемник

Конфигурирайте Zynq програмируема логика за приемник
Конфигурирайте Zynq програмируема логика за приемник
Конфигурирайте програмируема логика на Zynq за приемник
Конфигурирайте програмируема логика на Zynq за приемник
Конфигурирайте програмируема логика на Zynq за приемник
Конфигурирайте програмируема логика на Zynq за приемник

Програмируемият логически блок за приемника е по -опростен. Ключовата разлика, освен липсващите входни блокове на hdmi, е липсата на възстановен пикселен часовник. Поради тази причина трябва да генерираме наши собствени от часовника. Този дизайн трябва да бъде направен в отделен проект от предавателя. За нашите цели проектът на приемника следва платката Zybo 7Z-20, докато предавателят следва платката Z7-10. FPGA на платките са различни, така че … бъдете внимателни.

Ето стъпките за създаване на блок за проектиране на приемника:

  1. Добавете следните ip блокове към вашия дизайн:

    • Контролер за синхронизация
    • AXI4-поток към видео изход
    • RGB към DVI
    • AXI VDMA
    • AXI GPIO
    • Обработваща система
    • Съветник за часовник
    • Константа (VDD настроено на 1)
  2. Следвайте същия модел за конфигуриране на тези блокове като Предавателя. Тук са включени изображения за забележимите разлики в конфигурацията. Другите остават същите като Предавателя.
  3. Конфигурирайте VDMA за този дизайн само като канал за четене. Деактивирайте канала за запис.
  4. Съветникът за часовник трябва да бъде конфигуриран за следните изходи:

    • clk_out1: 75 MHz (пикселен часовник)
    • clk_out2: 150 MHz (часовник на потока)
    • clk_out3: 50 MHz (axi-lite часовник)
  5. Свържете видео блоковете, както е показано на изображението за дизайн на RX блок.
  6. След това стартирайте автоматизацията на връзката, която ще добави блоковете AXI Interconnect, AXI SmartConnect и System Reset и ще се опита да направи подходящи връзки. Отидете бавно тук, за да се уверите, че не изпълнява нежелани връзки.
  7. Направете HDMI TMDS часовника и пиновете за данни външни за блока rgb2dvi
  8. Няма нужда от сигнал за горещо включване на този дизайн.

Стъпка 3: Настройка на VDMA драйвер

Настройка на VDMA драйвер
Настройка на VDMA драйвер

Настройката за различните блокове, конфигурирани чрез интерфейса AXI-Lite, се извършва най-добре чрез използване на демонстрационни проекти, включени в BSP като справка. След като експортирате хардуера за проектиране и стартирате SDK от Vivado, ще искате да добавите нов пакет за поддръжка на платката и да включите библиотеката lwip202 в прозореца за настройки на BSP. Отворете файловия файл system.mss от BSP и ще видите периферните драйвери, присъстващи от дизайна на вашия блок. Опцията „Примери за импортиране“ви позволява да импортирате демонстрационни проекти, които използват тези периферни устройства и по този начин да ви покаже как да ги конфигурирате в софтуер, като използвате наличните драйвери на Xilinx (вижте приложеното изображение).

Това беше методът, използван за конфигуриране на VDMA, таймер и прекъсване и GPIO. Изходният код както за предаване, така и за приемане е включен тук. Разликите са почти изключително в main.c.

*** ЗАБЕЛЕЖКА: Тъй като системата не е напълно функционална към момента на писане на този урок, изходният код в този раздел не включва кода на безжичната мрежа. Няколко грешки трябва да бъдат отстранени в резултат на комбинирането на проекти за предаване/приемане на видеоядрото с проекти за предаване/приемане в мрежата. Затова този урок засега ги третира отделно. ***

Функция за обработка на TX прекъсвания (IRQHandler)

Тази функция чете сивите кодове, предоставени както от VDMA за четене, така и за запис чрез GPIO блоковете. Сивите кодове се преобразуват в десетични и се използват за избор на местоположението на основната памет на кадъра на текущия кадър. Копираният кадър е предишният кадър към този, към който се записва VDMA (например, ако VDMA записва във фрейм 2, ние копираме кадър 1; ако записваме в кадър 0, ние обгръщаме и четем от кадър 2).

Функцията улавя само всеки 6 -ти кадър, за да намали честотата на кадрите до 10 Hz, а не до 60 Hz. Горната граница на мрежата е 300 Mbps. При 10 кадъра в секунда е необходима честотна лента от 221.2 Mbps.

Коментирането/декомментирането на два реда в тази функция ще позволи на потребителя да премине към режим на HDMI пропускане за отстраняване на грешки/тестови цели (кодът се коментира, за да посочи подходящите редове). В момента той копира рамката на място в паметта, използвано от кода на Ethernet.

Функция за обработка на прекъсвания RX (IRQHandler)

Тази функция е много подобна на функцията TX, но копира от 2 буфера FIFO, използван от ethernet за запис на входящи данни. Кодът на Ethernet показва на кой кадър се записва FIFO, данните се копират от противоположния кадър. Данните се копират в рамката директно зад тази, която се чете от VDMA, за да се избегне разкъсването.

Стъпка 4: Настройка на мрежата на наноуротера

Настройка на мрежата с нанорутери
Настройка на мрежата с нанорутери

За да създадете мрежа с помощта на нанороутери TPlink, включете ги поотделно и се свържете към SSID по подразбиране за устройствата. Повече информация за конфигурационните настройки за това конкретно устройство можете да намерите в ръководството за потребителя на устройството.

Настройте едно от устройствата като точка за достъп, това ще действа като основна връзка за мрежата. Не забравяйте да дадете име на мрежата и да отбележите името и да деактивирате DHCP (не искаме маршрутизаторът да конфигурира IP адресите динамично, искаме платките Zybo на tansmitter и получател да задават своите IP адреси, така че да са последователни). След конфигуриране се уверете, че устройството се рестартира и установява тази мрежа.

Настройте другото устройство като клиент и се уверете, че то се свързва към мрежовия SSID, който сте настроили с първия нанорутер. Още веднъж се уверете, че DHCP е деактивиран за клиента.

След като клиентът приключи и рестартира, той трябва да се свърже с нанорутера на точката за достъп (ако не го направи, вероятно има проблем във вашата конфигурация на едно от устройствата). Ще забележите, че LED светлината на клиента ще свети постоянно, след като се свърже с точката за достъп.

Светодиодът на нанорутера на точката за достъп вероятно ще продължи да мига в този момент, това е добре! Мигащата светлина означава, че не е свързана към друго устройство от своя Ethernet порт и след като бъде свързана към конфигуриран Zybo, светодиодът ще остане непрекъснат, което показва успешна мрежова връзка.

Сега, когато сме настроили нанонасочвателите, имаме безжична мрежа, която ще ни позволи да комуникираме. Важна забележка е, че нашият метод за конфигуриране на нанороутерите (като точка за достъп и клиент) ни позволява да комуникираме от предаващата Zybo платка към приемащата Zybo платка, сякаш двете са свързани с един Ethernet проводник. Това прави нашата настройка на мрежата по -малко трудна, тъй като алтернативата вероятно ще включва конфигуриране на Zybo платките да се свързват изрично със сървъра заедно с планираната връзка.

След като и двете устройства са настроени, нанороутерите са конфигурирани и готови за внедряване във вашата WIDI мрежа. Няма конкретно сдвояване между нанороутерите и платките Zybo, тъй като или точката за достъп, или клиентът ще работят или за предавателното, или за приемащото устройство.

Стъпка 5: Настройте Zynq Processing System за предаване на данни през Ethernet

Настройка на Zynq система за обработка за предаване на данни през Ethernet
Настройка на Zynq система за обработка за предаване на данни през Ethernet
Настройка на Zynq система за обработка за предаване на данни през Ethernet
Настройка на Zynq система за обработка за предаване на данни през Ethernet

За да предаваме HDMI данните от една Zybo платка към друга, трябва да включим Ethernet протокол в нашия VDMA драйвер. Нашата цел тук е да предаваме отделни видеокадри през периферното Ethernet в системата за обработка, със зададена скорост, която е в съответствие с нашата мрежова честотна лента. За нашия проект използвахме TCP, предоставен от API на LwIP от гол метал. Тъй като и двамата членове на проекта са относително неопитни с мрежовите помощни програми, този избор е направен без да се отчитат напълно последиците и ограниченията, свързани с TCP. Основният проблем с това внедряване беше ограничената честотна лента и фактът, че тя наистина не е предназначена за пренасяне на големи обеми данни. Алтернативни решения за замяна на TCP и подобряване на този проект ще бъдат обсъдени по -късно.

Кратко описание на TCP с LwIP: Данните се изпращат по мрежата в пакети с размер tcp_mss (максимален размер на сегмента на TCP), който обикновено е 1460 байта. Извикването на tcp_write ще отнеме някои данни, посочени от показалец, и ще конфигурира pbufs (пакетни буфери), за да съхранява данните и да осигурява структура за TCP операциите. Максималното количество данни, което може да бъде поставено на опашка наведнъж, е зададено като tcp_snd_buf (TCP изпращащо буферно пространство). Тъй като този параметър е 16 -битово число, ние сме ограничени до размер на буфера за изпращане от 59695 байта (има известно задължително уплътняване в изпращащия буфер). След като данните бъдат поставени на опашка, tcp_output се извиква, за да започне предаването на данните. Преди да изпратите следващия сегмент от данни, е наложително всички предишни пакети да са предадени успешно. Този процес се извършва с помощта на функцията recv_callback, тъй като това е функцията, която се извиква, когато потвърждението се вижда от приемника.

Използването на примерните проекти във Vivado SDK е много полезно за научаване как работи LwIP TCP операцията и е добра отправна точка за започване на нов проект.

Процедурата за предавателното устройство WiDi е както следва:

  1. Инициализирайте TCP мрежата, като използвате извикванията на функцията на LWIP драйвера от гол метал.
  2. Посочете всички функции за обратно повикване, необходими за мрежови операции.
  3. Свържете се с WiDi приемника, като се свържете към неговия IP адрес и порт (нашата конфигурация: IP на приемника е 192.168.0.9, свържете се към порт 7).
  4. Когато таймерът на драйвера на VDMA изтече, въведете TX ISR.
  5. Определете текущия рамков буфер за достъп въз основа на сивия код на VDMA
  6. Поставете на опашка първия сегмент от данни в TCP изпращащия буфер
  7. Изведете данните и актуализирайте локалните променливи, за да следите колко данни са изпратени за текущия кадър.
  8. При достигане на полученото обратно повикване (извикване на функция, направено след като предавателят получи потвърждение за извличане на данни), поставете в опашката следващия сегмент от данни.
  9. Повторете стъпки 7 и 8, докато целият кадър бъде изпратен.
  10. Върнете се в състояние на празен ход, за да изчакате следващото прекъсване на таймера, за да покажете, че нов кадър е готов (Назад към стъпка 4).

Уверете се, че сте настроили настройките за поддръжка на платката LwIP, както е показано на изображението по -горе. Всички стойности са по подразбиране с изключение на tcp_snd_buf, tcp_pueue_ooseq, mem_size, memp_n_tcp_seg. Също така имайте предвид, че подробно отстраняване на грешки може да бъде постигнато чрез промяна на параметрите на BSP за групата debug_options.

Стъпка 6: Настройка на Zynq Processing System за получаване на данни чрез Ethernet

Платката за разработка на Zybo, която ще действа като безжичен приемник, ще работи подобно на предаващото устройство. Настройките на пакета за поддръжка на платката за LwIP ще бъдат идентични с тези в предишната стъпка.

Устройството ще приема пакети, съдържащи сегментите на видеокадрите от нанороутера, и ще копира данните от видеокадъра в буферното пространство с три кадъра за приемащия VDMA. За да се избегне презаписване на всякакви данни, се използва двоен буфер за данни (ние ще го наричаме мрежов буфер) при събиране на данни от нанорутера, така че мрежовият трафик да може да продължи поточно, докато предишният пълен видео кадър се копира в VDMA буфер.

Процедурата за приемащото устройство WiDi изисква две задачи, едната от които е получаване на данни от ethernet, а другата е копиране на видеокадри от мрежовия буфер в буфера с трите кадъра на VDMA.

Задача за приемане на Ethernet:

  1. Инициализирайте TCP мрежата, като използвате извикванията на функцията на LWIP драйвера от чист метал (настройка с IP адрес, към който предавателят ще се свърже, 192.168.0.9 в нашия)
  2. Посочете всички функции за обратно повикване, необходими за мрежови операции.
  3. След като получите ethernet пакет, копирайте пакетни данни в текущия мрежов буфер, увеличете текущите натрупани данни.
  4. Ако пакетът запълва буфера на мрежовата рамка, продължете към стъпки 5 и 6. В противен случай се върнете към стъпка 3 от тази задача.
  5. сигнал, че задачата за буфер с три кадъра VDMA трябва да се копира от току -що завършения мрежов буфер.
  6. Преминете към другия мрежов буфер и продължете да събирате данни през ethernet.
  7. Бездейства, докато не се получи нов ethernet пакет (стъпка 3).

Копиране на мрежовия буфер във VDMA буфер с трите кадъра:

  1. Когато таймерът на драйвера на VDMA изтече, въведете RX ISR.
  2. Определете текущия рамков буфер за достъп въз основа на сивия код на VDMA.
  3. Определете кой мрежов буфер ще бъде копиран във VDMA буфера и копирайте тези данни

Стъпка 7: Свържете вашите Zybo платки към HDMI източника и HDMI мивката

Свържете вашите Zybo платки към HDMI източника и HDMI мивката
Свържете вашите Zybo платки към HDMI източника и HDMI мивката

Сега свържете hdmi кабелите както за приемника, така и за предавателя, програмирайте FPGA и стартирайте системата за обработка. Скоростта на кадрите вероятно ще бъде много бавна, поради огромните режийни разходи при операцията LwIP и ограничената честотна лента. Ако има някакви проблеми, свържете се чрез UART и се опитайте да идентифицирате всички предупреждения или грешки.

Стъпка 8: Алтернативни идеи за подобрение

Алтернативни идеи за подобрение
Алтернативни идеи за подобрение

Голям проблем за този проект беше количеството данни, необходимо за изпращане по wifi. Това беше очаквано, но ние подценихме въздействието, което това би имало и доведохме до по -скоро изблик на изображения на екран, а не във видео емисия. Има няколко начина за подобряване на този проект:

  • Компресиране на видео в реално време. Компресирането на входящия видео емисия кадър по кадър би намалило значително количеството данни, необходими за изпращане по мрежата. В идеалния случай това би било направено в хардуер (което не е лесна задача), или може да бъде направено в софтуер, като се използва другото ядро на ARM за изпълнение на алгоритми за компресия (това ще изисква допълнителен анализ, за да се гарантира, че времето работи). Има някои компоненти за компресиране на видео в реално време с отворен код, които открихме в мрежата, но мнозинството са IP.
  • Внедряване на Ethernet поток в хардуер, а не в софтуер. Имаше много режийни разходи поради липсата на място за разполагане на опашката за изходящи данни в предавателя, поради ограничението в размера на сегмента. Много по -ефективен процес е използването на AXI Ethernet IP с FIFO буфер или DMA за подаване на данни в него. Това би намалило допълнителния багаж от LwIP TCP и би позволило по -голям поток от данни.

Стъпка 9: Достъпност

Резултатът от този проект на WiDi трябва да бъде напълно интегрирана, компактна двойка устройства, които потребителят може да свърже към всеки HDMI източник и след това да потопи видео емисията към дисплей с възможност за HDMI по безжичен път. Устройствата ще включват Zynq-7000 SoC, намерен на референтната платка Zybo, и ще включват мрежовия хардуер, открит в нано-рутерите TP-Link. В идеалния случай потребителят би могъл да контролира предавателния модул от дискретно място в целевата операционна система, с малка нужда от значителни технически възможности.

Сигурност и свързаност

Устройствата трябва също да включват защита на транспортния слой (TLS) и да имат ограничени възможности за автоматично свързване, както за целите на поверителността. Намерението на дизайнерите е да направят връзката с дисплей през безжичен интерфейс умишлено действие от името на потребителя, за да се избегне погрешно излъчване на чувствителни материали.

Настоящо състояние

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

Данните, изпращани по мрежата, на този етап не са криптирани и се приема, че са сурово предаване на TCP/IP пакети.

Проектът за видео ядро е успешно тестван както за предаване, така и за приемане. От друга страна, безжичната връзка между две zybo платки беше установена и данните от тестовия кадър бяха изпратени успешно. Все още е необходимо обаче да се комбинира мрежовият код към всеки видеоядрен проект и да се тества предаването на реални видеокадри.

Препоръчано: