Elinux, توصیه شده, کویکتل

ساخت پروگرامر OpenCpu ماژول های کوییکتل با F1c100s

اگر تابه‌حال با ماژول‌های کوییکتل و قابلیت OpenCpu آنها کارکرده باشید (اگر آشنایی ندارید پیشنهاد می‌کنم که حتماً یه سری به اینجا بزنید) میدونید که برای پروگرام این ماژول به نرم‌افزار ویندوزی خاصی (Qflash) نیاز هست، حالا اگر شما یک شرکت تولیدکننده با خروجی بالا باشید و توی محصولاتتون از این ماژول‌ها استفاده کرده باشید باید چیکار می‌کنید؟! باید مثلاً 10 تا سیستم ویندوزی آماده کنید و فقط برای یه پروگرام ساده ازش استفاده کنید!! خب اگر از خلاقیتتون استفاده نکنید مطمئناً تنها راه شما همین هست. اما توی این آموزش می‌خوایم بهتون روش خیلی به‌صرفه‌تری رو برای پروگرامر پیشنهاد بدیم و باهم قدم‌به‌قدم پیادش کنیم (تا در نهایت بتوانیم ساخت پروگرامر OpenCpu را یاد بگیریم) پس با سیسوگ همراه باشید تا به سراغ این پروژه جذاب بریم…

 

پروگرام ماژول های OpenCpu

همونطور که گفتیم برای پروگرام ماژول های OpenCpu شرکت کوییکتل نیاز هست که از نرم افزار ویندوزی Qflash که نسخه لینوکسی هم نداره استفاده کنید، به همین دلیل باید برای اینکار از یک سیستم ویندوزی استفاده کنید .

داخل ماژول MC60 شرکت کوییکتل از چیپ MT6261 و در ماژول M66 از MT5303 استفاده شده، خوشبختانه در اینجا یک کد برای پروگرام کردن این چیپ ها قرار داده شده که اصل کار هست و همین به ما کمک میکنه که پروگرامر خودمون رو بسازیم.

تصویر پروگرامری که در ادامه نحوه ساختش رو توضیح میدیم:

opencpu programmer

ساخت پروگرامر

ما اساس کار خودمون رو برای پروگرام ماژول MC60 قرار می‌دهیم و بر اساس اون پیش میریم، حالا ما یک کد پایتون داریم و یک فایل باینری، برای اجرای کد پایتون باید از یک پردازنده قوی استفاده کنیم که ما اینجا تصمیم گرفتیم که از تراشه ارزان‌قیمت F1c100s که قبلاً هم در سیسوگ در موردش صحبت کرده بودیم استفاده کنیم (البته شما اگر دانشش رو داشته باشید میتونید همین کد پایتون رو برای c بازنویسی کنید و پروگرامرتون رو با مثلاً یه میکروی stm32 پیاده‌سازی کنید).

در اینجا میتونید راهنمای کامل استفاده از پروگرامر ماژول MC60 رو مشاهده کنید.

 

اساس کار به این صورت هست که بعد از اتصال تغذیه برنامه پروگرامر اجرا میشه:

  1. اول باید برد خودمون رو به پروگرامر متصل کنیم
  2. بعد از اون ولتاژ خروجی برد رو به کمک جامپر ها مشخص میکنیم ، تامین تغذیه ماژول هم برای راحتی و کامل بودن هست و هم به این دلیل که برای شروع پروگرام نیاز هست که ماژول ریست بشه
  3. با زدن دکمه start پروگرام شروع میشه و در صورت موفقیت آمیز بودن پیغام finished نمایش داده میشه و یک تک بوق تایید توسط بازر زده میشه

 

شماتیک

در ادامه شماتیک این پروگرامر رو مشاهده می‌کنید.

شماتیک نکته خاصی نداره ، برای راحتی کار از برد Licheepi nano استفاده کردیم تا درگیر مدارات پردازنده نشیم و یه برد ساده داشته باشیم

در اینجا هم از یک بافر برای سریال استفاده کردیم تا در صورت مشکل داشتن پین‌های سریال ماژولی که باید پروگرام به شه (مثلاً موقع مونتاژ به یک خط تغذیه وصل شده باشه و ولتاژ داشته باشه) این بافر بسوزه و به‌راحتی تعویض به شه و پردازنده اصلی آسیب نبینه.

ماژول Wifi هم در اینجا تعبیه‌شده تا در توسعه‌های آینده یکسری استفاده ازش به شه و در حال حاضر نیاز به مونتاژ نیست چون کاری انجام نمی‌ده.

 

نرم افزار پروگرامر

