spi-flash-storage-7.ino
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);
}