תוכן עניינים:

WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq): 9 שלבים (עם תמונות)
WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq): 9 שלבים (עם תמונות)

וִידֵאוֹ: WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq): 9 שלבים (עם תמונות)

וִידֵאוֹ: WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq): 9 שלבים (עם תמונות)
וִידֵאוֹ: 🧠 Miracast [DLNA/AirPlay/etc] что это и как пользоваться | ТЕОРИЯ 2024, יולי
Anonim
WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq)
WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq)
WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq)
WIDI - HDMI אלחוטי באמצעות Zybo (לוח פיתוח Zynq)

האם אי פעם רצית שתוכל לחבר את הטלוויזיה למחשב או למחשב נייד כצג חיצוני, אבל לא רצית שיהיו לך כל החבלים המציקים? אם כן, הדרכה זו היא בדיוק בשבילך! למרות שיש כמה מוצרים שמשיגים מטרה זו, פרויקט DIY הוא הרבה יותר מספק ואולי יותר זול.

רעיון זה שונה ממוצרים כמו Chromecast, מכיוון שהוא נועד לתפוס את מקומו של כבל HDMI המתחבר למסך במקום להיות מכשיר סטרימינג.

הפרויקט שלנו נוצר כפרויקט גמר לקורס מערכות הפעלה בזמן אמת באוניברסיטה הפוליטכנית של מדינת קליפורניה, סן לואיס אוביספו.

מטרת הפרויקט היא להשתמש בשני לוחות Digilent Zybo כדי לשמש כממשק התקשורת האלחוטי בין מכשיר משדר HDMI (מחשב, Blu-ray וכו ') להתקן קבלת HDMI (צג שולחן עבודה, מקרן, טלוויזיה וכו').

אחד Digilent Zybo יחובר באמצעות HDMI למכשיר המשדר, והשני יתחבר באמצעות HDMI למכשיר המקבל.

התקשורת האלחוטית תתבצע באמצעות רשת מקומית אלחוטית המוקדשת למשדר ולמקלט, מבלי שתנותב דרך נתב ביתי או מכשיר אחר כזה. המודול האלחוטי המשמש לפרויקט זה הוא ה- tplink wr802n nanorouter, שאחד מהם פועל כנקודת גישה להקמת הרשת והשני לפעול כלקוח לחיבור לרשת. כל נתב ננו יחובר באמצעות כבל אתרנט ללוח Zybo. כאשר הם מחוברים לנתבים אלה, ההתקנים יתקשרו באמצעות TCP כאילו הם מחוברים בכבל אתרנט יחיד (כלומר התצורה היחידה הדרושה ליצירת חיבור היא כתובת ה- IP של הלקוח).

למרות שמטרת הפרויקט הייתה להקל על זרם של וידאו 1080x720 @ 60Hz, לא ניתן היה להשיג זאת בשל מגבלות רוחב הפס ברשת האלחוטית והיעדר דחיסת וידיאו בזמן אמת כדי לצמצם את הנתונים הנדרשים לשליחה. במקום זאת, פרויקט זה משמש כמסגרת לפיתוח עתידי להשגת מטרה זו, שכן יש לו מגבלות קשות על קצב המסגרות להזרים כראוי נתוני HDMI כמתוכנן.

דרישות הפרויקט:

2 לוחות פיתוח של Digilent Zybo (חייב להיות לפחות יציאת HDMI אחת)

2x כבלי HDMI

2x כבלי microusb (לחיבור Zybo למחשב לפיתוח)

2x tplink wr802n nanorouters (כולל adtl. 2x microusb ומתאמי חשמל לשקע)

2x כבלי אתרנט

*** הערה: הדרכה זו מניחה היכרות עם חבילת העיצוב של Vivado וניסיון ביצירת פרויקט חדש ועיצוב בלוקים. ***

שלב 1: הגדר את הלוגיקה הניתנת לתכנות של Zynq למשדר