برای استفاده از این برد ما نیاز به یک ایمیج شخصی‌سازی‌شده داریم برای این کار از بیلد روت آماده‌شده برای برد SINUX F1 استفاده می‌کنیم (اگر با بیلدروت آشنایی ندارید میتونید از اینجا شروع کنید) که داخلش پشتیبانی از licheepi nano هم هست، البته اگر امکانات لازم رو ندارید و یا میخواید فقط تست کنید ایمیج آماده‌شده رو میتونید از اینجا دانلود کنید.

ابتدا لازم هست که پشتیبانی از spi (برای LCD) و uart_2 (برای پروگرام) رو در device tree اضافه کنیم، این چند خط رو به فایل board/sisoog/sinux/f1/devicetree/linux/devicetree.dts اضافه می‌کنیم.

حالا این پکیج ها رو به buildroot اضافه کنیم:

  • python3
  • python-serial

برای اینکار دستور زیر را می‌نویسیم:

پکیج ها در این مسیر قرار دارند:

menuconfig buildroot

با زدن y بر روی هر پکیج، انتخاب شده و آماده نصب می‌شود.

 حالا دستور

تا ایمیج ما ساخته به شه و بعد اون رو روی کارت حافظه انتقال میدیم.

مرحله بعدی راه‌اندازی نمایشگر هست، برای این کار من یک کد آماده پیدا کردم ولی نسخه کرنل استفاده‌شده پایین بود و makefile هم نیاز به تغییراتی داشت تا با ایمیج ما همخوانی داشته باشه، برای همین نسخه مناسب رو در اینجا  قراردادم.

برای شروع اول کد درایور رو دریافت می‌کنیم

دستور make رو زده و آدرس بیلدروت خودمون رو هم بهش میدیم (برای استفاده از کامپایلر و کرنل)

فایل خروجی ما st7920fb.ko هست که توی پوشه /root برد لیچی پای اون رو قرار میدیم.

این درایور درواقع میاد و ال سی دی گرافیکی رو به‌عنوان یک فریم بافر معرفی میکنه و ما میتونیم به‌صورت frame buffer باهاش در ارتباط باشیم. ما میتونیم از طریق کد پایتون به فریم بافر دسترسی داشته باشیم و دیتا رو نمایش بدیم، من چندتا کتابخونه و روش‌های مختلف رو بررسی کردم اما همه اونها حجم فایل زیادی تولید میکرند و پردازش زیادی می‌گرفتند، پس تصمیم گرفتم که از یک راه دیگه پیش‌برم.

روشی که من پیش رفتم این هست که یک فایل c نوشتم که چندتا ورودی مشخص میگیره و بر اساس اونها دیتای مشخصی رو روی نمایشگر نشون می‌ده، مثلاً این دستورات:

بخشی از کد ما به این صورت هست (کد کامل رو میتونید از اینجا دریافت کنید):

بر اساس ورودی که دریافت میکنه به عنوان پارامتر ، یک خروجی رو نمایش میده.

برای کامپایل کد، از کامپایلر buildroot استفاده می‌کنیم:

حالا فایل خروجی رو به پوشه  /root برد لیچی پای انتفال میدیم.

قبل از ادامه کار بهتره که یه تستی داشته باشیم، sd card  رو داخل ماژول قرارداده، پین های سریال ماژول رو به یک مبدل وصل کرده و تغذیه برد رو متصل می‌کنیم.

باید روال بوت شدن رو داخل نرم افزار ترمینال خودمون مشاهده کنیم.

با یوزر root لاگین میشیم ، باید دوتا فایل داشته باشیم

ابتدا با دستور insmod درایور نمایشگر رو لود میکنیم و بعد از اون چند تا دستور رو با کد display تست میکنیم.

حالا میریم سراغ کد اصلی که فایل mtkflasher.py هست ، به این فایل بخش های زیر اضافه شده:

  • خواندن وضعیت کلید
  • نمایش اطلاعات بر روی نمایشگر
  • تکرار برنامه
  • کنترل وضعیت خروجی ها

به طور مثال این تابع main ما هست که چرخه کامل پروگرام رو انجام میده.

این فایل رو هم به /root اضافه می‌کنیم.

لازم هست که اینجا یه توضیحی در مورد کنترل GPIO ها داده به شه. همونطور که میدونید توی لینوکس همه‌چیز یا فایل هست و یا پروسس. این سیستم به این معنی هست که پس ما با فایل‌ها زیاد سروکار داریم حتی برای خاموش و روشن کردن یک led!

