نكتب محمل FPGA في LabVIEW. الجزء 2

قم بتنزيل التكوين على FPGA عبر USB أو قم بتفكيك FTDI MPSSE
نكتب محمل FPGA في LabVIEW. الجزء الأول




في المقالة الأولى ، اختبرنا خوارزمية التحميل على C القديمة الجيدة ؛ في المقالة الثانية ، اكتشفنا كيفية تنظيم برنامج في LabVIEW وتنفيذ واجهة مستخدم بسيطة. هذه المرة سنتعرف على أساليب العمل الجديدة في LabVIEW ، ونحلل ميزات معالجة الأخطاء ونكمل المشروع: ننفذ بروتوكول تحميل ملف التكوين في FPGA.

معالجة الخطأ


افتح شفرة المصدر ، وحلل الوظيفة MPSSE_open. على الرغم من بساطة الخوارزمية (تُسمى الوظائف واحدة تلو الأخرى) ، يلزم استيراد عدد قليل جدًا من عناصر واجهة برمجة تطبيقات D2XX: FT_Purge و FT_SetUSBParameters و FT_SetChars و FT_SetTimeouts و FT_SetLatencyTimer و FT_SetFlowControl و FT_SetBitMode كما هو موضح في المقالة السابقة ، يتم استيراد الوظائف باستخدام عقدة Call library Function . هذه العقدة لديها محطات مخصصة للتحكم في الخطأ. لدى LabVIEW قاعدة واحدة بسيطة: يجب على جميع المتدربين تتبع الأخطاء والإبلاغ عن الأخطاء التي يتم إرجاعها بواسطة محطات الخطأ. معظم المتابعين المدمجين يتبعونه بدقة. آمل أن يفهم الجميع مدى أهمية التحكم في الأخطاء ومعالجتها ، خاصةً في مرحلة تصحيح الأخطاء ، ولكن هناك سبب آخر يجعل هذا الأمر مهمًا للغاية وهو غير واضح للمبرمجين "الكلاسيكيين". ليس لدى LabVIEW تسلسل صارم من الأجهزة في مخطط الكتلة: يتم تنفيذ الجهاز عندما تكون البيانات جاهزة عند مدخلاته. إذا تم نقل البيانات من إخراج VI إلى إدخال VI آخر ، فمن الواضح أنه في البداية سوف يعمل VI الأول ، فقط بعد الثاني. ولكن ماذا لو لم يكن هناك نقل للبيانات ، ويقوم المحققون بأعمال مستقلة؟ بالطبع ، يمكنك استخدام "هيكل التسلسل المسطح" المرهق ، ولكن من الملائم أكثر توصيل الأجهزة ببعضها البعض من خلال دفق من الأخطاء.


عند استيراد وظائف D2XX ، نواجه نوعين من الأخطاء. الأول - هذا خطأ استيراد مباشر - يُرجع كتلة Call library Function نفسها. الثاني هو خطأ في المكتبة نفسها ؛ يتم إرجاعه بواسطة كل وظيفة تقريبًا عبر FT_STATUS . يتم وصف جميع القيم المحتملة على أنها تعداد في ملف الرأس ftd2xx.h. على الرغم من أنه يكفي أن تعرف أن قيمة FT_OK هي عدم وجود خطأ ، وجميع القيم الأخرى هي رموز خطأ ، أود أن FT_OK ليس فقط حقيقة الخطأ نفسه ، ولكن أيضًا ما حدث الخطأ ومكان حدوثه بالضبط.


