Package: pyA20EVB
This package provide methods for controlling GPIO pins, I2C and SPI buses.This is written for A20-SOM, but it can be used with other boards. If you dothis we cannot guarantee proper operation of the module. Before using thispackage we recommend reading the article at olimex wiki:https://www.olimex.com/wiki/A20-SOM-EVBWhen using GPIO make sure that the desired gpio is not used by another periphery.GPIO METHODS============init()      -   Make initialization of the module. Always must be called first.getcfg()    -   Read current configuration of gpio.setcfg()    -   Write configuration to gpio.input()     -   Return current value of gpio.output()    -   Set output value.pullup()    -   Set pull-up/pull-down.The available constants are:NAME        -   EQUALS TO====            =========HIGH        ->      1LOW         ->      0INPUT       ->      0OUPTUT      ->      1PULLUP      ->      1PULLDOWN    ->      2The gpio are named two ways:By port name: PH0, PG2, PE10, etc.These can be imported from port module:>>> from pyA20EVB.gpio import port>>> dir(port)By connector name and pin number: gpio2p12, gpio3p8, etc.These can be imported from connector module:>>> from pyA20EVB.gpio import connector>>> dir(connector)Generally these constants are just an offset in the memory from the base GPIO address, so they canbe assigned to a number type variable.>>> led = port.PH2>>> print led226I2C METHODS===========init()      -   Make initialization of the moduleopen()      -   Begin communication with slave deviceread()      -   Read from slave devicewrite()     -   Write data to slave deviceclose()     -   End communication with slave deviceSPI METHODS===========open()      -   Open SPI bus with given configurationread()      -   Read data from slave device without writewrite()     -   Write data to slave device without readxfer()      -   Do write and after that readclose()     -   Close SPI busExamples========GPIO::#!/usr/bin/env pythonfrom pyA20EVB.gpio import gpiofrom pyA20EVB.gpio import portfrom pyA20EVB.gpio import connectorgpio.init() #Initialize module. Always called firstgpio.setcfg(port.PG9, gpio.OUTPUT)  #Configure LED1 as outputgpio.setcfg(port.PG9, 1)    #This is the same as abovegpio.setcfg(port.PE11, gpio.INPUT)   #Configure PE11 as inputgpio.setcfg(port.PE11, 0)   #Same as abovegpio.pullup(port.PE11, 0)   #Clear pullupsgpio.pullup(port.PE11, gpio.PULLDOWN)    #Enable pull-downgpio.pullup(port.PE11, gpio.PULLUP)  #Enable pull-upwhile True:if gpio.input(port.PE11) == 1:gpio.output(port.PG9, gpio.LOW)gpio.output(port.PG9, 0)else:gpio.output(port.PG9, gpio.HIGH)gpio.output(port.PG9, 1)I2C::#!/usr/bin/env pythonfrom pyA20EVB import i2ci2c.init("/dev/i2c-2")  #Initialize module to use /dev/i2c-2i2c.open(0x55)  #The slave device address is 0x55#If we want to write to some registeri2c.write([0xAA, 0x20]) #Write 0x20 to register 0xAAi2c.write([0xAA, 0x10, 0x11, 0x12]) #Do continuous write with start address 0xAA#If we want to do write and readi2c.write([0xAA])   #Set address at 0xAA registervalue = i2c.read(1) #Read 1 byte with start address 0xAAi2c.close() #End communication with slave deviceSPI::#!/usr/bin/env pythonfrom pyA20EVB import spispi.open("/dev/spidev2.0")#Open SPI device with default settings# mode : 0# speed : 100000kHz# delay : 0# bits-per-word: 8#Different ways to open devicespi.open("/dev/spidev2.0", mode=1)spi.open("/dev/spidev2.0", mode=2, delay=0)spi.open("/dev/spidev2.0", mode=3, delay=0, bits_per_word=8)spi.open("/dev/spidev2.0", mode=0, delay=0, bits_per_word=8, speed=100000)spi.write([0x01, 0x02]) #Write 2 bytes to slave devicespi.read(2) #Read 2 bytes from slave devicespi.xfer([0x01, 0x02], 2)   #Write 2 byte and then read 2 bytes.spi.close() #Close SPI busIt's important that you run your python script as root!Changelog=========* pyA20EVB 0.2.1 (30 JUN 2015)* Fixed issue with SPI xfer function* pyA20EVB 0.2.0 (03 SEP 2014)* Initial release