הגדר את הלוגיקה הניתנת לתכנות של Zynq למשדר
הגדר את הלוגיקה הניתנת לתכנות של Zynq למשדר
הגדר את הלוגיקה הניתנת לתכנות של Zynq למשדר
הגדר את הלוגיקה הניתנת לתכנות של Zynq למשדר
הגדר את לוגיקה הניתנת לתכנות של Zynq למשדר
הגדר את לוגיקה הניתנת לתכנות של 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 MB).

בתוך הטיימר IRQ, המתואר בהגדרת מנהל ההתקן של VDMA, יטפל בהעתקת נתונים בין שני מיקומי הזיכרון של VMDA. ה- VDMA מספק מצביע למסגרת הנוכחית שנכתבת אליה או נקראת ממנה. המסגרת מיוצגת על ידי קוד אפור מסוים, המומר בתוכנה. ניתן למצוא את הגדרות הקוד האפור לתצורת מאגר מסגרות 3 במדריך המוצר AXI VDMA בנספח C.

זה מאפשר לנו להעתיק את התוכן הנכתב לזיכרון מבלי לקרוא מתוך מסגרת שנכתבת אליה כרגע.

*** שים לב כי אין להשתמש ב- VDMA הנקרא בעת שליחת נתונים ברחבי הרשת האלחוטית. מטרתו היחידה היא לאמת את הפעולה התקינה של העתקת הזיכרון מה- VMDA לכתוב. יש להשבית את ה- VMDA הקריא. ***