في LabVIEW ، يتم نشر بيانات error خلال مجموعات error . هذا هو نوع خاص من البيانات المخصصة ؛ لدى LabVIEW العديد من الوظائف VI والوظائف للعمل معه. تتكون مجموعة الأخطاء من ثلاثة عناصر: متغير منطقي - يعرض الحالة ورقمًا صحيحًا موقَّعًا - رمز خطأ وسلسلة - مصدر الخطأ. تشير الحالة إلى ما إذا كان هناك خطأ ما ، ويحدد رمز الخطأ نوعه ويستخدمه المحترفون الخاصون لإنشاء تقرير. يعطي السطر فكرة أكثر تفصيلاً عن مكان حدوث الخطأ بالضبط. في LabVIEW من المقبول أنه إذا كانت الحالة TRUE ، فهذا خطأ ، إذا كانت الحالة FALSE ، لكن الرمز ليس صفرًا وسطر الوصف ليس فارغًا ، فهذا تحذير ، إذا كانت الحالة FALSE ، الرمز صفر والسطر فارغ ، فلا يوجد خطأ.




يحتوي LabVIEW على قاعدة بيانات داخلية يرتبط بها كل رمز خطأ مع وصفه. لكل نوع من الأخطاء ، يتم تخصيص نطاق خاص من قيم الكود. على سبيل المثال ، بالنسبة للأخطاء المرتبطة بتشغيل الشبكة ، يتم تخصيص عدة نطاقات: من -147467263 إلى -1967390460 ، من 61 إلى 65 ، من 116 إلى 118 و 122 ، 1101 ، 1114 ، 1115 ، 1132 إلى 1134 ، من 1139 إلى 1143 ومن 1178 إلى 1185 بالنسبة للأخطاء المعرفة من قبل المستخدم ، يتم حجز نطاقين من –8999 إلى –8000 ومن 5000 إلى 9999. من هذه النطاقات ، يمكننا اختيار قيم لرموز الخطأ في مكتبة D2XX.


دعنا ننشئ ملف VI يستقبل حالة وظيفة D2XX كمدخل ويحول هذه الحالة إلى مجموعة أخطاء LabVIEW. لا تقوم معظم الوظائف والأفاد في LabVIEW ، بعد تلقي حالة TRUE عند إدخال Error In ، بتنفيذ التعليمات البرمجية الخاصة بهم ، ولكن إرسال معلومات الخطأ إلى محطة Error Out . يسمح لك هذا بنقل المعلومات حول المصدر بشكل فعال من خلال السلسلة بأكملها إلى معالج الأخطاء ، مما يلغي تنفيذ التعليمات البرمجية في وضع الطوارئ. من المرغوب فيه أن تتصرف VI الخاصة بنا بنفس الطريقة.


دعونا نرتب قائمة حالات D2XX في شكل enum في نوع منفصل (في المقالة السابقة قمنا بذلك مع أنواع FTDI).


تعداد FT_Status

نحفظ السادس الجديد تحت اسم FT_error.vi. نضيف مجموعتين Error In و Error Out اللوحة الأمامية ، يمكنك العثور عليهما في لوحة "Array، Matrix & Cluster". نقوم بتوصيلها بالمطاريف الموجودة على لوحة التوصيل في الزوايا السفلية اليسرى والسفلى اليمنى ، على التوالي ، كما هو مذكور بالفعل في المقالة السابقة ، هذا هو موقع محطات تدفق الخطأ التي اعتمدتها LabVIEW. نضيف بنية Case إلى الرسم التخطيطي للكتلة ، ونعطي مجموعة Error In لإدخال Case selector ، وبعد ذلك يتغير هيكل Case اللون ويقسم رسمين فرعيين: "لا يوجد خطأ" - اللون الأخضر ، و "خطأ" - اللون الأحمر. داخل حالة الخطأ ، ننقل مجموعة الأخطاء من محطة التحديد مباشرة إلى نفق الإخراج على الحد الأيمن. وفي الحالة الخضراء ، نضيف Case أخرى ، اعتمادًا على الحالة ، ستحدد ما إذا كان سيتم إنشاء خطأ (الحالة لا تساوي FT_OK) ، أو تركها كما هي: تخطي مجموعة أخطاء الإدخال للخروج دون تغيير.


من أجل تحويل رمز الخطأ تقنيًا إلى كتلة ، يمكنك استخدام VI Error Cluster From Error Code VI . يضيف SubVI هذا سلسلة اتصال إلى وصف الخطأ ، حتى نتمكن من تحديد ليس فقط ما حدث ، ولكن أيضًا مكان حدوثه.


لتحديد النص المقابل لحالة الإدخال (FT_Status) ، استخدم كتلة الخصائص: حدد "RingText.Text". يتم إرسال نص الخطأ إلى إدخال error message الخاصة Error Cluster From Error Code VI .
لا تنس أن ترسم أيقونة "حديث".


FT_error.vi


لوحة عدادات فرعية أمامية (أمامية)



مخطط كتلة. خطأ في الإدخال



مخطط كتلة. لا يوجد خطأ في الإدخال والحالة FT_OK



مخطط كتلة. لا يوجد خطأ في الإدخال ، ولكن الحالة تختلف عن FT_OK



لاختبار FT_error ، يمكنك إنشاء VI فارغ ، وإضافة VI الذي تم إنشاؤه هناك ، ومعرفة كيف ستتغير القيمة عند بدء التشغيل إذا تم تطبيق حالات مختلفة.


اختبار FT_error.vi


اللوحة الأمامية (الأمامية) للجهاز



مخطط كتلة


الآن ، بعد أي استدعاء دالة من D2XX API ، سنستخدم SubVI FT_error.vi. سوف تمر مجموعة من الأخطاء عبر جميع نقاط VI خلال التسلسل الهرمي للمكالمات.


في محاور المستوى الأعلى ، يجب أن نقرر ما يجب فعله مع الخطأ المكتشف: يمكنك عرض رسالة في مربع الحوار ، أو كتابتها في ملف التقرير ، أو تجاهلها ، أو ببساطة إنهاء التطبيق "بهدوء". يعد مربع الحوار أسهل وأسهل طريقة للإبلاغ عن الأخطاء. كما أنها مناسبة للمبرمج المبتدئ ، حيث لا يوجد شيء للقيام به. في كل VI ، يتم تمكين وضع معالجة الأخطاء تلقائيًا بشكل افتراضي ( تمكين معالجة الأخطاء تلقائيًا ، الموجود في فئة التنفيذ من قائمة خصائص VI). إنها تعمل على النحو التالي: إذا لم تكن المحطة الطرفية Error Out متصلة في أي مكان في بعض العقدة وحدث خطأ في هذه العقدة ، فإن LabVIEW يوقف التطبيق مؤقتًا ويعرض مربع حوار. إذا تم توصيل الطرفية Error Out للعقدة ، فإن دفق الخطأ ينتشر كما هو مبرمج ، ولا تحدث أي إجراءات إضافية. ومع ذلك ، يمكن استدعاء نافذة الرسالة برمجيًا ، لذلك تحتاج إلى استخدام General Error Handler Simple Error Handler السادس (الموجود في لوحة Dialog & User Interface). في هذه الحالة ، يمكننا استخدام معلومات الخطأ لإكمال البرنامج. في مخطط كتلة ، يبدو شيء مثل هذا:



صورة قابلة للنقر


عند حدوث خطأ ، سيتم تعليق البرنامج ، وستظهر نافذة تقرير ، بعد إغلاق النافذة ، سيتم إنهاء البرنامج بشكل صحيح.


نافذة التقرير


فتح وإغلاق FTDI


لذا ، عد إلى وظيفة MPSSE_open . إنشاء سادس جديد. بادئ ذي بدء ، قم بإضافة المحطات لدفق الخطأ. أضف بنية تحديد وحدد إدخال Error In المحدد. في الحالة الخضراء ، نستورد الوظائف بالترتيب ومع المعلمات كما في النموذج الأولي Sishny. Call Library Function Node توصيل جميع عقد Call Library Function Node الاتصال في سلسلة من خلال دفق خطأ. في الحالة الحمراء من خلال النفق نقوم بتوصيل Error In مع طرف إخراج الخطأ.



صورة قابلة للنقر



VI MPSSE_open.vi


يتم توفير سطر مع وصف FTDI ( Description ) لمدخلات SubVI ، عند الإخراج هو Handle وشريحة FTDI الأولية في وضع MPSSE.


