spi-flash-storage-7.ino

Efinix Sapphire RV64: SoC RISC-V de 64 bits configurable para FPGA · Archivo : spi-flash-storage-7.ino · Lenguaje : C · Uso : Écrire et lire des données sur une mémoire Flash SPI externe.

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);
}

← Volver a la ficha