برای کار با gpio ها یک کتابخونه ای در کرنل لینوکس هست که به ما کمک میکنه به gpio ها دسترسی داشته باشیم، برای اطلاعات بیشتر میتونید به این لینک سر بزنید. برای استفاده از اون به این صورت عمل می‌کنیم:

ابتدا به پوشه درایور می‌رویم

حالا باید شماره gpio یی که میخوایم ازش استفاده کنیم رو به این صورت به فایل export بدیم

برای برد لیچی پای شماره پینی که میخواید رو به کمک فایل در پوشه های کرنل می‌تونید پیدا کنید.

"output/build/linux-5.4.92/drivers/pinctrl/sunxi/pinctrl-sunxi.h" 

به طور مثال پین PE11 که به بازر وصل هست شمارش میشه 139، برای تست اون رو اضافه می‌کنیم

حالا وارد پوشه میشیم، جهت پین رو خروجی قرار می‌دهیم و وضعیتش را عوض می‌کنیم.

برای این آموزش تا همین حد آشنایی با gpio ها کافیه 🙂

مرحله بعدی لود شدن برنامه پروگرامر بعد از بوت هست، همونطور که میدونید بعد از لود شدن کرنل تنها یک برنامه اجرا میشه که init هست و اون میاد بقیه برنامه ها رو اجرا میکنه، ما توی بیلدروت از busybox init استفاده کردیم و باید اسکریپت خودمون رو به پوشه /etc/init.d/ اضافه کنیم، اسم فایل رو S31Programmer میزاریم و محتواش رو به این صورت قرار می‌دهیم.

همونطور که می‌بینید ما :

  • ابتدا درایور lcd رو لود کردیم
  • پین‌های ورودی و خروجی رو اضافه کردیم
  • پین‌ها رو مقدار دهی کردیم
  • و در نهایت برنامه اصلی رو اجرا کردیم

مرحله آخر هم بحث انتقال فایل پروگرام از طریق usb هست، برای این کار از پکیج uMTPrd استفاده‌شده که برد رو میتونه به‌عنوان یک دستگاه ذخیره‌سازی معرفی کنه از طریق usb، این پکیج به‌صورت پیش‌فرض توی کانفیگ ها SINUX F1 فعال هست و نیاز نیست که اضافش کنیم، فقط یک پوشه به نام mc60_firmware در مسیر /root می‌سازیم و آدرس اون رو به umtprd میدیم تا این پوشه فقط قابل‌دسترسی باشه، برای این کار فایل /etc/umtprd/umtprd.conf رو ویرایش کرده و در این خط مسیر دلخواهمون رو بهش میدیم

کار تموم هست ، فقط مطمئن بشید که همه این کار ها رو انجام دادید

 

امیدوارم که خسته نشده باشید 🙂 . توی این آموزش ما فقط سرنخ ها رو برای یکسری کارها دادیم و باید حتما هر کدوم از مباحث رو دنبالش رو بگیرید و بیشتر باهاش آشنا بشید تا بتونید به‌خوبی ازش استفاده کنید.

در ادامه هم میتونید فیلمی از نحوه استفاده از پروگرامر رو بررسی کنید:

 

خرید پروگرامر ماژول MC60 از فروشگاه سیسوگ

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

بازگشت به لیست

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

7 دیدگاه در “ساخت پروگرامر OpenCpu ماژول های کوییکتل با F1c100s

  1. جواد گفت:

    سلام
    بعد از اضافه کردن پکیج سریال پایتون و make این ارور میاد.
    SyntaxError: invalid syntax
    make[1]: *** [package/pkg-generic.mk:269: /home/SinuxF1/New/buildroot-sinux/output/build/python-serial-3.4/.stamp_built] Error 1
    ممنون میشم راهنمایی کنین

  2. مهدی گفت:

    مطمئنید برای استفاده از qflash باید از ویندوز استفاده کنید؟

    1. Mahdi.h   گفت:

      مطمئنا میشه توی لینوکس هم از اون استفاده کرد و ما خودمون هم با کمک wine از qflash توی لینوکس استفاده میکنیم. اما مشکل اینجاست که qflash رو نمیشه روی f1c100s بالا آورد 🙂

  3. مسعود گفت:

    سلام
    اینکه فریمورهای جدید کویکتل تو ایران جواب نمیدن صحت داره؟

    1. Sisoog Os گفت:

      سلام کلیت خبر صحیح میباشد

  4. جواد گفت:

    سلام
    مثل همیشه عالی بود..
    خیلی ارزشمند هست این مطالبی که لطف میکنین و در اختیار همه قرار میدین.
    خداقوت

    1. Mahdi.h   گفت:

      سلام.
      خواهش میکنم 🙂