A10平台linux下操作GPIO的两种方法(python库)

来源:互联网 发布:淘宝排名查询在线 编辑:程序博客网 时间:2024/06/05 16:14
使用的全志A10芯片,目前有两种在linux中访问GPIO的方法:
1.使用内核提供的sun4i-gpio驱动,用户只需修改一下fex配置文件,就可以在系统中用读写文件方式控制GPIO
      优点:操作简单,无需额外的库,由内核管理gpio,不会发生冲突
      缺点:目前驱动功能比较弱,无法在启动系统后修改pin功能,改变输入\输出等
2.使用一个为A13开发的python库
      优点:功能相对较强,python程序可以直接使用
      缺点:由于直接操作/dev/mem,需要root权限,不受内核控制,操作不慎可能干扰其他外设

下面说下具体方法:
1.使用sun4i-gpio驱动
首先打开配置硬件的fex文件,定位到[gpio_para]节(如果没有添加就是),输入要使用的gpio引脚,例如:
  1. [gpio_para]
  2. gpio_used = 1
  3. gpio_num = 6
  4. gpio_pin_1 = port:PI4<1>
  5. gpio_pin_2 = port:PI5<1>
  6. gpio_pin_3 = port:PI6<1>
  7. gpio_pin_4 = port:PI7<1>
  8. gpio_pin_5 = port:PI8<1>
  9. gpio_pin_6 = port:PI9<1>
复制代码
其中gpio_num为需要的的gpio个数,接下来gpio_pin_x分别指定具体连接端口(sw的接口图),端口后面的尖括号数字表示功能,一般0=输入,1=输出
改好文件后编译为script.bin并覆盖以前的文件,具体方法见以前的文章

然后请确保sun4i-gpio驱动已编译进内核,或者编译为模块.如果用我编译的内核,可以在这里下载模块

配置文件和内核都搞好以后,进入系统,insmod(如果使用模块的),应该就可以在/sys/devices/virtual/misc/sun4i-gpio/pin/目录看到你指定的gpio了
只需简单读写文件(如 echo 1>pi4 )就可以操作gpio了
虽然这个方法没有封装好的python库,但懂python的同学自己写点文件操作也不困难吧^_^

2. 使用现成的python库

操作gpio的python库修改自Olimex为A13芯片开发的pyA13库.由于A13与A10的寄存器映射相同,所以代码几乎无须修改,我只是把库里面的引脚定义修改成swiftboard的了.详见git: https://github.com/593141477/pyA13_swiftboard

这个库的使用方法很简单,下载代码后,和其他py库一样,使用 sudo python setup.py install 编译安装 .如果一切正常,运行代码:
  1. import A13_GPIO as GPIO

  2. GPIO.init()
  3. GPIO.setcfg(GPIO.PIN1, GPIO.OUT)
  4. GPIO.output(GPIO.PIN1, GPIO.HIGH)
复制代码
应该就可以在板子扩展口的1脚输出高电平了,函数详细说明见README

这个python库同时还附带了一个软件模拟SPI通讯的库,用如下代码测试
  1. import A13_SPI as SPI
  2. SPI.init(0)
  3. SPI.write(1,2,3,4,5,6)
复制代码
在SPI口(PIN4,PIN6,PIN8,PIN10)连接逻辑分析仪可以看到输出

软件模拟SPI的效率不高,但好处是可以自己指定SPI口使用的引脚(在pyA13.c中),不受芯片硬件限制

最后提醒一下,如果不能正常使用库,请检查是不是内核设置了STRICT_DEVMEM导致操作/dev/mem失败,详见这里的说明
原创粉丝点击