Skip to content

ulikoehler/QuickSPI

Repository files navigation

QuickSPI

Practical Arduino SPI wrapper, allowing direct register access with proper error handling.

ESP-IDF Compatibility

QuickSPI supports both ESP-IDF 5 and ESP-IDF 6 automatically.

  • On ESP-IDF 5, the component links against the classic driver component.
  • On ESP-IDF 6, the component auto-detects the split driver layout and adds esp_driver_spi and esp_driver_gpio as required dependencies.

No user-side CMake changes are required for this version split.

This is intended to be similar to AdaFruit BusIO but provide a more convenient API and less memory footprint. For example, every Adafruit_BusIO_Register is an actual object occupying a bunch of bytes of RAM and does not provide verified read functionality.

How?

QuickSPI provides classes & macro tricks to automatically define appropriate functions for any register, with zero memory footprint for additional registers.

Arduino INA239 example

This example initializes and reads some registers of the INA239 voltage & current sense amplifier

#include <SPI.h>
#include <QuickSPI.h>

#define Pin_SPI_nCS_ADC 8
SPIClass mySPI(HSPI);

INA239<> ina(mySPI, Pin_SPI_nCS_ADC, SPISettings(1000000, SPI_MSBFIRST, SPI_MODE1));

void setup() {
    ina.Configure();
}

void loop() {
    // Example of automatically generated register read method
    // This method is automatically generated from
    //    QUICKSPI_DEFINE_REGISTER16_RO(ManufacturerID, (0x3E << 2) | ReadFlag) {};
    uint32_t manufacturerId = zoneADC.readManufacturerID(); // Should be 0x5449
    
    // Example 
    float current = zoneADC.ComputeCurrent();
    float voltage = zoneADC.ComputeVoltage();
    
    // TODO Your code goes here...
}

About

Take the insanity out of the Arduino SPI API. QuickSPI is a simple, safe and easy-to-use register-based Arduino SPI wrapper, allowing direct register access with proper error handling.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors