الجمعة، 23 أكتوبر 2020

قم بتمكين Arduino I / O Header في MiniZed

 قم بتمكين الإدخال / الإخراج الرقمي المتاح على رأس غطاء Arduino في MiniZed.


الأشياء المستخدمة في هذا المشروع

Avnet MiniZed

دايود ضوئي

مقاومة 5 اوم

لوح التوصبل مع الاسلاك

تطبيقات البرمجيات والخدمات عبر الإنترنت

لتنزيل البرنامج من هنـــــــــــــــا


قصة

أثناء العمل في مشروع آخر ، لاحظت أن تصميم الأجهزة في BSP لـ MiniZed يحتوي على pinout لرأس Arduino GPIO المحدد في ملف قيود Vivado (.xdc) ولكنه لا يتصل فعليًا بأي شيء في الجهاز تصميم الكتلة. قررت أنه سيكون برنامجًا تعليميًا جيدًا قائمًا بذاته حول كيفية تمكين الإدخال / الإخراج الرقمي على رأس درع Arduino لأنني لم أر الكثير من الموارد المحددة الأخرى له.

(ملاحظة جانبية: أنا أستخدم Vivado / Vitis / PetaLinux 2019.2 لهذا المشروع. لاحظت أثناء وجودك في منتصف هذا المشروع أن مستودعات Avnet Github قد تم تحديثها قليلاً للإصدار 2020.1 ، خاصة بالنسبة لـ MiniZed. سيكون جانب Vitis في هذا المشروع والملفات المراد تحميلها على MiniZed مختلفًا قليلاً إذا كنت تستخدم الإصدار Vivado / Vitis / PetaLinux 2020.1 أو أحدث.)

أبدأ بمشروعي Vivado و PetaLinux اللذين أنشأتهما من MiniZed BSP في آخر مشروعي في MiniZed هنا. أول شيء يجب القيام به هو التحديثات على الأجهزة في Vivado.

لتعديل تصميم الأجهزة المعتمد على MiniZed ، افتح مشروع Vivado في دليل مشروع PetaLinux الذي تم إنشاؤه بواسطة BSP ضمن دليل <مسار المشروع> / Hardware / MINIZED.

نظرًا لأن EMIO GPIO الخاص بـ Zynq يتم استخدامه بالفعل في إدخال / إخراج البلوتوث ، أضف AXI GPIO إلى مخطط الكتلة. قبل تشغيل خيار أتمتة الاتصال الذي يظهر ، انقر نقرًا مزدوجًا فوق كتلة AXI GPIO الجديدة لإعادة تكوين إعداداتها.

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


أعد تسمية المنفذ للإشارة إلى أن هذه الخطوط سيتم توصيلها برأس Arduino



تحقق من صحة تصميم الكتلة واحفظه (قد يكون هناك تحذير هام بشأن خط الساعة ، ولكن يمكن تجاهله). انقر بزر الماوس الأيمن على تصميم الكتلة في نافذة المصادر وحدد خيار "إنشاء غلاف HDL ..." والخيار الفرعي للسماح لـ Vivado بإدارته. سيؤدي ذلك إلى تحديث HDL ذي المستوى الأعلى ليشمل منفذ GPIO الخارجي الجديد.

قم بتعديل ملف minized_petalinux.xdc لتبديل خطوط بيانات Adruino لمطابقة خرج الناقل من كتلة AXI GPIO.


احفظ ملف القيود ثم أعد تشغيل التوليف والتنفيذ وإنشاء دفق بت جديد. بمجرد إنشاء دفق البت ، قم بتصدير تصميم الأجهزة. يوجد بالفعل جهاز XSA موجود في دليل المشروع المحلي (<المسار إلى مشروع PetaLinux الذي تم إنشاؤه باستخدام BSP> / Hardware / MINIZED_2019_2 /) ، لذلك قبل تصدير جهاز XSA الجديد إليه ، قمت بإنشاء مجلد جديد في دليل المشروع بعنوان ' old_hw 'ونقل MINIZED.xsa إلى هناك. لتصدير تصميم الأجهزة الجديد ، حدد ملف> تصدير> تصدير الأجهزة ... وتأكد من تحديد المربع لتضمين تدفق البت. سترى MINIZED_wrapper.xsa تظهر الآن في دليل المشروع المحلي.

في نافذة طرفية جديدة ، مصدر إعدادات بيئة PetaLinux وقم بتغيير الدلائل إلى مشروع PetaLinux الذي تم إنشاؤه باستخدام BSP.

source <PetaLinux installation path>/2019.2/settings.sh
cd ./minized/minized_emmc_enhanced_2019_2/

استيراد تصميم الأجهزة الجديد إلى مشروع PetaLinux الحالي.

petalinux-config --get-hw-description ./hardware/MINIZED_2019_2/
بمجرد ظهور محرر تكوين الأجهزة ، يمكنك الخروج منه دون إجراء أي تغييرات. حدد خيار حفظ الإعدادات الجديدة عندما يُطلب منك ذلك ، ثم أنشئ مشروع PetaLinux.
petalinux-build

يجب إنشاء صورة تمهيد ثنائية جديدة (BOOT.BIN) من أجل MiniZed لاحتواء تيار البت الجديد منذ أن أضفنا أجهزة جديدة إلى التصميم في Vivado. يمكن القيام بذلك في Vitis GUI عن طريق إنشاء مشروع نظام أساسي جديد وتطبيق محمل إقلاع المرحلة الأولى. في هذه الحالة ، أجد أنه من الأسهل قليلاً إنشاء ملف boot.bif الخاص بي باستخدام محرر نصوص وأداة سطر أوامر برنامج Xilinx (XSCT) لإنشاء تطبيق FSBL مستقل ، ثم أداة bootgen للترجمة BOOT.BIN الجديد

في نافذة طرفية جديدة ، مصدر البرنامج النصي لإعدادات بيئة Vitis:
source <Vitis installation path>/2019.2/settings64.sh
قم بإنشاء دليل لمشروع تطبيق FSBL.
cd ./minized/minized_emmc_enhanced_2019_2/
mkdir -p ./fsbl_project/
قم بتشغيل أداة سطر أوامر برنامج Xilinx (XSCT):
xsct
ثم استخدم أوامر HSI لإنشاء تطبيق Zynq في المرحلة الأولى من برنامج bootloader bare-metal لـ MiniZed. تعرف على المزيد حول HSI وكيفية استخدامه في Vitis هنا.

ابدأ بفتح تصميم الأجهزة لـ MiniZed في مثيل XSCT الحالي.
xsct% hsi open_hw_design ./minized/minized_emmc_enhanced_2019_2/hardware/MINIZED_2019_2/MINIZED_wrapper.xsa
تحقق من فتح الجهاز بنجاح باستخدام الأمر current_hw_design ، فسيتم تكرار اسم الجهاز مرة أخرى في الجهاز الطرفي على غرار ما يلي
xsct% hsi current_hw_design
MINIZED_wrapper

قم بإنشاء تطبيق bare-metal لـ FSBL باستخدام أمر HSI create_app:

xsct% hsi generate_app -dir ./minized/minized_emmc_enhanced_2019_2/fsbl_project/ -hw MINIZED_wrapper -sw fsbl -proc ps7_cortexa9_0 -os standalone -app zynq_fsbl -compile

قم بإنهاء XSCT والخروج منه بالضغط على Ctrl + C مرتين متتاليتين ثم استخدم محرر النصوص الذي تختاره لإنشاء ملف معلومات تمهيد جديد (boot.bif) لـ MiniZed.

nano boot.bif
يضاف النص التالي:
image : {
[bootloader] fsbl_project/executable.elf
images/linux/minized_petalinux_wrapper.bit
images/linux/u-boot.elf

الملف القابل للتنفيذ هو ملف FSBL الجديد لنواة ARM الخاصة بـ Zynq في MiniZed الذي تم إنشاؤه للتو في الخطوة الأخيرة باستخدام XSCT.

أخيرًا ، استخدم أداة bootgen لإنشاء ملف التمهيد الثنائي الجديد لـ MiniZed.

bootgen -image boot.bif -o i BOOT.BIN -w on
بمجرد إنشاء ملف التمهيد الثنائي بنجاح ، انسخ صورة kernel الجديدة (image.ub) وملف التمهيد الثنائي (BOOT.BIN) إلى eMMC الخاص بـ MiniZed. اخترت استخدام عميل FTP مرة أخرى لتحميل الملفات إلى MiniZed عبر اتصال Wi-Fi الخاص به



من سطر أوامر MiniZed ، قم ببرمجة ثنائي التمهيد الجديد إلى ذاكرة فلاش QSPI وأعد التشغيل.

root@MiniZed:~# flashcp /run/media/mmcblk1p1/BOOT.BIN /dev/mtd0 
root@MiniZed:~# reboot

لاختبار أن GPIOs تعمل بشكل صحيح ، قمت بتوصيل مصابيح LED بكل من I / O على رأس Arduino الخاص به وقمت بتبديل كل سطر يدويًا من سطر الأوامر (ظهر GPIO على أنه 999 بالنسبة لي ، ولكن قد يكون مختلفًا بالنسبة لي عليك التحقق جيدًا باستخدام تطبيق get-gpio-offests).

root@minized-emmc-enhanced-2019-2:~# cd /sys/class/gpio/
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 999 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1000 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1001 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1002 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1003 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1004 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1005 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1006 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1007 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1008 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1009 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1010 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1011 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo 1012 > ./export
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio999/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1000/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1001/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1002/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1003/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1004/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1005/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1006/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1007/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1008/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1009/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1010/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1011/direction
root@minized-emmc-enhanced-2019-2:/sys/class/gpio# echo high > ./gpio1012/direction


لقد اختبرت قضبان الجهد المرجعي باستخدام DMM الخاص بي على رأس Arduino مع أو بدون توصيل USB بالطاقة AUX وقراءتهما بالجهد المناسب. كان MiniZed أيضًا قادرًا على تشغيل جميع مصابيح LED الأربعة عشر مع توصيل AUX powe

ليست هناك تعليقات:

إرسال تعليق