فهرست مطالب:
- مرحله 1: پیکربندی منطق قابل برنامه ریزی Zynq برای فرستنده
- مرحله 2: منطق قابل برنامه ریزی Zynq را برای گیرنده پیکربندی کنید
- مرحله 3: درایور VDMA را راه اندازی کنید
- مرحله 4: راه اندازی شبکه Nanorouter
- مرحله 5: راه اندازی سیستم پردازش Zynq برای انتقال داده از طریق اترنت
- مرحله 6: راه اندازی سیستم پردازش Zynq برای دریافت داده از طریق اترنت
- مرحله 7: برد های Zybo خود را به منبع HDMI و سینک HDMI وصل کنید
- مرحله 8: ایده های جایگزین برای بهبود
- مرحله 9: دسترسی
تصویری: WIDI - HDMI بی سیم با استفاده از Zybo (برد توسعه Zynq): 9 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:56
آیا تا به حال آرزو کرده اید که بتوانید تلویزیون خود را به عنوان مانیتور خارجی به رایانه یا لپ تاپ متصل کنید ، اما نمی خواهید همه آن سیم های مزاحم را در راه داشته باشید؟ اگر چنین است ، این آموزش فقط برای شماست! در حالی که برخی محصولات وجود دارد که به این هدف می رسند ، یک پروژه DIY بسیار رضایت بخش تر و به طور بالقوه ارزان تر است.
این مفهوم با محصولاتی مانند chromecast متفاوت است ، زیرا قصد دارد به جای اینکه یک دستگاه پخش کننده باشد ، جای سیم HDMI متصل به مانیتور را بگیرد.
پروژه ما به عنوان پروژه نهایی برای دوره سیستم های عامل زمان واقعی در دانشگاه پلی تکنیک ایالت کالیفرنیا ، سان لوئیس اوبیسپو ایجاد شد.
هدف این پروژه استفاده از دو برد Digilent Zybo است تا به عنوان رابط ارتباطی بی سیم بین یک دستگاه فرستنده HDMI (رایانه ، Blu-ray و غیره) به یک دستگاه گیرنده HDMI (مانیتور رومیزی ، پروژکتور ، تلویزیون و غیره) عمل کند.
یکی Digilent Zybo از طریق HDMI به دستگاه فرستنده و دیگری از طریق HDMI به دستگاه گیرنده متصل می شود.
ارتباط بی سیم با استفاده از یک شبکه محلی بی سیم اختصاص داده شده به فرستنده و گیرنده ، بدون مسیریابی از طریق روتر خانگی یا سایر دستگاه ها انجام می شود. ماژول وایرلس مورد استفاده برای این پروژه tplink wr802n nanorouter است که یکی از آنها به عنوان نقطه دسترسی برای ایجاد شبکه و دیگری برای کارکردن به عنوان سرویس گیرنده برای اتصال به شبکه عمل می کند. هر نانو روتر از طریق کابل اترنت به هر دو برد Zybo متصل می شود. هنگامی که به این روترها متصل می شوید ، دستگاهها از طریق TCP مانند یک کابل اترنت متصل می شوند (به این معنی که تنها پیکربندی مورد نیاز برای برقراری ارتباط آدرس IP سرویس گیرنده است).
در حالی که هدف پروژه تسهیل جریان 1080x720 ویدئو @ 60Hz بود ، به دلیل محدودیت پهنای باند در شبکه بی سیم و عدم فشرده سازی ویدئویی در زمان واقعی برای کاهش داده های مورد نیاز برای ارسال ، این امر امکان پذیر نبود. در عوض ، این پروژه به عنوان چارچوبی برای توسعه آینده برای دستیابی به این هدف عمل می کند ، زیرا محدودیت های نرخ فریم را برای پخش صحیح داده های HDMI مطابق هدف بسیار محدود کرده است.
شرایط پروژه:
2x هیئت توسعه Digilent Zybo (باید حداقل یک پورت HDMI داشته باشد)
2 برابر کابل HDMI
2 برابر کابل microusb (برای اتصال Zybo به رایانه برای توسعه)
2 برابر نانو روتر tplink wr802n (شامل adtl. 2 برابر میکروسوپ و آداپتورهای برق خروجی دیوار)
2 برابر کابل اترنت
*** توجه: این آموزش شامل آشنایی با مجموعه طراحی Vivado و تجربه ایجاد یک پروژه جدید و طراحی بلوک است. ***
مرحله 1: پیکربندی منطق قابل برنامه ریزی Zynq برای فرستنده
رویکرد ما برای توسعه منطق قابل برنامه ریزی فرستنده این بود که از طریق کامپیوتر از مانیتور hdmi-to-hdmi برای نظارت با استفاده از دو بلوک Video Direct Memory Access (VDMA) استفاده کنیم ، یکی برای نوشتن و دیگری برای خواندن.
هر دو برای اجرای رایگان ، 3 حالت فریم بافر (0-1-2) انتخاب شده اند. از آنجا که هسته ویدئو برای 60 فریم در ثانیه بهینه شده است ، این بدان معناست که VDMA هر 16.67 میلی ثانیه را به این ترتیب به یک فریم جدید می نویسد یا می خواند: 0 ، 1 ، 2 ، 0 ، 1 ، 2 ، 0 ، 1 ، 2. مکان های حافظه DDR برای هر فریم برای دو VDMA متفاوت است زیرا دیگر با یکدیگر هماهنگ نیستند. در عوض ، یک تایمر سخت افزاری (TTC1) ، پیکربندی شده برای 60 هرتز ، برای همگام سازی حرکت داده ها بین دو مکان حافظه استفاده می شود.
تصویر بالا 3 فریم ، ابعاد آنها و میزان حافظه مورد نیاز هر کدام (در سمت راست قاب) را نشان می دهد. اگر VDMA نوشتن را به این مکان های حافظه اختصاص دهیم ، می توانیم مکان های حافظه VDMA خوانده شده را فراتر از این مجموعه ، با شروع از 0x0B000000 ، اختصاص دهیم. هر فریم از 1280*720 پیکسل و هر پیکسل از 8 بیت قرمز ، سبز و آبی و در مجموع 24 بیت تشکیل شده است. این بدان معناست که یک فریم از 1280*720*3 بایت (2.76 مگابایت) تشکیل شده است.
در داخل تایمر IRQ ، که در تنظیمات درایور VDMA توضیح داده شده است ، کپی داده ها بین دو محل حافظه VMDA انجام می شود. VDMA یک اشاره گر به فریم فعلی که در آن نوشته یا خوانده می شود ، ارائه می دهد. قاب با یک کد خاکستری خاص نشان داده شده است ، که در نرم افزار تبدیل می شود. تعاریف کد خاکستری برای پیکربندی بافر 3 فریم را می توانید در راهنمای محصول AXI VDMA در پیوست C پیدا کنید.
این به ما این امکان را می دهد که محتویات در حال نوشتن را در حافظه کپی کنیم بدون اینکه از چارچوبی که در حال حاضر در آن نوشته شده است بخوانیم.
*** توجه داشته باشید که VDMA خوانده شده هنگام ارسال داده در سراسر شبکه بی سیم استفاده نمی شود. تنها هدف آن تأیید عملکرد مناسب کپی حافظه از نوشتن VMDA است. VMDA خوانده شده باید غیرفعال باشد. ***
در اینجا مراحل ایجاد بلوک طراحی فرستنده آمده است:
- هنگام ایجاد یک پروژه جدید ، ایده خوبی است که یک تراشه یا برد را به پروژه اختصاص دهید. این پیوند نحوه افزودن فایلهای هیئت مدیره جدید به فهرست Vivado و مرتبط کردن برد صحیح با پروژه شما را توضیح می دهد. هنگام افزودن بلوک پردازش سیستم و انتقال از سخت افزار به نرم افزار (در کنار SDK) ، مفید خواهد بود.
-
بلوک های زیر را اضافه کنید:
- dvi2rgb
- ویدئو در جریان Axi4
- کنترل کننده زمان بندی
- axi4-stream برای پخش مستقیم
- rgb2dvi
- AXI VDMA x2
- AXI GPIO x2
- جادوگر ساعت
- مقدار ثابت
- سیستم پردازش Zynq
- هنگام افزودن سیستم پردازش ، روی نوار سبز رنگ بالای "اجرای بلوک خودکار" کلیک کنید و مطمئن شوید که گزینه "Apply Board Preset" انتخاب شده است. بقیه موارد را پیش فرض بگذارید.
- تصاویر هر پنجره پیکربندی بلوک را می توانید در تصاویر بالا مشاهده کنید. اگر تصویری را برای پنجره خاصی نمی بینید ، فقط آن را به عنوان پیش فرض بگذارید.
-
پیکربندی سیستم پردازش Zynq را شروع کنید:
- در پیکربندی PS-PL AXI Non Secure Enable GP Master AXI ، رابط M AXI GP0 را فعال کنید
- در PS-PL Configuration HP Slave AXI Interface ، هم HP0 و هم HP1 را فعال کنید
- در MIO Configuration مطمئن شوید ENET0 در قسمت I/O Peripherals ، سپس Application Processor Unit ، Timer0 را فعال کنید.
- در Clock Configuration PL Fabric Clocks ، FCLK_CLK0 را فعال کرده و روی 100 مگاهرتز تنظیم کنید.
- روی Ok کلیک کنید
- قبل از کلیک روی "Run Connection Automation" ، مطمئن شوید که بلوک های ویدئویی را همانطور که در تصویر طراحی بلوک TX در بالا مشاهده می کنید ، متصل کنید. شما می خواهید نام ثابت را به VDD تغییر دهید و مقدار را به 1 تنظیم کنید.
- ساعت HDMI TMDS و پین های داده را در بلوک های rgb2dvi و dvi2rgb خارجی کنید
- ایجاد یک پورت ورودی و خروجی برای سیگنال تشخیص پلاگین گرم (HPD) و اتصال آنها به یکدیگر ، اینها در فایل محدودیت ها تعریف شده است
-
ساعت پیکسلی از TMDS_Clk_p بازیابی می شود که در فایل محدودیت ها ایجاد می شود. این فرکانس 74.25 مگاهرتز مطابق با رزولوشن 720p خواهد بود. مهم است که ساعت پیکسل (از بلوک dvi2rgb) را به پین های زیر وصل کنید:
- vid_io_in_clk (vid in to axi block block)
- vid_io_out_clk (جریان axi به vid out block)
- clk (کنترل زمان)
- PixelClk (rgb2dvi)
- *** توجه: در حال حاضر ، برای فعال سازی بازیابی ساعت پیکسلی ، اتصال HDMI rx و tx باید به منبع/سینک فعال وصل شود. یک راه حل این است که بلوک های ویدئویی rx و tx را در حوزه های مختلف ساعت جدا کنید (به عبارت دیگر ، یک ساعت 74.25 مگاهرتز جدید ایجاد کنید تا به بلوک tx منتقل شود). ***
- سپس جادوگر ساعت را طوری تنظیم کنید که یک ورودی 100 مگاهرتز (منبع بافر جهانی) و 3 ساعت خروجی در 50 مگاهرتز (ساعت AXI-Lite) ، 150 مگاهرتز (ساعت AXI4-Stream) ، 200 مگاهرتز (پین RefClk dvi2rgb) داشته باشید.
- پین سیستم پردازش FCLK_CLK0 را به ورودی جادوگر ساعت وصل کنید
- در این مرحله روی "Run Connection Automation" از نوار سبز رنگ بالای پنجره طراحی کلیک کنید. ایده خوبی است که این کار را برای یک بلوک در یک زمان انجام دهید و تصویر طراحی بلوک TX را در بالا دنبال کنید.
- این ابزار سعی می کند AXI Interconnect را اضافه کند ، که به عنوان اتصال اصلی و جانبی برای بلوک هایی که از گذرگاه AXI-Lite (VDMA و GPIO) استفاده می کنند عمل می کند.
- همچنین AXI SmartConnect را اضافه می کند ، که به عنوان رابط اصلی/برده برای رابط های پردازنده AXI4-Stream و High Performance که توسط VDMA استفاده می شود (جریان به حافظه نقشه و بالعکس) عمل می کند.
- این ابزار همچنین تنظیم مجدد سیستم پردازنده را اضافه می کند. مطمئن شوید این فقط به VDMA ها ، GPIO ها و بلوک های مربوط به پردازنده متصل است. آن را به هیچ بلوک ویدئویی وصل نکنید (به عنوان مثال dvi2rgb ، کنترل زمان ، ویدیو برای پخش و غیره)
- پس از اتمام اتوماسیون اتصال ، بررسی کنید که اتصالات با تصویر طراحی بلوک TX مطابقت دارد. شما متوجه یک بلوک اضافی System ILA می شوید که ذکر نشده است. این فقط برای اشکال زدایی است و فعلاً مورد نیاز نیست. از 150 Reset Processor Reset استفاده می کند ، بنابراین به آن نیز نیازی نیست. در هر جایی که "اشکالات" سبز کوچکی را در اتوبوس ها مشاهده می کنید ، این به خاطر ILA است و می توان آن را نادیده گرفت.
- آخرین مرحله این است که روی طرح بلوک در درخت منابع پروژه راست کلیک کرده و "Create HDL Wrapper" را انتخاب کنید. اگر قصد دارید منطق را به بسته بندی اضافه کنید ، هر بار که این مورد انتخاب می شود ، رونویسی می شود.
- برای اطلاع از جزئیات در قسمت SDK ، به بخش راه اندازی درایور VDMA مراجعه کنید.
ساعت و تنظیم مجدد
من دریافتم که مهمترین جنبه های هر پروژه منطقی قابل برنامه ریزی ، توجه دقیق به حوزه های ساعت و تنظیم مجدد سیگنال ها است. اگر آنها به درستی پیکربندی شده اند ، می توانید از طراحی خود به خوبی استفاده کنید.
ساعت پیکسل و زمان قفل شده است
برای اطمینان از فعال بودن سیگنال های خاص ، ایده خوبی است که این سیگنال ها را به LED (ساعت ، تنظیم مجدد ، قفل و غیره) وصل کنید. دو سیگنالی که برای ردیابی روی برد فرستنده مفید بود ، ساعت پیکسلی و سیگنال "قفل شده" در AXI4-Stream برای جلوگیری از خروج ویدیو بود ، که به شما می گوید زمان بندی ویدیو با کنترل زمان بندی و منبع ویدئو هماهنگ شده است. داده ها. من منطقی را به بسته بندی بلوک طراحی اضافه کردم که ساعت پیکسل را با استفاده از سیگنال PixelClkLocked در بلوک dvi2rgb به عنوان تنظیم مجدد ردیابی می کند. من فایل را به عنوان hdmi_wrapper.v در اینجا ضمیمه کرده ام. فایل محدودیت ها نیز در اینجا ضمیمه شده است.
مرحله 2: منطق قابل برنامه ریزی Zynq را برای گیرنده پیکربندی کنید
بلوک منطقی قابل برنامه ریزی برای گیرنده ساده تر است. تفاوت اصلی ، به غیر از بلوک های ورودی hdmi گم شده ، عدم وجود یک ساعت پیکسلی بازیابی شده است. به همین دلیل ما باید خودمان را از جادوگر ساعت تولید کنیم. این طراحی باید در پروژه ای جدا از فرستنده انجام شود. برای اهداف ما ، پروژه گیرنده از برد Zybo 7Z-20 و فرستنده از برد Z7-10 پیروی کرد. FPGA های روی تخته ها متفاوت است بنابراین … مراقب باشید.
مراحل ایجاد بلوک طراحی گیرنده در اینجا آمده است:
-
بلوک های IP زیر را به طرح خود اضافه کنید:
- کنترل کننده زمان بندی
- جریان AXI4-Out to Video Out
- RGB به DVI
- AXI VDMA
- AXI GPIO
- سیستم پردازش
- جادوگر ساعت
- ثابت (VDD روی 1 تنظیم شده است)
- برای پیکربندی این بلوک ها مانند فرستنده ، از همان الگو پیروی کنید. تصاویر تفاوت های قابل توجه در پیکربندی در اینجا گنجانده شده است. بقیه همان فرستنده باقی می مانند.
- VDMA را برای این طرح فقط به عنوان کانال خوانده شده پیکربندی کنید. کانال نوشتن را غیرفعال کنید
-
جادوگر ساعت باید برای خروجی های زیر پیکربندی شود:
- clk_out1: 75 مگاهرتز (ساعت پیکسلی)
- clk_out2: 150 مگاهرتز (ساعت جریان)
- clk_out3: 50 مگاهرتز (ساعت محور محور)
- بلوک های ویدئویی را همانطور که در تصویر طراحی بلوک RX نشان داده شده است ، متصل کنید.
- سپس اتوماسیون اتصال را اجرا کنید ، که بلوک های AXI Interconnect ، AXI SmartConnect و System Reset را اضافه کرده و سعی می کند اتصالات مناسب را ایجاد کند. به آرامی به اینجا بروید تا مطمئن شوید که اتصالات ناخواسته را انجام نمی دهد.
- ساعت HDMI TMDS و پین های داده را در بلوک rgb2dvi خارجی کنید
- در این طرح نیازی به سیگنال پلاگین داغ نیست.
مرحله 3: درایور VDMA را راه اندازی کنید
راه اندازی بلوک های مختلف که از طریق رابط AXI-Lite پیکربندی شده اند ، بهتر است با استفاده از پروژه های نمایشی همراه با BSP به عنوان مرجع انجام شود. پس از صادرات سخت افزار طراحی و راه اندازی SDK از Vivado ، می خواهید بسته پشتیبانی جدیدی را اضافه کنید و کتابخانه lwip202 را در پنجره تنظیمات BSP قرار دهید. فایل فایل system.mss را از BSP باز کنید و درایورهای جانبی موجود در طرح بلوک خود را مشاهده خواهید کرد. گزینه "وارد کردن نمونه ها" به شما امکان می دهد پروژه های نمایشی را که از این وسایل جانبی استفاده می کنند وارد کنید و در نتیجه نحوه پیکربندی آنها را در نرم افزار با استفاده از درایورهای موجود Xilinx نشان می دهد (به تصویر پیوست مراجعه کنید).
این روشی بود که برای پیکربندی VDMA ، Timer & Interrupt و GPIO استفاده می شد. کد منبع برای ارسال و دریافت در اینجا قرار داده شده است. تفاوتها تقریباً منحصر به فرد در main.c.
*** توجه: از آنجا که سیستم در زمان نگارش این آموزش به طور کامل کار نمی کند ، کد منبع در این بخش شامل کد شبکه بی سیم نیست. در نتیجه ترکیب پروژه های انتقال/دریافت هسته ویدیویی با پروژه های انتقال/دریافت شبکه ، چندین اشکال باید برطرف شوند. بنابراین این آموزش در حال حاضر آنها را جداگانه درمان می کند. ***
عملکرد کنترل کننده وقفه TX (IRQHandler)
این تابع کدهای خاکستری ارائه شده توسط VDMA های خواندن و نوشتن را از طریق بلوک های GPIO می خواند. کدهای خاکستری به اعشاری تبدیل می شوند و برای انتخاب محل حافظه پایه فریم قاب فعلی استفاده می شوند. فریم کپی شده ، فریم قبلی است که توسط VDMA نوشته شده است (به عنوان مثال اگر VDMA در فریم 2 می نویسد ، قاب 1 را کپی می کنیم ؛ اگر در فریم 0 می نویسیم ، از قاب 2 می پیچیم و می خوانیم).
این عملکرد فقط هر 6 فریم را ضبط می کند تا نرخ فریم را به جای 60 هرتز به 10 هرتز کاهش دهد. حد بالای شبکه 300 مگابیت بر ثانیه است. با سرعت 10 فریم بر ثانیه پهنای باند 221.2 مگابیت بر ثانیه مورد نیاز است.
نظر دادن/عدم اظهار نظر دو خط در این تابع به کاربر اجازه می دهد تا برای اشکال زدایی/آزمایش به حالت HDMI passthru تغییر کند (کد برای نشان دادن خطوط مناسب توضیح داده می شود). در حال حاضر فریم را در یک مکان حافظه که توسط کد اترنت استفاده می شود کپی می کند.
عملکرد کنترل کننده وقفه RX (IRQHandler)
این عملکرد بسیار شبیه به عملکرد TX است ، اما از یک FIFO بافر 2 که توسط اترنت برای نوشتن داده های ورودی به آن استفاده می شود ، کپی می کند. کد اترنت نشان می دهد که کدام قاب در FIFO نوشته می شود ، داده ها از قاب مقابل کپی می شوند. داده ها برای جلوگیری از پاره شدن ، مستقیماً در قاب پشت صفحه ای که توسط VDMA خوانده می شود کپی می شود.
مرحله 4: راه اندازی شبکه Nanorouter
به منظور ایجاد یک شبکه با استفاده از نانو روترهای TPlink ، آنها را به صورت جداگانه روشن کرده و به وای فای SSID پیش فرض دستگاه ها وصل شوید. اطلاعات بیشتر در مورد تنظیمات پیکربندی این دستگاه خاص را می توانید از طریق دفترچه راهنمای کاربر دستگاه پیدا کنید.
یکی از دستگاه ها را به عنوان نقطه دسترسی تنظیم کنید ، این به عنوان اتصال اصلی شبکه عمل می کند. مطمئن شوید که نام شبکه را ذکر کرده و نام آن را یادداشت کنید و DHCP را غیرفعال کنید (ما نمی خواهیم روتر آدرس IP را به صورت پویا پیکربندی کند ، ما می خواهیم که بردهای Zybo tansmitter و گیرنده آدرس های IP خود را به گونه ای تنظیم کنند که سازگار باشند). پس از پیکربندی ، مطمئن شوید دستگاه راه اندازی مجدد شده و این شبکه را ایجاد می کند.
دستگاه دیگر را به عنوان سرویس گیرنده تنظیم کنید و مطمئن شوید که به SSID شبکه ای که با اولین نانو روتر تنظیم کرده اید متصل شود. یکبار دیگر ، مطمئن شوید DHCP برای کلاینت غیرفعال است.
پس از اتمام و راه اندازی مجدد سرویس گیرنده ، باید به نانوسطح نقطه دسترسی متصل شود (در غیر این صورت ، احتمالاً در پیکربندی یکی از دستگاه ها مشکلی وجود دارد). متوجه خواهید شد که چراغ LED روی سرویس گیرنده پس از اتصال به نقطه دسترسی ، محکم می شود.
LED نقطه نانو روتر نقطه دسترسی به احتمال زیاد در این نقطه چشمک می زند ، این خوب نیست! چراغ چشمک زن به این معنی است که از درگاه اترنت خود به دستگاه دیگری متصل نشده است و پس از اتصال به Zybo پیکربندی شده ، LED ثابت باقی می ماند و نشان دهنده اتصال موفق شبکه است.
اکنون که راه اندازی نانو روترهای خود را داریم ، یک شبکه بی سیم داریم که به ما امکان می دهد از طریق آن ارتباط برقرار کنیم. نکته مهم این است که روش پیکربندی ما برای نانوسیرها (به عنوان نقطه دسترسی و سرویس گیرنده) به ما اجازه می دهد از برد Zybo فرستنده به برد Zybo دریافت کننده ارتباط برقرار کنیم ، گویی این دو با یک سیم اترنت واحد متصل شده اند. این باعث می شود که راه اندازی شبکه ما کمتر دشوار باشد ، زیرا جایگزین به احتمال زیاد شامل پیکربندی تخته های Zybo برای اتصال صریح به سرور همراه با اتصال مورد نظر است.
پس از راه اندازی هر دو دستگاه ، نانوسیرها پیکربندی شده و آماده پیاده سازی در شبکه WIDI شما هستند. هیچ جفتگیری خاصی بین نانروورترها و برد های Zybo وجود ندارد ، زیرا نقطه دسترسی یا سرویس گیرنده برای دستگاه ارسال یا دریافت کار می کند.
مرحله 5: راه اندازی سیستم پردازش Zynq برای انتقال داده از طریق اترنت
به منظور انتقال داده های HDMI از یک برد Zybo به برد دیگر ، باید یک پروتکل اترنت را با درایور VDMA خود ترکیب کنیم. هدف ما در اینجا این است که فریم های ویدیویی جداگانه را از طریق دستگاه جانبی اترنت در سیستم پردازش ، با نرخ تعیین شده مطابق با پهنای باند شبکه ما ، پخش کنیم. برای پروژه ما ، ما از TCP ارائه شده توسط API LwIP فلز برهنه استفاده کردیم. از آنجا که هر دو اعضای پروژه نسبت به ابزارهای شبکه بی تجربه هستند ، این انتخاب بدون شناخت کامل مفاهیم و محدودیت های مربوط به TCP انجام شد. مشکل اصلی این پیاده سازی پهنای باند محدود و این واقعیت بود که واقعاً به منظور بخار کردن حجم زیاد داده ها طراحی نشده است. راه حل های جایگزین برای جایگزینی TCP و بهبود tbe در این پروژه بعداً مورد بحث قرار می گیرد.
توضیح مختصری از 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 به شرح زیر است:
- راه اندازی شبکه TCP با استفاده از فراخوانی های عملکرد راننده LWIP فلزی برهنه.
- هرگونه عملکرد فراخوانی لازم برای عملیات شبکه را مشخص کنید.
- با اتصال به آدرس IP و پورت آن به گیرنده WiDi متصل شوید (پیکربندی ما: IP گیرنده 192.168.0.9 است ، به پورت 7 متصل شوید).
- وقتی تایمر درایور VDMA به پایان رسید ، ISR TX را وارد کنید.
- بافر فریم فعلی برای دسترسی را بر اساس کد خاکستری VDMA تعیین کنید
- صف اول بخش اول داده ها را در بافر ارسال TCP قرار دهید
- داده ها را خروجی داده و متغیرهای محلی را به روز کنید تا میزان داده های ارسال شده از فریم فعلی را پیگیری کنید.
- پس از دریافت پاسخ تماس دریافت شده (فراخوانی تابع پس از دریافت فرستنده از بازیابی اطلاعات) ، بخش بعدی داده ها را در صف قرار دهید.
- مراحل 7 و 8 را تکرار کنید تا کل فریم ارسال شود.
- به حالت آماده به کار بازگردید تا منتظر وقفه تایمر بعدی باشید تا نشان دهد فریم جدید آماده است (بازگشت به مرحله 4).
مطمئن شوید که تنظیمات بسته پشتیبانی LwIP را مطابق تصویر بالا تنظیم کرده اید. همه مقادیر به طور پیش فرض به جز tcp_snd_buf ، tcp_pueue_ooseq ، mem_size ، memp_n_tcp_seg هستند. همچنین توجه داشته باشید که اشکال زدایی دقیق را می توان با تغییر پارامترهای BSP برای گروه debug_options به دست آورد.
مرحله 6: راه اندازی سیستم پردازش Zynq برای دریافت داده از طریق اترنت
برد توسعه Zybo که به عنوان گیرنده بی سیم عمل می کند ، مشابه دستگاه فرستنده عمل می کند. تنظیمات بسته پشتیبانی هیئت مدیره برای LwIP مشابه تنظیمات مرحله قبل خواهد بود.
دستگاه بسته های حاوی بخش های فریم ویدئویی را از نانو روتر دریافت می کند و داده های فریم ویدیویی را در فضای بافر سه فریم برای VDMA دریافت کننده کپی می کند. به منظور جلوگیری از بازنویسی هرگونه داده ، هنگام جمع آوری داده ها از نانو روتر ، از یک بافر دوگانه داده (که ما آن را بافر شبکه می نامیم) استفاده می شود ، به طوری که ترافیک شبکه می تواند به جریان خود ادامه دهد در حالی که فریم ویدئویی قبلی قبلی در حال کپی در بافر VDMA
روش دستگاه گیرنده WiDi به دو وظیفه نیاز دارد که یکی از آنها دریافت داده های اترنت است و دیگری کپی فریم های ویدئویی از بافر شبکه در بافر فریم سه گانه VDMA است.
وظیفه دریافت اترنت:
- راه اندازی شبکه TCP با استفاده از فراخوانی های عملکرد راننده LWIP (نصب با آدرس IP که فرستنده به آن متصل می شود ، 192.168.0.9 در تلفن ما)
- هرگونه عملکرد فراخوانی لازم برای عملیات شبکه را مشخص کنید.
- پس از دریافت بسته اترنت ، داده های بسته را در بافر شبکه فعلی کپی کنید ، داده های انباشته فعلی را افزایش دهید.
- اگر بسته بافر فریم شبکه را پر می کند ، مراحل 5 و 6 را ادامه دهید. در غیر این صورت ، از این کار به مرحله 3 بازگردید.
- سیگنال این است که وظیفه بافر سه فریم VDMA باید از بافر شبکه تازه تکمیل شده کپی شود.
- به بافر شبکه دیگر بروید و به جمع آوری داده ها از طریق اترنت ادامه دهید.
- تا دریافت بسته جدید اترنت بیکار است (مرحله 3).
بافر شبکه را در بافر سه فریم VDMA کپی کنید:
- وقتی تایمر درایور VDMA منقضی شد ، RX ISR را وارد کنید.
- بافر فریم فعلی برای دسترسی را بر اساس کد خاکستری VDMA تعیین کنید.
- تعیین کنید که کدام بافر شبکه در بافر VDMA کپی شود و آن داده ها را کپی کنید
مرحله 7: برد های Zybo خود را به منبع HDMI و سینک HDMI وصل کنید
حالا کابلهای hdmi را برای گیرنده و فرستنده وصل کنید ، FPGA ها را برنامه ریزی کرده و سیستم پردازش را اجرا کنید. نرخ فریم به دلیل سربار زیاد در عملیات LwIP و پهنای باند محدود احتمالاً بسیار کند خواهد بود. در صورت وجود هرگونه مشکل ، از طریق UART متصل شوید و سعی کنید هشدارها یا خطاها را شناسایی کنید.
مرحله 8: ایده های جایگزین برای بهبود
مسئله بزرگ این پروژه میزان داده های مورد نیاز برای ارسال از طریق wifi بود. این مورد قابل پیش بینی بود ، با این حال ما تأثیر آن را دست کم گرفتیم و منجر به انفجار بیشتر تصاویر بر روی صفحه نمایش شد تا ویدئو. چندین راه برای بهبود این پروژه وجود دارد:
- فشرده سازی ویدئو در زمان واقعی فشرده سازی فریم به فریم ورودی ویدئویی مقدار داده های مورد نیاز برای ارسال از طریق شبکه را تا حد زیادی کاهش می دهد. در حالت ایده آل این کار در سخت افزار (که کار ساده ای نیست) انجام می شود ، یا می توان در نرم افزار با استفاده از هسته دیگر ARM برای اجرای الگوریتم های فشرده سازی این کار را انجام داد (این امر برای اطمینان از به پایان رساندن زمان نیاز به تجزیه و تحلیل بیشتری دارد). برخی از اجزای فشرده سازی ویدئوی منبع باز در زمان واقعی وجود دارد که در وب پیدا کردیم ، اما اکثر آنها IP هستند.
- پیاده سازی جریان اترنت در سخت افزار و نه نرم افزار. به دلیل محدودیت در اندازه بخش ، به دلیل کمبود فضای کافی برای صف بندی داده های خروجی در فرستنده ، مقدار زیادی سربار وجود داشت. یک فرآیند بسیار کارآمدتر استفاده از IP AXI Ethernet با یک بافر FIFO یا DMA برای وارد کردن داده ها به آن است. این امر باعث می شود که چمدان اضافی LwIP TCP کاهش یافته و جریان داده بیشتر انجام شود.
مرحله 9: دسترسی
محصول حاصله از این پروژه WiDi باید یک جفت دستگاه کاملاً یکپارچه و جمع و جور باشد که کاربر می تواند به هر منبع HDMI متصل کرده و سپس ویدئو را به صورت بی سیم به نمایشگری با قابلیت HDMI فرو برد. دستگاه ها دارای Zynq-7000 SoC موجود در برد مرجع Zybo هستند و سخت افزار شبکه موجود در نانو روترهای TP-Link را در خود جای می دهند. در حالت ایده آل ، کاربر می تواند ماژول انتقال را از یک مکان گسسته در سیستم عامل موردنظر ، بدون نیاز کمی به توانایی فنی مهم ، کنترل کند.
امنیت و قابلیت اتصال
دستگاه ها همچنین باید امنیت لایه حمل و نقل (TLS) را در خود جای داده و قابلیت اتصال خودکار محدودی داشته باشند ، هر دو به منظور حفظ حریم خصوصی. قصد طراحان این است که ارتباط با صفحه نمایش از طریق رابط بی سیم را به صورت عمدی از طرف کاربر انجام دهند تا از پخش اشتباه مطالب حساس جلوگیری شود.
وضعیت فعلی
تا این مرحله ، وضعیت پروژه هنوز در حال پیشرفت است. برای اینکه کاربر نهایی فعلی از این آموزش بهره مند شود ، باید درک فنی قوی از طراحی سیستم تعبیه شده داشته باشد و باید با سخت افزارهای قابل برنامه ریزی و نرم افزارهای تعبیه شده با هم آشنا باشد.
داده هایی که از طریق شبکه ارسال می شوند در این مرحله رمزگذاری نمی شوند و فرض بر این است که یک بسته خام بسته های TCP/IP هستند.
پروژه هسته ویدئویی برای انتقال و دریافت با موفقیت آزمایش شد. از سوی دیگر ، اتصال بی سیم بین دو برد زیبو برقرار شد و داده های فریم تست با موفقیت ارسال شد. با این حال ، همچنان لازم است که کد شبکه را در هر پروژه اصلی ویدیو ترکیب کرده و انتقال فریم های ویدیویی واقعی را آزمایش کنید.
توصیه شده:
برد بلند ، 1.8 کیلومتر ، ارتباط بی سیم آردوینو تا آردوینو با HC-12 .: 6 مرحله (همراه با تصاویر)
برد طولانی ، 1.8 کیلومتر ، ارتباطات بی سیم آردوینو تا آردوینو با HC-12. ماژول ارتباطی بسیار مفید ، بسیار قدرتمند و آسان برای استفاده است. ابتدا می روی
ریموت بی سیم با استفاده از ماژول NRF24L01 2.4 گیگاهرتز با آردوینو - Nrf24l01 گیرنده فرستنده 4 کانال / 6 کانال برای کوادکوپتر - هلیکوپتر Rc - Rc Plane با استفاده از آردوینو: 5 مرحله (همراه با تصاویر)
ریموت بی سیم با استفاده از ماژول NRF24L01 2.4 گیگاهرتز با آردوینو | Nrf24l01 گیرنده فرستنده 4 کانال / 6 کانال برای کوادکوپتر | هلیکوپتر Rc | Rc Plane با استفاده از آردوینو: برای کار با ماشین Rc | کوادکوپتر | هواپیمای بدون سرنشین | هواپیمای RC | قایق RC ، ما همیشه به گیرنده و فرستنده نیاز داریم ، فرض کنید برای RC QUADCOPTER به فرستنده و گیرنده 6 کاناله نیاز داریم و این نوع TX و RX بسیار پرهزینه است ، بنابراین ما یکی از آنها را در دستگاه خود تهیه می کنیم
نحوه برنامه ریزی برد AVR با استفاده از برد آردوینو: 6 مرحله
نحوه برنامه ریزی برد AVR با استفاده از برد Arduino: آیا یک برد میکروکنترلر AVR در اطراف خود قرار داده اید؟ آیا برنامه نویسی آن مشکل است؟ خوب ، شما در جای مناسب هستید. در اینجا نحوه برنامه ریزی برد میکروکنترلر Atmega8a با استفاده از برد Arduino Uno به عنوان برنامه نویس را به شما نشان خواهم داد. بنابراین بدون هیچ چیز بعدی
نشانگر سطح آب بی سیم با برد بلند با زنگ هشدار - برد تا 1 کیلومتر - هفت سطح: 7 مرحله
نشانگر سطح آب بی سیم با برد بلند با زنگ هشدار | برد تا 1 کیلومتر | هفت سطح: آن را در یوتیوب تماشا کنید: https://youtu.be/vdq5BanVS0Y ممکن است بسیاری از شاخص های سطح آب سیمی و بی سیم را مشاهده کرده باشید که برد 100 تا 200 متر را ارائه می دهند. اما در این دستورالعمل ، شما قرار است Indi سطح آب بی سیم برد بلند را ببینید
کوادکوپتر با استفاده از برد Zybo Zynq-7000: 5 مرحله
کوادکوپتر با استفاده از برد Zybo Zynq-7000: قبل از شروع کار ، مواردی را که برای پروژه می خواهید ذکر می کنیم: 14 موتور 1100 کیلو ولت بدون برس 4x