در این نوشته اولین برنامه خروجی را برای روشن و خاموش کردن یک led خواهیم نوشت.امید است که برنامه های پیشرفته تری توسط خود شما نوشته شود.
اولین گام فعال کردن یک درایور gpio در کرنل است.در این آموزش از درایور “ugly sun4i gpio driver” استفاده شده است.برای فعال کردن درایور در کرنل به آموزش ساخت کرنل سفارشی مراجعه کنید.من این درایور را فعال کردم و شما کافی است که فایل کرنل زیر را با فایل کرنل خودتان درSD جایگزین کنید.(فایل کرنل uImage است).
نکته مهم : شما بایستی از یکی از دو لینارو که قبلا معرفی شده استفاده کنید و لینارویی که من استفاده کردم لینارو 40 درصد سریعتر معرفی شده در چند پست قبلی است.
دومین گام ویرایش فایل اسکریپت و اضافه کردن پین های مورد نظر میباشد که من این را نیز ویرایش کرده و شما بایستی آن را با فایل evb.bin موجود در SD جایگزین کنید.
من به فایل evb.bin کلیه پین هایی را که میتوانند به عنوان ورودی و خروجی به کار روند را اضافه کرده ام.
به صورت زیر:
[gpio_para]
gpio_used = 1
gpio_num = 67
gpio_pin_1 = port:PG03<1><default><default><1>
gpio_pin_2 = port:PB19<1><default><default><1>
gpio_pin_3 = port:PB18<1><default><default><1>
gpio_pin_4 = port:PG06<1><default><default><1>
gpio_pin_5 = port:PG05<1><default><default><1>
gpio_pin_6 = port:PG04<1><default><default><1>
gpio_pin_7 = port:PG01<1><default><default><1>
gpio_pin_8 = port:PG02<1><default><default><1>
gpio_pin_9 = port:PG00<1><default><default><1>
gpio_pin_10 = port:PH14<1><default><default><1>
gpio_pin_11 = port:PH15<1><default><default><1>
gpio_pin_12 = port:PI06<1><default><default><1>
gpio_pin_13 = port:PI05<1><default><default><1>
gpio_pin_14 = port:PI04<1><default><default><1>
gpio_pin_15 = port:PG11<1><default><default><1>
gpio_pin_16 = port:PG10<1><default><default><1>
gpio_pin_17 = port:PG09<1><default><default><1>
gpio_pin_18 = port:PG08<1><default><default><1>
gpio_pin_19 = port:PG07<1><default><default><1>
gpio_pin_20 = port:PE08<1><default><default><1>
gpio_pin_21 = port:PE07<1><default><default><1>
gpio_pin_22 = port:PE06<1><default><default><1>
gpio_pin_23 = port:PE05<1><default><default><1>
gpio_pin_24 = port:PE04<1><default><default><1>
gpio_pin_25 = port:PI09<1><default><default><1>
gpio_pin_26 = port:PI08<1><default><default><1>
gpio_pin_27 = port:PI07<1><default><default><1>
gpio_pin_28 = port:PD04<1><default><default><1>
gpio_pin_29 = port:PD03<1><default><default><1>
gpio_pin_30 = port:PD02<1><default><default><1>
gpio_pin_31 = port:PD01<1><default><default><1>
gpio_pin_32 = port:PD00<1><default><default><1>
gpio_pin_33 = port:PE11<1><default><default><1>
gpio_pin_34 = port:PE10<1><default><default><1>
gpio_pin_35 = port:PE09<1><default><default><1>
gpio_pin_36 = port:PD12<1><default><default><1>
gpio_pin_37 = port:PD11<1><default><default><1>
gpio_pin_38 = port:PD10<1><default><default><1>
gpio_pin_39 = port:PD09<1><default><default><1>
gpio_pin_40 = port:PD08<1><default><default><1>
gpio_pin_41 = port:PD07<1><default><default><1>
gpio_pin_42 = port:PD06<1><default><default><1>
gpio_pin_43 = port:PD05<1><default><default><1>
gpio_pin_44 = port:PD20<1><default><default><1>
gpio_pin_45 = port:PD19<1><default><default><1>
gpio_pin_46 = port:PD18<1><default><default><1>
gpio_pin_47 = port:PD17<1><default><default><1>
gpio_pin_48 = port:PD16<1><default><default><1>
gpio_pin_49 = port:PD15<1><default><default><1>
gpio_pin_50 = port:PD14<1><default><default><1>
gpio_pin_51 = port:PD13<1><default><default><1>
gpio_pin_52 = port:PB02<1><default><default><1>
gpio_pin_53 = port:PD25<1><default><default><1>
gpio_pin_54 = port:PD24<1><default><default><1>
gpio_pin_55 = port:PD26<1><default><default><1>
gpio_pin_56 = port:PD27<1><default><default><1>
gpio_pin_57 = port:PD23<1><default><default><1>
gpio_pin_58 = port:PD22<1><default><default><1>
gpio_pin_59 = port:PD21<1><default><default><1>
gpio_pin_60 = port:PI11<1><default><default><1>
gpio_pin_61 = port:PI13<1><default><default><1>
gpio_pin_62 = port:PI10<1><default><default><1>
gpio_pin_63 = port:PI12<1><default><default><1>
gpio_pin_64 = port:PB13<1><default><default><1>
gpio_pin_65 = port:PB11<1><default><default><1>
gpio_pin_66 = port:PB10<1><default><default><1>
gpio_pin_67 = port:PH07<1><default><default><1>
حال برای تست یک led را به پایه pg0 وصل کنید.(هدر بین سوکت شبکه و usb : پایه 5 پایه pg0 است و 20 زمین).
اکنون ترمینال لینوکس را باز کرده و فرمان زیر را وارد کنید:
cd /sys/class/misc/sun4i-gpio
برای دیدن پین ها به پوشه pin رفته و با تایپ ls آنها را مشاهده کنید:(67 پین)
linaro@linaro-alip:/sys/class/misc/sun4i-gpio$ cd pin linaro@linaro-alip:/sys/class/misc/sun4i-gpio/pin$ ls pb10 pd0 pd14 pd2 pd25 pd6 pe4 pg0 pg4 ph14 pi13 pi9 pb11 pd1 pd15 pd20 pd26 pd7 pe5 pg1 pg5 ph15 pi4 pb13 pd10 pd16 pd21 pd27 pd8 pe6 pg10 pg6 ph7 pi5 pb18 pd11 pd17 pd22 pd3 pd9 pe7 pg11 pg7 pi10 pi6 pb19 pd12 pd18 pd23 pd4 pe10 pe8 pg2 pg8 pi11 pi7 pb2 pd13 pd19 pd24 pd5 pe11 pe9 pg3 pg9 pi12 pi8
حال برای روشن شدن led از فرمان زیر:
echo 1 > pg0
و برای خاموش شدن از فرمان زیر:
echo 0 > pg0
استفاده کنید.
برای برنامه نویسی این پین ها شما بایستی با یک زبان برنامه نویسی به فایل دسترسی پیدا کرده و سپس عملیات مورد نظرتان را انجام دهید.
شما می توانید این کار را با زبانهایی چون C – C plus plus -C Sharp-java-python انجام دهید.
در ادامه از یک برنامه python که توسط دوست چینی و برای stepper motor نوشته شده استفاده می کنیم.(برای تست led زمان برنامه اضافه شده 20000که شما میتوانید با برگرداندن زمان به مقدار 200 و با درایور مناسب از آن برای درایو stepper motor هم استفاده کنید).
فایل زیر را دانلود کرده و پس از اکسترکت کردن آن را در پوشه /home/linaro کپی کنید.
حال کافی است در ترمینال فرمان زیر را وارد کنید:
python motor_main.py
اگر درست عمل کرده باشید ال ای دی شروع به چشمک زدن خواهد کرد.
برنامه فوق را نیز می توانستید با idle باز کرده و اجرا کنید.
برای توقف برنامه از ctrl+z استفاده کنید.
لینک دانلود فایلهای uImage و evb.bin :
لینک دانلود برنامه python: