spi-flash-storage-7.ino

Efinix Sapphire RV64 : SoC RISC-V 64 bits configurable pour FPGA · Fichier : spi-flash-storage-7.ino · Langage : C · Usage : Écrire et lire des données sur une mémoire Flash SPI externe.

Exemple de communication SPI pour persister des données sur une puce Flash externe connectée au bus SPI0.

Connectez une Flash SPI (ex: W25Q series) aux broches MOSI, MISO, CLK et CS du SPI0. Le code gère la sélection du périphérique via GPIO. Vérifiez les paramètres de fréquence SPI compatibles avec votre Flash. Compilez avec la chaîne d'outils RISC-V pour 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);
}

← Retour à la fiche