להלן השלבים ליצירת בלוק עיצוב המשדר:

  1. בעת יצירת פרויקט חדש, כדאי להקצות לפרויקט שבב או לוח. קישור זה מתאר כיצד להוסיף קובצי לוח חדשים לספריית Vivado ולשייך את הלוח הנכון לפרויקט שלך. זה יהיה שימושי בעת הוספת בלוק מערכת העיבוד ומעבר מחומרה לתוכנה (בצד SDK).
  2. הוסף את הבלוקים הבאים:

    • dvi2rgb
    • סרטון נכנס ל- Axi4-stream
    • בקר תזמון
    • axi4-stream ל vid
    • rgb2dvi
    • AXI VDMA x2
    • AXI GPIO x2
    • אשף השעון
    • קָבוּעַ
    • מערכת עיבוד Zynq
  3. בעת הוספת מערכת העיבוד, לחץ על "הפעל בלוק אוטומציה" מהסרגל בצבע הירוק העליון וודא שהאפשרות "החל לוח קבוע מראש" נבחרה. השאר את כל השאר כברירת מחדל.
  4. ניתן למצוא תמונות של כל חלון תצורה של בלוק בתמונות שלמעלה. אם אינך רואה תמונה עבור חלון מסוים, השאר אותו כברירת מחדל.
  5. התחל בהגדרת מערכת עיבוד Zynq:

    • בתצורת PS-PL AXI לא מאובטח אפשר GP Master AXI, אפשר ממשק M AXI GP0
    • בממשק PS Sla PL ממשק HP Slave AXI, הפעל את HP0 ואת HP1 הן
    • בתצורת MIO ודא ENET0 מופעל תחת ציוד היקפי לקלט/פלט, ולאחר מכן יחידת מעבד יישומים, הפעל טיימר 0
    • בתצוגת שעוני בד PL Configuration Clock, הפעל את FCLK_CLK0 והגדר אותו ל- 100 MHz.
    • לחץ על אישור
  6. לפני לחיצה על "הפעל חיבור אוטומציה", הקפד לחבר את בלוקי הווידאו כפי שניתן לראות בתמונת עיצוב בלוק TX למעלה. תרצה לשנות את שם הקבוע ל- VDD ולהגדיר את הערך ל- 1. חבר את בלוקי הווידאו בהתאם.
  7. הפוך את שעון TMDS HDMI וסיכות הנתונים חיצוניות בלוקים rgb2dvi ו- dvi2rgb
  8. צור יציאת קלט ופלט לאות זיהוי התקע החם (HPD) וחבר אותם יחד, אלה מוגדרים בקובץ האילוצים
  9. שעון הפיקסלים משוחזר מה- TMDS_Clk_p, שנוצר בקובץ האילוצים. זה יהיה 74.25 מגה -הרץ בהתאם לרזולוציה של 720p. חשוב לחבר את שעון הפיקסלים (מהבלוק dvi2rgb) לפינים הבאים:

    • vid_io_in_clk (vid in to axi stream block)
    • vid_io_out_clk (axi stream to vid out block)
    • clk (בקר תזמון)
    • PixelClk (rgb2dvi)
  10. *** הערה: נכון לעכשיו, על מנת להפעיל את שחזור שעון הפיקסלים, יש לחבר את מחברי ה- rx ו- tx של HDMI למקור/כיור פעיל. אחת הדרכים לעקוף את זה היא להפריד את קובצי ה- rx וה- tx של הווידאו לתחומי שעון שונים (במילים אחרות, ליצור שעון חדש של 74.25 מגה -הרץ להזנה לגוש tx). ***
  11. לאחר מכן הגדר את אשף השעון כך שיהיה לך כניסה של 100 מגהרץ (מקור חיץ גלובלי) ו -3 שעוני פלט @ 50 מגהרץ (שעון AXI-Lite), 150 מגהרץ (שעון AXI4 זרם), 200 מגהרץ (סיכת dvi2rgb RefClk).
  12. חבר את סיכת מערכת העיבוד FCLK_CLK0 לקלט אשף השעון
  13. בשלב זה לחץ על "הפעל חיבור אוטומציה" מהסרגל הירוק בחלק העליון של חלון העיצוב. מומלץ לעשות זאת במשך בלוק אחד בכל פעם ולעקוב אחר תמונת העיצוב של בלוק TX למעלה.
  14. הכלי ינסה להוסיף את AXI Interconnect, המשמש כחיבור בין master/slave עבור הבלוקים המשתמשים באוטובוס AXI-Lite (VDMA ו- GPIO).
  15. הוא יוסיף גם AXI SmartConnect, המשמש כחיבור בין מאסטר/עבדים לממשקי מעבד AXI4-Stream ו- High Performance המשמשים את ה- VDMA (Stream to Memory Map ולהיפך).
  16. הכלי יוסיף גם איפוס מערכת מעבד. ודא שזה מחובר רק ל- VDMAs, GPIOs ובלוקים הקשורים למעבד. אל תחבר אותו לשום קובצי וידאו (כלומר dvi2rgb, בקר תזמון, וידיאו לזרם וכו ')
  17. לאחר שהושלמה אוטומציה של חיבורים, ודא שהחיבורים תואמים את זו של תמונת עיצוב בלוק TX. תבחין בחסימת מערכת ILA נוספת שלא הוזכרה. זה מיועד לאיתור באגים בלבד ואין בו צורך בינתיים. הוא משתמש באיפוס מעבד 150M, כך שגם זה לא נחוץ. בכל מקום שאתה רואה "באגים" ירוקים קטנים באוטובוסים, זה בגלל ה- ILA וניתן להתעלם ממנו.
  18. השלב האחרון הוא לחיצה ימנית על עיצוב הבלוק בעץ מקורות הפרויקט ובחירה באפשרות "צור עטיפת HDL". אם אתה מתכנן להוסיף לוגיקה לעטיפה, הוא ייחלף בכל פעם שהוא נבחר.
  19. עיין בסעיף הגדרת מנהל התקן VDMA לפרטים בצד ה- SDK.

שעונים ואיפוס

גיליתי שההיבטים החשובים ביותר של כל פרויקט לוגי הניתן לתכנות הוא שיקול מדוקדק של תחומי שעון ואותות איפוס. אם אלה מוגדרים כראוי יש לך יתרון טוב לגרום לעיצוב שלך לעבוד.

שעון פיקסל ותזמון נעולים

על מנת לוודא שאותות מסוימים פעילים, כדאי לקשור אותות אלה לנורות (שעונים, איפוס, מנעולים וכו '). שני אותות שמצאתי מועיל לעקוב אחר לוח המשדרים היו שעון הפיקסלים והאות "הנעול" בגוש AXI4 זרם וידיאו החוצה, מה שאומר לך שתזמון הווידאו סונכרן עם בקר התזמון ומקור הווידאו. נתונים. הוספתי קצת היגיון בעטיפת בלוק העיצוב העוקב אחר שעון הפיקסלים באמצעות האות 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 מגהרץ (שעון פיקסל)
    • clk_out2: 150 מגהרץ (שעון זרם)
    • clk_out3: 50 מגהרץ (שעון axi-lite)
  5. חבר את בלוקי הווידאו כפי שמוצג בתמונת עיצוב בלוק ה- RX.
  6. לאחר מכן הפעל את אוטומציית החיבור, אשר תוסיף את הבלוקים AXI Interconnect, AXI SmartConnect ו- Reset System ותנסה לבצע את החיבורים המתאימים. עבור לאט לכאן כדי לוודא שהוא לא מבצע חיבורים לא רצויים.
  7. הפוך את שעון TMDS HDMI וסיכות הנתונים לחיצוניות בגוש 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 הרץ ולא 60 הרץ. הגבול העליון של הרשת הוא 300 Mbps. במהירות של 10 פריימים לשנייה נדרשת רוחב פס של 221.2 Mbps.

הערה/ביטול הערות של שתי שורות בפונקציה זו תאפשר למשתמש לעבור למצב HDMI passthru למטרות איתור באגים/בדיקות (הערות הקוד מציינות את השורות המתאימות). כרגע הוא מעתיק את המסגרת למיקום זיכרון המשמש את קוד ה- ethernet.

RX פונקציית מטפל (IRQHandler)

פונקציה זו דומה מאוד לפונקציית TX, אך היא מעתיקה מ- FIFO 2 מאגר המשמש אתרנט כדי לכתוב אליו נתונים נכנסים. קוד ה- ethernet מציין לאיזו מסגרת נכתב ה- FIFO, הנתונים מועתקים מהמסגרת הנגדית. הנתונים מועתקים למסגרת ישירות מאחורי הקריאה על ידי ה- VDMA כדי להימנע מקריעה.

שלב 4: הגדרת רשת Nanorouter

הגדרת רשת Nanorouter
הגדרת רשת Nanorouter

על מנת ליצור רשת באמצעות חובשי הננו TPlink, הפעל אותם בנפרד והתחבר ל- SSID ה- WiFi המוגדר כברירת מחדל עבור המכשירים. מידע נוסף על הגדרות התצורה של מכשיר מסוים זה ניתן למצוא במדריך למשתמש של המכשיר.

הגדר את אחד המכשירים כנקודת גישה, זה ישמש כחיבור הראשי לרשת. הקפד לתת שם לרשת ולרשום את השם ולבטל את DHCP (אנחנו לא רוצים שהנתב יגדיר את כתובות ה- IP באופן דינמי, אנחנו רוצים שלוחות הטנסמיטר והמקלט Zybo יגדירו את כתובות ה- IP שלהם בעצמם כך שיהיו עקביים). לאחר קביעת התצורה, ודא שהמכשיר מופעל מחדש ומקים רשת זו.

התקן את המכשיר השני כלקוח וודא שהוא מתחבר לרשת ה- SSID של הרשת שהגדרת עם ה- nanorouter הראשון. שוב, ודא ש- DHCP מושבת עבור הלקוח.

לאחר שהלקוח סיים והופעל מחדש, עליו להתחבר לנקודת הגישה nanorouter (אם לא, סביר להניח שיש בעיה בתצורת אחד המכשירים שלך). תוכל להבחין כי נורת הלד בלקוח תהיה מוצקה לאחר חיבור לנקודת הגישה.

סביר להניח שנורית ה- nanorouter של נקודת הגישה תמשיך להבהב בשלב זה, זה בסדר! הנורית המהבהבת פירושה שהיא אינה מחוברת למכשיר אחר מיציאת ה- Ethernet שלה, וברגע שהיא מחוברת ל- Zybo מוגדר, נורית ה- LED תישאר קבועה ומעידה על חיבור רשת מוצלח.

כעת, לאחר שהגדרנו את נוסעי הננו -נוסעים שלנו, יש לנו רשת אלחוטית שתאפשר לנו לתקשר באמצעותה. הערה חשובה היא ששיטת התצורה שלנו עבור נוסעי הננו (כנקודת גישה ולקוח) מאפשרת לנו לתקשר מלוח ה- Zybo המשדר ללוח ה- Zybo המקבל כאילו השניים מחוברים בכבל Ethernet אחד. זה הופך את התקנת הרשת שלנו לקשה פחות, מכיוון שהחלופה תכלול ככל הנראה הגדרת לוחות Zybo להתחבר לשרת במפורש יחד עם החיבור המיועד.

לאחר התקנת שני המכשירים, נתוני החוצה -ננו מוגדרים ומוכנים להיות מיושמים ברשת WIDI שלך. אין התאמה ספציפית בין ננו -אורו -לוחות ללוחות ה- Zybo, שכן נקודת הגישה או הלקוח יעבדו עבור מכשיר השידור או הקבלה.

שלב 5: הגדרת מערכת עיבוד Zynq להעברת נתונים באמצעות אתרנט

הגדרת מערכת עיבוד Zynq להעברת נתונים באמצעות אתרנט
הגדרת מערכת עיבוד Zynq להעברת נתונים באמצעות אתרנט
הגדרת מערכת עיבוד Zynq להעברת נתונים באמצעות אתרנט
הגדרת מערכת עיבוד Zynq להעברת נתונים באמצעות אתרנט

על מנת להעביר את נתוני ה- HDMI מלוח Zybo אחד לשני, עלינו לשלב פרוטוקול Ethernet עם מנהל ההתקן VDMA שלנו. המטרה שלנו כאן היא להזרים מסגרות וידיאו בודדות דרך ציוד ההיקפי של Ethernet במערכת העיבוד, בקצב קבוע התואם את רוחב הפס של הרשת שלנו. עבור הפרויקט שלנו, השתמשנו ב- TCP המסופק על ידי ממשק ה- 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 הוא כדלקמן:

  1. אתחל את רשת TCP באמצעות שיחות פונקציית מנהלי ההתקן LWIP.
  2. ציין את כל פונקציות החזרה החייבות לצורך פעולות רשת.
  3. התחבר למקלט ה- WiDi על ידי חיבור לכתובת ה- IP והיציאה שלו (התצורה שלנו: IP המקלט היא 192.168.0.9, התחבר ליציאה 7).
  4. כאשר תפוגת טיימר מנהלי ההתקן של VDMA, הזן את ISR TX.
  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 לקליטת נתונים באמצעות אתרנט

לוח הפיתוח של Zybo שישמש כמקלט האלחוטי יפעל באופן דומה למכשיר המשדר. הגדרות חבילת התמיכה בלוח עבור LwIP יהיו זהות לאלה שבשלב הקודם.

המכשיר יקלט מנות המכילות את מקטעי מסגרות הווידיאו מהננו -אורטר, והוא יעתיק את נתוני מסגרת הווידאו לחלל מאגר המסגרות המשולש עבור ה- VDMA המקבל. על מנת להימנע מחיפת נתונים כלשהם, נעשה שימוש במאגר נתונים כפול (נתייחס אליו כמאגר הרשת) בעת איסוף נתונים מה- nanorouter, כך שתעבורת הרשת תוכל להמשיך להזרים פנימה בזמן שמסגרת הווידאו המלאה הקודמת מועתקת לתוך מאגר VDMA.

ההליך להתקן קבלת ה- WiDi דורש שתי משימות, אחת מהן קבלת נתוני Ethernet, והשנייה העתקת מסגרות וידאו ממאגר הרשת למאגר הפריימים המשולשים של ה- VDMA.

משימת קליטת אתרנט:

  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 פג, הזן את ISR ISR.
  2. קבע את מאגר המסגרות הנוכחי לגישה על סמך הקוד האפור VDMA.
  3. קבע איזה מאגר רשת יועתק למאגר VDMA והעתק את הנתונים האלה

שלב 7: חבר את לוחות ה- Zybo שלך למקור HDMI ולכיור HDMI

חבר את לוחות ה- Zybo שלך למקור HDMI ולכיור HDMI
חבר את לוחות ה- Zybo שלך למקור HDMI ולכיור HDMI

כעת חבר את כבלי ה- hdmi הן למקלט והן למשדר, תכנת את ה- FPGA והפעל את מערכת העיבוד. סביר להניח שקצב הפריימים יהיה איטי מאוד, בשל התקורה העצומה בפעולת LwIP ורוחב הפס המוגבל. אם יש בעיות, התחבר באמצעות UART ונסה לזהות כל אזהרה או שגיאה.

שלב 8: רעיונות חלופיים לשיפור

רעיונות חלופיים לשיפור
רעיונות חלופיים לשיפור

בעיה גדולה לפרויקט זה הייתה כמות הנתונים הדרושה לשליחת wifi. זה היה צפוי, עם זאת, הערכנו את ההשפעה שתהיה לכך וגרם להתפרצויות יותר של תמונות במסך ולא להזנת וידאו. ישנן מספר דרכים לשפר את הפרויקט:

  • דחיסת וידאו בזמן אמת. דחיסת הזנת הווידיאו הנכנסת מסגרת לפי מסגרת תפחית במידה ניכרת את כמות הנתונים הדרושה לשליחה ברשת. באופן אידיאלי זה ייעשה בחומרה (שזו משימה לא פשוטה), או שניתן לעשות זאת בתוכנה באמצעות ליבת ARM האחרת להפעלת אלגוריתמי דחיסה (זה ידרש ניתוח נוסף כדי להבטיח שהתזמון יסתדר). ישנם כמה רכיבי דחיסת וידיאו בזמן אמת של קוד פתוח שמצאנו באינטרנט, אך רובם הם IP.
  • יישום זרם ה- Ethernet בחומרה, ולא בתוכנה. היו המון תקורות בגלל המחסור במקום הזמין לתור נתונים יוצאים בתור במשדר, בשל המגבלה על גודל הקטע. תהליך הרבה יותר יעיל הוא שימוש ב- IP AXI Ethernet עם חיץ FIFO או DMA להזנת נתונים לתוכו. זה יקטין את המטען הנוסף מ- LwIP TCP ויאפשר זרימת נתונים רבה יותר.

שלב 9: נגישות

המוצר שהתקבל מפרויקט WiDi זה צריך להיות זוג מכשירים קומפקטי משולב לחלוטין, שמשתמש יכול לחבר אותו לכל מקור HDMI ולאחר מכן להטביע את הזנת הווידאו לתצוגה עם יכולת HDMI באופן אלחוטי. ההתקנים יכללו את ה- SoC Zynq-7000 שנמצא בלוח הייחוס של Zybo ויכלול את חומרת הרשת המצויה בנתבי הננו TP-Link. באופן אידיאלי, המשתמש יוכל לשלוט במודול השידור ממיקום נפרד בתוך מערכת ההפעלה היעילה, ללא צורך ביכולת טכנית משמעותית.

אבטחה וקישוריות

המכשירים צריכים לשלב גם Transport Layer Security (TLS) ובעלי חיבור אוטומטי מוגבל, שניהם למטרות פרטיות. כוונת המעצבים להפוך את החיבור לתצוגה באמצעות ממשק אלחוטי לפעולה מכוונת מטעם המשתמש, כדי להימנע משידור חומר רגיש בטעות.

סטטוס נוכחי

עד לנקודה זו, מצבו של הפרויקט עדיין בעיצומו. על מנת שמשתמש נקודת הקצה הנוכחי ייהנה מהדרכה זו, עליו להיות בעל הבנה טכנית חזקה של עיצוב המערכת המשובצת וצריך להכיר מעט את החומרה הניתנת לתכנות ותוכנות מוטבעות העובדות יחד.

הנתונים הנשלחים דרך הרשת אינם מוצפנים בשלב זה וההנחה היא שהם שידור גולמי של מנות TCP/IP.

פרויקט ליבת הווידאו נבדק בהצלחה הן עבור שידור והן קבלה. מצד שני, החיבור האלחוטי בין שני לוחות זיבו הוקם ונתוני מסגרות הבדיקה נשלחו בהצלחה. עם זאת, עדיין יש צורך לשלב את קוד הרשת לכל פרויקט ליבת וידאו ולבדוק את שידור מסגרות הווידיאו בפועל.

מוּמלָץ: