Introduction
This guide will walk you through Interfacing with Arduino IO on the FPGA Mezzanine using a dedicated C Library.
Hardware Setup
- Any 96Boards CE Board
- Shiratech FPGA Mezzanine
Software setup
- Install MRAA on 96Boards CE
- Clone the fpga_mezz_lib repository
git clone https://github.com/96boards-projects/fpga_mezz_lib
Using the Library
Note: The library currently only supports the Arduino header
- Pin Map: This library uses the following pin map for the Arduino header
| Arduino Pins | Function | GPIO Pin Number |
|---|---|---|
| A0-A3 | NA | NC |
| A5 | I2C1 SDA/GPIO | 17 |
| A6 | I2C1 SCL/GPIO | 16 |
| D0 | UART0 RX/GPIO | 0 |
| D1 | UART0 TX/GPIO | 1 |
| D2 | GPIO | 2 |
| D3 | GPIO | 3 |
| D4 | GPIO | 4 |
| D5 | GPIO | 5 |
| D6 | GPIO | 6 |
| D7 | GPIO | 7 |
| D8 | GPIO | 8 |
| D9 | GPIO | 9 |
| D10 | SPI_CS/GPIO | 10 |
| D11 | SPI_MOSI/GPIO | 11 |
| D12 | SPI_MISO/GPIO | 12 |
| D13 | SPI_CLK/GPIO | 13 |
| SDA | I2C0 SDA/GPIO | 14 |
| SCL | I2C0 SCL/GPIO | 15 |
- Macros: Following macros will come handy
- Macros for Multifunction IO Pins on the Arduino Header to be used with pinMode()
-
ARD_I2C_0_FUNC: Refers to GPIO15 and GPIO14 responsible for I2C0 Bus -
ARD_SPI_FUNC: Refers to GPIO10 to GPIO13 responsible for SPI Bus -
ARD_UART_FUNC: Refers to GPIO0 and GPIO1 responsible for UART0 Bus -
ARD_I2C_1_FUNC: Refers to GPIO17 and GPIO16 responsible for I2C1 Bus
-
- I2C Bus used by the FPGA Mezzanine
-
I2C_BUS: Just in case a 96Boards has a different internal Bus on I2C0 pins.
-
- Macros for Input or Output Mode used in pinMode()
-
INPUT: Value 1 -
OUTPUT: Value 0
-
- Macros for High or LOW GPIO state used in digitalWrite() and digitalRead()
-
HIGH: Value 1 -
LOW: Value 0
-
- Macros for Multifunction IO Pin state used in pinFunction()
-
FUNC_PASSTHROUGH: Sets I2c, SPI or UART in Passthrough mode. -
FUNC_GPIO: Sets I2c, SPI or UART pins in GPIO mode.
-
- Functions:
- check_version(mraa_i2c_context i2c)
- This function returns the current firmware revision of the FPGA Mezzanine which is stored in the REV_REG 0x00.
- Input:
-
i2c: MRAA I2C context of the FPGA Mezzanine on bus 0 and address 0x6f
-
- Returns revision as
intvalue. - Returns
-1if I2C communication fails.
- test(mraa_i2c_context i2c)
- This function sets a specific value to the TEST_REG 0x01 and reads back the value to test I2C communication.
- Input:
-
i2c: MRAA I2C context of the FPGA Mezzanine on bus 0 and address 0x6f
-
- Returns
1if test passed. - Returns
-1if an error occurs.
- pinFunction(u_int8_t func_type, u_int8_t func, mraa_i2c_context i2c)
- This function sets Multi-Functional pins to either PassThrough to LowSpeed header or GPIO.
- Inputs:
-
func_type: The MultiFunctional pins you want to toggle. These may be:-
ARD_I2C_0_FUNC: for GPIO 14 and 15 that are connected to the I2C0 bus. -
ARD_I2C_1_FUNC: for GPIO 16 and 17 that are connected to the I2C1 bus. -
ARD_SPI_FUNC: for GPIO 10, 11, 12 and 13 that are connected to the SPI bus. -
ARD_UART_FUNC: for GPIO 0, 1 that are connected to the UART0 bus.
-
-
func: Set as Passthrough or GPIO.-
FUNC_PASSTHROUGH: The pins are directly connected to their respective Bus on the 96Boards Low Speed Header. -
FUNC_GPIO: The pins are detached from the Low Speed Header and can be used as regular GPIO pins using the digitalWrite and digitalRead functions.
-
-
i2c: MRAA I2C context of the FPGA Mezzanine on bus 0 and address 0x6f
-
- Returns
-1if an error occurs.
- pinMode(u_int8_t pin, u_int8_t mode, mraa_i2c_context i2c)
- This function sets the GPIO pins as either Input or Output pins. Multi-Functions pins will need to be set to GPIO mode before being used with this function.
- Inputs:
-
pin: Pin value, refer to the pin map on section one of ‘Using The Library’ -
mode: Input or Output mode.-
INPUT: Sets pins as input pins. -
OUTPUT: Sets pins as output pins.
-
-
i2c: MRAA I2C context of the FPGA Mezzanine on bus 0 and address 0x6f
-
- Returns
-1if an error occurs.
- digitalWrite(u_int8_t pin, u_int8_t state, mraa_i2c_context i2c)
- This function writes a pin to either high or low if it’s configured as an OUTPUT.
- Inputs:
-
pin: Pin value, refer to the pin map on section one of ‘Using The Library’ -
state: Input or Output mode.-
HIGH: Sets pins as high. -
LOW: Sets pins as low.
-
-
i2c: MRAA I2C context of the FPGA Mezzanine on bus 0 and address 0x6f
-
- Returns
-1if an error occurs.
- digitalRead(u_int8_t pin, mraa_i2c_context i2c)
- This function reads the value of a pin.
- Inputs:
-
pin: Pin value, refer to the pin map on section one of ‘Using The Library’ -
i2c: MRAA I2C context of the FPGA Mezzanine on bus 0 and address 0x6f
-
- Returns
-1if an error occurs. - Returns
1if the pin is HIGH. - Returns
0id the pin is LOW.
Example
An example implementation is present in the repository, it can be built by running make.