Unit RPIGPIOEXPANDER

From Ultibo.org
Revision as of 04:58, 27 March 2018 by Ultibo (Talk | contribs)

Jump to: navigation, search

Return to Unit Reference


Description


Raspberry Pi Firmware GPIO Expander Driver

As of February 2017 the Raspberry Pi firmware contains a mailbox interface to allow control of the GPIO expander on the Raspberry Pi 3 and Compute Module 3.

Unlike the earlier virtual GPIO interface this mailbox service now supports most GPIO functionality including getting and setting a pin value, getting and changing the pin function and getting or changing the pull up/down options.

This driver implements most of the functionality available in the new mailbox service as a standard Ultibo GPIO device and also provides direct mailbox calls to allow access to any additional options not covered by the GPIO device API.

When included in a project this driver replaces the Virtual GPIO functions provided by the PlatformRPi2 and PlatformRPi3 units.

According to /arch/arm/boot/dts/bcm2710-rpi-3-b.dts the following pin assignments are known:

  • GPIO_PIN_2 = Activity LED
  • GPIO_PIN_4 = HDMI Detect (Input / Active Low)
  • GPIO_PIN_7 = Power LED (Input / Active Low)

For the Raspberry Pi 3B+ the assignments show in /arch/arm/boot/dts/bcm2710-rpi-3-b.dts have changed as follows:

  • GPIO_PIN_2 = Power LED (Active Low)
  • GPIO_PIN_4 = HDMI Detect (Input / Active Low)

Note that this driver requires the most recent firmware (later than February 2017) and has been tested successfully with the firmware release from 17 March 2018.

The latest version of the firmware is available from https://github.com/raspberrypi/firmware

Constants



[Expand]
RPiGPIO expander specific constants RPIGPIOEXP_GPIO_*


Type definitions



RPiGPIO expander specific types

[Expand]

PRPiGPIOExpander = ^TRPiGPIOExpander;

TRPiGPIOExpander = record


Public variables


None defined

Function declarations



Initialization functions

[Expand]
procedure RPiGPIOExpanderInit;
Description: Initialize the RPiGPIO Expander unit and create, register and start the device


RPiGPIO expander GPIO functions

[Expand]
function RPiGPIOExpanderStart(GPIO:PGPIODevice):LongWord;
Description: Implementation of GPIODeviceStart API for RPiGPIO Expander


[Expand]
function RPiGPIOExpanderStop(GPIO:PGPIODevice):LongWord;
Description: Implementation of GPIODeviceStop API for RPiGPIO Expander


[Expand]
function RPiGPIOExpanderInputGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: Implementation of GPIODeviceInputGet API for RPiGPIO Expander


[Expand]
function RPiGPIOExpanderOutputSet(GPIO:PGPIODevice; Pin,Level:LongWord):LongWord;
Description: Implementation of GPIODeviceOutputSet API for RPiGPIO Expander


[Expand]
function RPiGPIOExpanderPullGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: Implementation of GPIODevicePullGet API for RPiGPIO Expander


[Expand]
function RPiGPIOExpanderPullSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: Implementation of GPIODevicePullSelect API for RPiGPIO Expander


[Expand]
function RPiGPIOExpanderFunctionGet(GPIO:PGPIODevice; Pin:LongWord):LongWord;
Description: Implementation of GPIODeviceFunctionGet API for RPiGPIO Expander


[Expand]
function RPiGPIOExpanderFunctionSelect(GPIO:PGPIODevice; Pin,Mode:LongWord):LongWord;
Description: Implementation of GPIODeviceFunctionSelect API for RPiGPIO Expander


RTL virtual GPIO functions

[Expand]
function SysVirtualGPIOInputGet(Pin:LongWord):LongWord;
Description: Get the current state of a virtual GPIO input pin


[Expand]
function SysVirtualGPIOOutputSet(Pin,Level:LongWord):LongWord;
Description: Set the state of a virtual GPIO output pin


[Expand]
function SysVirtualGPIOFunctionGet(Pin:LongWord):LongWord;
Description: Get the current function of a virtual GPIO pin


[Expand]
function SysVirtualGPIOFunctionSelect(Pin,Mode:LongWord):LongWord;
Description: Change the function of a virtual GPIO pin


RPiGPIO expander helper functions

[Expand]
function RPiGPIOExpanderGetState(GPIO:LongWord; var State:LongWord):LongWord;
Description: Raspberry Pi Firmware Mailbox call for Get GPIO State


[Expand]
function RPiGPIOExpanderSetState(GPIO,State:LongWord):LongWord;
Description: Raspberry Pi Firmware Mailbox call for Set GPIO State


[Expand]
function RPiGPIOExpanderGetConfig(GPIO:LongWord; var Direction,Polarity,Terminator,PullUp:LongWord):LongWord;
Description: Raspberry Pi Firmware Mailbox call for Get GPIO Config


[Expand]
function RPiGPIOExpanderSetConfig(GPIO,Direction,Polarity,Terminator,PullUp,State:LongWord):LongWord;
Description: Raspberry Pi Firmware Mailbox call for Set GPIO Config


Return to Unit Reference