Nanopim1gpio口的使用筆記
Nanopi m1並未提供python的lib,但是m2才提供,在python的gpio lib中測試,會遇到各種問題
1、nanopi的介紹
NanoPi M1資源特性:
• CPU:AllwinnerH3, Quad-core [email protected]
• GPU:Mali400MP2@600MHz,Supports OpenGL ES2.0
• DDR3 RAM:512MB/1GB
•網絡:10/100M以太網
•音頻:3.5mm耳機座/Via HDMI
•麥克風:板載麥克風
•紅外:板載紅外接收模塊
• USB Host:Type A型號,USB 2.0 x 3
• MicroSD Slot:x1
• MicroUSB:支持供電和數據傳輸,有OTG功能
•視頻輸出: HDMI 1.41080P高清顯示, CVBS
• DVP Camera接口:24pin,0.5mm間距豎直貼片FPC座
•調試串口:4Pin,2.54mm排針
• GPIO: 40pin,2.54mm間距,兼容RasberryPi2的擴展GPIO,含UART, SPI, I2C, PWM, IO等管腳資源
•按鍵:電源按鍵x1,復位按鍵x1
•PC Size: 64 x 50mm
•Power Supply: DC 5V/2A
• OS/Software: u-boot,Debian,Ubuntu-MATE,Ubuntu-Core
2、gpio的使用
- gpio介紹
- 在嵌入式設備中對GPIO的操作,一般的做法是寫一個單獨驅動程序。其實linux下面有一個通用的GPIO操作接口,那就是“/sys/class/gpio”方式。使用這種方法,你不需要寫驅動,直接調用gpio引腳,更方便開發,內核更小。
- 操作過程
- 在Terminal中查看當前系統中有沒有“/sys/class/gpio”這個文件夾。如果沒有請在編譯內核的時候加入Device Drivers —> GPIO Support —> /sys/class/gpio/… (sysfs interface)。
- GPIO XX中引腳編號的計算
- 引腳編號=控制引腳的寄存器基數+控制引腳寄存器位數;
- 當前使用的nanopi m1是32爲的寄存器位數
- eg: GPIOB10那麼引腳編號爲=32*1+10=42
- GPIO命令介紹
- 對於用戶層而言,如果我們需要使用那個GPIOXX口,我們只需要使用以下簡單的指令就可以
- echo xx > /sys/gpio/export #文件用於通知系統需要導出控制的GPIO引腳編號
- 如果當前目錄爲 /sys/class/export
- 還可以使用 echo xx >export
- 注:在自己的測試過程中,會遇到權限不夠到的問題,當時解決的方式是
- su
- "Enter your password"
- sudo echo xx >/sys/gpio/export
- 如果成功,在當前目錄下應該生成了一個名稱爲“gpioXX”的目錄
- 可以通過cd gpioXX進入此目錄,使用ls指令可以查看當前目錄下的文件
- 大概包含了下圖所示的文件
- 對於用戶層而言,如果我們需要使用那個GPIOXX口,我們只需要使用以下簡單的指令就可以
- echo xx > /sys/gpio/unexport #文件用於通知系統取消導出控制的GPIO引腳編號
- 在新建的文件下允許我們控制引腳的輸入/輸出模式,要把引腳設置爲輸入或者輸出,只需要簡單實用以下命令即可
direction可以接受四個參數"in","out","high","low"
- echo "out" > /sys/class/gpio/gpioXX/direction
- echo "in" > /sys/class/gpio/gpioXX/direction
- 在實際測試中,發現在設置爲輸出模式時,並不需要使用“echo "out" > /sys/class/gpio/gpioXX/direction”指令,只需要使用
- echo "high" > /sys/class/gpio/gpioXX/direction
- echo "low" > /sys/class/gpio/gpioXX/direction
- 只需要使用以上指令即可
- 讀寫控制
- 讀控制
- 在設置爲輸出模式時,可以通過以下指令通過GPIO讀取當前端口的值
- cat /sys/class/gpio/gpioXX/value
- 寫控制
- 注:起初,我認爲和讀控制一致,即改變value的值,但是在測試過程中,並沒有效果,最後使用上面的的direction可以達到效果
- echo "high" > /sys/class/gpio/gpioXX/direction
- echo "low" > /sys/class/gpio/gpioXX/direction
- 讀控制
- 當我們不需要使用XX端口時,我們可以使用命令
- echo xx > /sys/gpio/unexport