Unit RPIGPIOEXPANDER

From Ultibo.org
Jump to: navigation, search

Return to Unit Reference


Description


Raspberry Pi Firmware GPIO Expander Driver unit

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

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, PlatformRPi3, PlatformRPi4 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 shown 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)

For the Raspberry Pi 4B the assignments shown in /arch/arm/boot/dts/bcm2711-rpi-4-b.dts are:

  • GPIO_PIN_0 = Bluetooth Power (Active High) (BT_ON)
  • GPIO_PIN_1 = WiFi Power Sequencer (Active Low) (WL_ON)
  • GPIO_PIN_2 = Power LED (Active Low) (PWR_LED_OFF)
  • GPIO_PIN_3 = (GLOBAL_RESET) (ANT1 on CM4)
  • GPIO_PIN_4 = SDIO 1.8V regulator (Active High) (VDD_SD_IO_SEL)
  • GPIO_PIN_5 = CAM1 regulator (Active High) (CAM_GPIO)
  • GPIO_PIN_6 = SD VCC regulator (Active High) (SD_PWR_ON)
  • GPIO_PIN_7 = (SD_OC_N) (ANT2 on CM4)

The Pi 400 and CM4 files at bcm2711-rpi-400.dts and bcm2711-rpi-cm4.dts show identical assignments as the Pi 4B.

Note that this driver requires recent firmware (later than February 2017) and has been tested successfully with the firmware release from 8 October 2020.

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