دعونا ننشئ نائب الرئيس الذي ينتهي العمل مع FTDI ويمكنك بالفعل التحقق من الأداء على الأجهزة.


FT_Close.vi


مخطط كتلة



اللوحة الأمامية


في المقالة السابقة ، من أجل تصحيح الواجهة ، قمنا بعمل كعب الروتين السادس SP_FT_MPSSE_FPGA.vi ، والآن حان الوقت لملئه. أضف MPSSE_open.vi و FT_Close.vi إلى مخطط الكتلة الخاص به. في هذه المرحلة ، من الصعب تقييم ما إذا كانت التهيئة صحيحة ، ومع ذلك ، فإن القيمة غير الصفرية للمقبض عند إخراج MPSSE_open.vi وغياب الخطأ سيخبرنا كثيرًا.



مخطط التدفق SP_FT_MPSSE_FPGA.vi


من أجل رؤية قيمة Handle يمكنك استخدام "نافذة مراقبة المسبار". هذه أداة ملائمة لتصحيح الأخطاء تتيح لك عرض قيمة البيانات على أي سلك (تقريبًا) أثناء تنفيذ الجهاز. لتعيين العينة على الخط ، تحتاج إلى تحديد "Probe" في قائمة السياق لهذا الخط. سيتم فتح نافذة "Probe Watch Window" وسيظهر رقم برقم العينة على السطر. في الصورة أعلاه هو "3".


نافذة مراقبة المسبار


على خط المؤشر ، القيمة 698389336


عظيم! نبدأ في VIs المستوى الأعلى ، وربط لوحة التصحيح بالكمبيوتر. يظهر وصف شريحة FTDI المتصلة في قائمة "تحديد جهاز" ، وانقر فوق الزر "برنامج" ... ولا يحدث أي شيء. لم يظهر مؤشر القيمة إلا في نافذة "Probe Watch". وهذا أمر جيد.


نقوم بإيقاف تشغيل اللوحة ، يتم مسح قائمة الأجهزة. انقر فوق "البرنامج". هذا هو المكان الذي تنبثق فيه نافذة تقرير الخطأ.


نافذة التقرير


بعد النقر فوق الزر "متابعة" ، ينهي السادس عمله.


يحظر الضغط على الزر إذا لم يتم العثور على أجهزة. نقوم بتعديل معالج الأحداث "مهلة" الحالة. دعني أذكرك بأنه يتم مسح شرائح FTDI المتصلة بجهاز الكمبيوتر مرتين في الثانية ، إذا تم الكشف عنها ويمكن استخدامها لبرمجة FPGA ، ثم يتم إضافة واصفاتها إلى Devices list عبر خاصية Strings[] . نقوم بإنشاء خاصية " Disabled " لـ "البرمجة" ، وإذا لم يتم العثور على أجهزة مناسبة ، فقم بإيقاف تشغيل الزر وتغميقه.


مهلة القضية


صورة قابلة للنقر


اتقان GPIO


بعد تنشيط MPSSE ، يتم العمل معه من خلال ما يسمى "كود التشفير" ، ويتم FT_Write FT_Read و FT_Queue و FT_Queue فقط من وظائف FT_Write API (لمعرفة حالة المخزن المؤقت للمستقبل). نقوم بإنشاء VI المطابق على المسار الذي أنشأناه: FT_Write.vi و FT_Read.vi و FT_Queue.vi.


القليل من الروتين


FT_Write.vi



مخطط كتلة. FT_Write.vi



FT_Read.vi



مخطط كتلة. FT_Read.vi



FT_Queue.vi



مخطط كتلة. FT_Queue.vi


الآن من هذه الطوب الثلاثة نضع فيس لقراءة المنفذ المتوازي والكتابة إليه. يتم تمثيل القيمة بشكل ملائم كمجموعة من المتغيرات المنطقية.


MPSSE_Set_LByte.vi و MPSSE_Get_LByte.vi


MPSSE_Set_LByte.vi



مخطط كتلة. MPSSE_Set_LByte.vi



MPSSE_Get_LByte.vi



