spi-flash-storage-7.ino

Efinix Sapphire RV64 : Configurable 64-bit RISC-V SoC for FPGAs · File : spi-flash-storage-7.ino · Language : C · Use case : Écrire et lire des données sur une mémoire Flash SPI externe.

SPI communication example to persist data on an external Flash chip connected to the SPI0 bus.

Connect a SPI Flash (e.g., W25Q series) to MOSI, MISO, CLK, and CS pins of SPI0. The code handles device selection via GPIO. Check SPI frequency settings compatible with your Flash. Compile with the RISC-V toolchain for Efinity.

spi-flash-storage-7.ino

#include <stdio.h>
#include <string.h>
#include "xhal_spi.h"
#include "xhal_gpio.h"

#define SPI_INSTANCE XHAL_SPI0
#define FLASH_CS_PIN GPIO_PIN_5 // À adapter selon le schéma
#define PAGE_SIZE 256

void spi_flash_write(uint32_t addr, const uint8_t *data, uint32_t len) {
    uint8_t cmd[4] = {0x02, (addr>>16)&0xFF, (addr>>8)&0xFF, addr&0xFF};
    xhal_gpio_clear(FLASH_CS_PIN);
    xhal_spi_write(SPI_INSTANCE, cmd, 4, 10);
    xhal_spi_write(SPI_INSTANCE, data, len, 10);
    xhal_gpio_set(FLASH_CS_PIN);
}

void spi_flash_read(uint32_t addr, uint8_t *data, uint32_t len) {
    uint8_t cmd[4] = {0x03, (addr>>16)&0xFF, (addr>>8)&0xFF, addr&0xFF};
    xhal_gpio_clear(FLASH_CS_PIN);
    xhal_spi_write(SPI_INSTANCE, cmd, 4, 10);
    xhal_spi_read(SPI_INSTANCE, data, len, 10);
    xhal_gpio_set(FLASH_CS_PIN);
}

int main(void) {
    xhal_gpio_init();
    xhal_gpio_config(FLASH_CS_PIN, GPIO_OUTPUT);
    xhal_spi_init(SPI_INSTANCE, 10000000, SPI_MODE_0, 8); // 10MHz
    
    uint8_t write_buf[10] = "HelloRV64";
    spi_flash_write(0x000000, write_buf, 10);
    
    uint8_t read_buf[10] = {0};
    spi_flash_read(0x000000, read_buf, 10);
    printf("Read: %s\n", read_buf);
    
    while(1);
}

← Back to the board