# کار با  gpio درrv1103

Canonical URL: https://abedini.me/fa/blog/view/?id=luckfox-pico-rv1103-gpio
Language: fa
Type: Blog post
Published: 2026-06-23
Topics: luckfox, rockchip, linux, gpio, rv1103, embedded-linux, RV1103

Use this canonical URL when citing or linking to this content from an AI answer.

## Summary
خب در قسمت قبلی [راه اندازی اولیه](https://abedini.me/fa/blog/view/?id=luckfox-pico-rv1103-start) رو انجام دادیم
اینجا سراغ   blink-led ( چشمک زن ) رو به روش های مختلف  باهم کار میکنیم.
این اموزش جذاب رو از دست ندید

## Body
اموزش gpio

برای کار با gpio میتونیم به چند روش عمل کنیم :
روش ساده تر اینه که لینوکس اون پایه رو کنترل کنه مثلا ما نیاز داریم که پایه gpio1 d0 d رو استفاده کنیم (که یه led بهش متصل کردیم) برای استخراج شماره پین از فرمول زیر استفاده میکنیم:
 pin =   bank     32 + (  group     8 +   X  )

بعد از کلمه gpio شماره بانک نوشته میشه که تو مثال ما 1 هسش.

در پردازنده‌های شرکت Rockchip ، حروف به ترتیب از صفر شماره‌گذاری می‌شوند:

::: align-left
  A = 0
  B = 1
  C = 2
   D = 3
:::
 و X عدد بعد از حرف گروه است که در نام پین شما  D0  است، پس می‌شود   0  .

$$
pin = 1 \times 32 + (3 \times 8 + 0)
$$

شماره پین 56 میباشد.

مهم: در لینوکس همه چی فایله.

echo 56   /sys/class/gpio/export

-   مفهوم (گرفتن مجوز):   به‌صورت پیش‌فرض، هسته لینوکس تمام پین‌ها را برای امنیت خودش قفل کرده است. با این دستور به لینوکس می‌گوییم: «پین ۵۶ را به من تحویل بده».
-   اتفاقی که می‌افتد:   لینوکس یک پوشه جدید به نام  gpio56  در آن مسیر می‌سازد تا بتوان تنظیمات پین را دستکاری کرد

echo out   /sys/class/gpio/gpio56/direction

-   مفهوم (تعیین نقش):   این دقیقاً معادل دستور  pinMode(56, OUTPUT)  در آردوینو یا تنظیم رجیستر  MODER  در میکروکنترلرهای STM32 است.
-   اتفاقی که می‌افتد:   کلمه  out  (خروجی) را داخل فایلی به نام  direction  می‌نویسد. حالا پین آماده است تا ولتاژ تولید کند. (اگر می‌خواستید سنسوری را بخوانید، باید کلمه  in  را می‌نوشتید).

echo 1   /sys/class/gpio/gpio56/value

-   مفهوم (روشن کردن):   این دقیقاً معادل  digitalWrite(56, HIGH)  است.
-   اتفاقی که می‌افتد:   عدد  1  را داخل فایل  value  می‌نویسید. به محض اجرای این خط، پین روی برد ولتاژ ۳.۳ ولت (یا ۱.۸ ولت بسته به سخت‌افزار) می‌گیرد.

echo 0   /sys/class/gpio/gpio56/value

-   مفهوم (خاموش کردن):   معادل  digitalWrite(56, LOW)  است.
-   اتفاقی که می‌افتد:   عدد  0  را داخل فایل  value  می‌نویسید و ولتاژ پین صفر می‌شود.

echo 56   /sys/class/gpio/unexport

-   مفهوم (پس دادن ابزار):   یک مهندس خوب بعد از پایان کار، محیط را تمیز می‌کند!
-   اتفاقی که می‌افتد:   با نوشتن عدد ۵۶ در فایل  unexport ، به لینوکس می‌گویید: «کار من با این پین تمام شد». لینوکس هم پوشه  gpio56  را پاک می‌کند و پین را آزاد می‌کند تا برنامه‌های دیگر بتوانند از آن استفاده کنند.

این مکانیسم استاندارد لینوکس است که به آن   Sysfs GPIO Interface   می‌گویند.

میتونیم توسط کد هم gpio رو کنترل کنیم:

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

gpio blink led.zip (/uploads/20260623-205605-d7d78bcf-gpio blink led.zip)

image: image.png (/uploads/20260623-205608-a7522a79-image.png)

بعد فایل فشرده رو دانلود میکنیم:
blink led
بعدش از فشرده بودن خارج و داخل نوار بالا cmd رو چاپ میکنیم تا فایلمون رو به برد منتقل کنیم:

image: image.png (/uploads/20260623-205618-aed45671-image-1.png)

حالا که cmd باز شده : دستور زیر رو وارد میکنیم:

adb push blink led /oem/

image: image.png (/uploads/20260623-205618-8ae5dd35-image-2.png)

سپس adb shell رو میزنیم تا وارد محیط برد بشیم و اونجا به بخش

image: image.png (/uploads/20260623-205618-28c6586c-image-3.png)

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

chmod +x /oem/blink led
/oem/blink led

نتیجه خروجی :

Rec 0005 2.mp4 (/uploads/20260623-205630-8b81155c-Rec 0005 2.mp4)

شرکت Luckfoxدر ایمیج رسمی خود (Official Image)، یک معماری پیش‌فرض برای برد در نظر گرفته است. آن‌ها بسیاری از پین‌ها را از قبل برای پروتکل‌های I2C، SPI یا نمایشگرها رزرو و اصطلاحاً «قفل» کرده‌اند. بنابراین، اگر شما بخواهید پینی را که آن‌ها به عنوان I2C تنظیم کرده‌اند به عنوان یک GPIO ساده برای خواندن سنسور صنعتی کنترل کنید، سیستم‌عامل به شما اجازه این کار را نخواهد داد.

    ۲. فایل Device Tree (DTS و DTB) چیست؟

در کامپیوترهای رومیزی، سیستم‌عامل با استفاده از پروتکل‌هایی مثل PCIe یا USB به صورت خودکار (Plug & Play) سخت‌افزارهای متصل را شناسایی می‌کند. اما در لینوکس امبدد چنین مکانیزمی وجود ندارد.

هسته لینوکس (Linux Kernel) برای اینکه بفهمد چه سخت‌افزارهایی روی برد وجود دارد و هر پین به چه کاری اختصاص یافته، به یک نقشه یا سند راهنما نیاز دارد. این نقشه   Device Tree   نام دارد.

-   فایل DTS (Device Tree Source):   این فایل متنیِ قابل خواندن برای انسان است که سینتکسی شبیه به زبان C دارد. در این فایل شما صراحتاً به لینوکس می‌گویید:  "پین فلان را از حالت I2C خارج کن و به جایش آن را به عنوان یک GPIO خروجی بشناس" .
-   فایل DTB (Device Tree Binary):   هسته لینوکس نمی‌تواند فایل متنی DTS را بخواند. فایل متنی باید کامپایل شده و به کدهای باینری صفر و یک تبدیل شود. به این فایل کامپایل شده   DTB   می‌گویند. این فایل در پارتیشن Boot برد قرار می‌گیرد تا لینوکس در همان میلی‌ثانیه‌های اولِ روشن شدن، آن را بخواند.