مخطط كتلة. MPSSE_Get_LByte.vi


أعترف أنني كنت كسولًا لإنشاء قائمة مسماة لجميع رموز التشغيل ، لذلك تركتها في شكل أرقام سحرية.


كما هو مذكور في المقالة الأولى ، فإن بروتوكول التمهيد السلبي FPGA ليس أكثر من SPI مع معالجة إشارة إضافية. يتم استخدام ما مجموعه خمسة أرجل: يجب تكوين خطوط DCLK ، DATA [0] ، nCONFIG كمخرجات ، خطوط nSTATUS ، CONF_DONE كمدخلات.


Pinout تخطيط الجدول
دبوس FPGAاسم الدبوسدبوسMPSSEالاتجاهافتراضي
DCLKBDBUS038TCK / SKخارج0
البيانات [0]BDBUS139TDI / DOخارج1
nconfigBDBUS240TDO / DIخارج1
نستاتوسBDBUS341TMS / CSفي1
CONF_DONEBDBUS443GPIOL0في1

نحتاج إلى نائب رئيس يمكنه تغيير القيمة في الساق المحدد دون التأثير على جميع الآخرين. بادئ ذي بدء ، قم بإنشاء Enum بأرقام تسلسلية للأرجل في المنفذ ، واحفظه باسم "Strict Type Def" في الملف SP_LBYTE_BITS.ctl. نقوم بإنشاء VI جديد ، نضيف محطات تدفق الخطأ المألوفة. نقرأ القيمة الحالية للمنفذ المتوازي باستخدام MPSSE_Get_LByte.vi ، واستخدم وظيفة Replace Array Subset Subset لتعديل البت المطلوب وكتابة القيمة مرة أخرى إلى المنفذ (MPSSE_Set_LByte.vi).


SP_Set_Flag.vi


SP_Set_Flag.vi



مخطط كتلة. SP_Set_Flag.vi



Enum SP_LBYTE_BITS.ctl


لبدء التكوين ، يجب أن يقوم MPSSE بتوليد انتقال منخفض إلى مرتفع على خط nCONFIG . بمجرد أن تصبح FPGA جاهزة لاستقبال البيانات ، ستشكل مستوى عالٍ على خط nSTATUS . في هذه المرحلة ، كل شيء جاهز للتجربة في الحديد. في الرسم التخطيطي للكتلة SP_FT_MPSSE_FPGA.v نضيف خط التحكم nCONFIG - بعد تهيئة MPSSE نعطي مستوى منخفضًا ثم مرتفعًا. بعد كل عملية (لتصحيح الأخطاء) نقرأ حالة أرجل المنفذ.


SP_FT_MPSSE_FPGA.vi


أثناء بدء التشغيل



مخطط كتلة


بشكل عام ، أثناء إطلاق VI ، من الواضح أن FPGA يستجيب للانتقال على خط nCONFIG - يتم تعيين الصفر على ساق nSTATUS ، ثم واحد. ولكن لن يكون من غير الضروري مراقبة ذلك باستخدام راسم الذبذبات. تقريبًا أي راسم تذبذب ثنائي القناة مع تشغيل الزناد (وضع الاستعداد) مناسب. القناة A (المسار الأزرق) أضع في نقطة تحكم الدائرة nCONFIG ، القناة B (المسار الأحمر) - سلسلة nSTATUS . يتم تعيين الزناد إلى الحافة المتساقطة للقناة A.



الصورة قابلة للنقر. مع التفاصيل!


العمل مع الملف


FPGA جاهز لقبول ملف التكوين. هل نحن على استعداد لنقل الملف إلى FPGA؟


