pico-ice
RaspberryPi Pico with an iCE40 FPGA
|
The Pmod Connection system is using a grid of 2 rows and 6 columns of pins.
It was designed by Digilent to offer something compatible with both classical jumper wires used on breadboards, and a standardised pinout that supports multiple protocols on the same connector.
This is popular on FPGA boards as it permits them to support any protocol over the same connector with the right pinout, rarely possible on MCUs.
This standard is documented here.
Here is an example of how to solder the Pmod connectors.
There are 4 Pmod connectors in the pico-ice, numbered clockwise from 1 to 4 starting from the USB connector.
The pinout of the RP2040 is made to be compatible with SPI0, with the other protocols that may be bit-banged or implemented with PIO to be pin-compatible.
For the iCE40, the pin numbers are available from pico_ice.pcf.
For the RP2040, the pin numbers are available from ice_pmod.h.
You can then use any of the pinout declaration described here.
// Use the pins from their GPIO names gpio_init(ice_pmod_3.gpio.io1); gpio_init(ice_pmod_3.gpio.io2); gpio_init(ice_pmod_3.gpio.io3); gpio_init(ice_pmod_3.gpio.io4); gpio_init(ice_pmod_3.gpio.io7); gpio_init(ice_pmod_3.gpio.io8); gpio_init(ice_pmod_3.gpio.io9); gpio_init(ice_pmod_3.gpio.io10); // Use the pins from their I²C names gpio_init(ice_pmod_3.i2c.sda); gpio_init(ice_pmod_3.i2c.scl); // Use the pins from their UART names gpio_init(ice_pmod_3.i2c.tx); gpio_init(ice_pmod_3.i2c.rx); // Use the pins from their SPI names gpio_set_function(ice_pmod_3.spi.copi, FUNC_SPI); gpio_set_function(ice_pmod_3.spi.cipo, FUNC_SPI); gpio_set_function(ice_pmod_3.spi.clk, FUNC_SPI); // Access the top or bottom row individually gpio_set_function(ice_pmod_3.row.top.spi.copi, FUNC_SPI); gpio_set_function(ice_pmod_3.row.bottom.spi.copi, FUNC_SPI); [...]
There are many Pmod vendors, and this page attempts to enumerate as many as possible.
If you have made a Pmod module, let us know and we would add it to this list!