spi-flash-storage-7.ino
Ejemplo de comunicación SPI para persistir datos en un chip Flash externo conectado al bus SPI0.
Conecte una Flash SPI (por ejemplo, serie W25Q) a los pines MOSI, MISO, CLK y CS de SPI0. El código maneja la selección del dispositivo mediante GPIO. Verifique los ajustes de frecuencia SPI compatibles con su Flash. Compile con la cadena de herramientas RISC-V para 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);
}