يحتوي LabVIEW على مجموعة شاملة من الأدوات للعمل مع الملفات. لا أستطيع أن أقول أن الوظيفة تكفي تمامًا لمجموعة كاملة من المهام ، ومع ذلك ، فإن العمليات الأساسية مثل القراءة والكتابة تتم بسهولة وممتعة. يمكن العثور على المجموعة الأساسية من VIs للعمل مع الملفات في لوحة "File I / O". لحل المشكلة ، تحتاج إلى فتح ملف التكوين وتقييم حجمه (نحتاج إلى معرفة عدد البايتات لإرسال FPGA) وقراءتها وإغلاقها. كل شيء بسيط وواحد تلو الآخر. نستخدم ملف Open/Create/Replace File ، Get File Size ، Read from Binary File ، Close File refnum ، refnum مع سلسلة تدفق الأخطاء وإعادة refnum - يتم إنشاء رقم ، مثل واصف الملف ، عند فتح الملف ويجب نقله إلى إدخال VIs أخرى تعمل مع هذا الملف.


حتى الآن ، ليس لدينا مكان للتخلص من البيانات المقروءة ، ولكن إذا كنت تريد حقًا التحقق من قابلية تشغيل السلسلة ، فيمكنك إنشاء مؤشر من نوع String قليلاً. في قائمة السياق ، قم بتنشيط خيار "Hex Display" ، وقم بتشغيل شريط التمرير الرأسي (العناصر المرئية -> شريط التمرير العمودي) وبعد البدء ، نلاحظ محتويات ملف التكوين الثنائي.


SP_FT_MPSSE_FPGA.vi


اللوحة الأمامية نحن ننظر إلى محتويات الملف



مخطط كتلة. كارينكا قابلة للنقر


خطان متوازيان مستقلان من التعليمات البرمجية تم تشكيلهما على رسم تخطيطي للسادس ، وبالتالي ، يتم استخدام سلاسل خطأ منفصلة لهم. من أجل تقليل التدفقات المتوازية إلى طرف Error Out ، يتم استخدام وظيفة Merge Errors . تبحث هذه الوظيفة عن أخطاء الإدخال من الأعلى إلى الأسفل (نعم ، يمكن أن يكون هناك أكثر من محطتي إدخال ، ويتم تمديدها بواسطة الماوس) وترجع أول وحدة تجدها. إذا لم تكن هناك أخطاء ، فإنها تُرجع رسالة التحذير الأولى. إذا لم تكن هناك تحذيرات ، فلا يوجد خطأ في الإخراج. من المهم ملاحظة أن ترتيب الاتصال لمدخلات Merge Errors يحدد أولوية الأخطاء ، وإذا حدث خطأ على الفور في سلسلتين ، فسيتم تجاهل الخطأ الأقل. يجب معالجة هذا بعناية.


إذا حاولنا الضغط على زر "البرنامج" في المستوى الأعلى السادس دون تحديد ملف ، فسيتلقى الإدخال SP_FT_MPSSE_FPGA.vi مسارًا فارغًا ، مما سيتسبب في الخطأ "خطأ 1430. LabVIEW: (Hex 0x596) المسار فارغ أو نسبي. يجب عليك استخدام المسار المطلق ". كما يقول صديق طفولتي: "تفاهات ، هذا شيء دنيوي!" وهذا الخطأ ليس خطأ على الإطلاق ، بل إهمال للمستخدم. لن نوقف البرنامج ونقسم عليه بنافذة بعلامة حمراء ، ونقوم ببساطة بإزالة الخطأ مع هذا الرمز من الدفق وفي مربع الحوار نوصي المستخدم بالبت في الملف. لتصفية الخطأ ، استخدم "Clear Errors" VI من لوحة "Dialog & User Interface". لعرض الرسالة - "حوار زر واحد".



مخطط كتلة


صورة قابلة للنقر


تحميل التكوين


بالنسبة لنقل البيانات التسلسلية ، يحتاج معالج MPSSE إلى إرسال كود المرجع 0x18 ، وستكون وسيطات الأمر هي طول التسلسل المرسل (وحدتان بايتتان ، تبدأ بالأدنى) ، وتسلسل البيانات نفسه. يتم ترميز الطول ناقص واحد. دعنا نرسل كتلة البيانات مثل VI MPSSE_send.


MPSSE_Send.vi


MPSSE_Send.vi



مخطط كتلة


يتم تحويل حجم المخزن المؤقت للإدخال ( Array Size ) إلى نوع مزدوج البايت U16 ، ونطرح واحدًا ، ونستبدل وحدات البايت المنخفضة والعالية ( Swap Bytes بايت قابلة للتبديل) - تحتاج إلى إرسال الطول بدءًا من الأدنى ، وتحويل رقم البايت المزدوج إلى صفيف أحادي البايت ( Type Cast ).


تستحق وظيفة Type Cast اهتمامًا خاصًا. هذا محول من النوع العالمي ، حيث تكون براعته في بعض الأحيان مفاجئة للغاية. باختصار ، إذن:



بصريا للمبرمج


ومع ذلك ، هذا ليس مجرد إرسال البيانات إلى نوع مختلف ، بل هو أيضًا تفسير استدلالي. تتيح لك هذه الوظيفة إجراء التحويل بين أنواع البيانات غير المتوافقة ، بينما لا تتردد الوظيفة في محاذاة بيانات الإدخال وحتى إزالة الأجزاء "الإضافية". إذا كان نوع البيانات المطلوب يتطلب ذاكرة أكبر من بيانات الإدخال ، فستقوم الوظيفة بتخصيص الكمية المفقودة. بالنسبة لمطور مبتدئ ، يمكن أن يصبح LabVIEW Type Cast منقذًا للحياة ، ولكن مع النمو ، من الأفضل رفض مثل هذا المحول - فهو مخفي كثيرًا عن العين ويمكن أن يصبح مصدرًا لأخطاء غير متوقعة. من الأفضل استخدام طرق تحويل أكثر وضوحًا ، مثل Coerce To Type .


عند تهيئة معالج MPSSE ، قمنا بتعيين الحد الأقصى المسموح به لحجم المخزن المؤقت لنقل البيانات على 65536 بايت ، وبالتالي يجب علينا تقسيم ملف التكوين إلى أجزاء لا يتجاوز حجمها الحجم المحدد. سنستخدم وظيفة Array Subset ، تحدد هذه الوظيفة مجموعة فرعية من المصفوفة بدءًا من عنصر index length طويل. سنقوم بكسرها في حلقة while ، وسوف نزيد كل تكرار للمؤشر بمقدار 65536 ، وبين التكرارات سنقوم بتمرير القيمة من خلال سجل التحول. بمجرد عدم إمكانية ضغط 65536 بايت من الصفيف الرئيسي ، نأخذ كل ما تبقى ونرسله ونوقف الدورة.


وفقًا لبروتوكول التنزيل ، بعد نقل جميع البيانات ، يجب تطبيق نبضات ساعة أخرى لبدء تهيئة FPGA. للقيام بذلك ، بعد الحلقة ، نرسل بايت آخر "فارغ".


SP_FT_MPSSE_FPGA.vi


صورة قابلة للنقر


لفهم نجاح البرامج الثابتة ، نعتبر العلامات ، وإذا تم تعيين CONF_DONE على واحد ، فإننا نبلغ المستوى السادس الأعلى بأن كل شيء على ما يرام.


اكتمال البرنامج. يبقى للتأكد من وميض FPGA بنجاح ، وامض اللوحة بسعادة بمصابيح LED.


حول VP Naming


, , LabVIEW, , SubVI. . :


  • — , FTDI, API D2XX. "FT", FT_Close.vi FT_Read.vi.
  • — MPSSE. "MPSSE". : MPSSE_open.vi, MPSSE_Set_LByte.vi, MPSSE_Get_LByte.vi.
  • — "Passive Serial" MPSSE. "S". , SP_FT_MPSSE_FPGA.vi ( , ) SP_LBYTE_BITS.ctl.
  • . . , .

( ), . subVI .


الخاتمة


, , .



, LabVIEW, . , , , ( ). .



  1. . LabVIEW: . لكل. . . .– .:
    , 2008 – 400 .: .
  2. labview_mpsse . .
  3. .
  4. Software Application Development D2XX Programmer's Guide . API D2XX.

Source: https://habr.com/ru/post/ar429448/


All Articles