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