Skip to content

Smalll library and quartus project for data transaction between Nios II and Flash Memory S25FL256S.

License

Notifications You must be signed in to change notification settings

nhasbun/nios_flash_spi_communication

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Comunicación SPI / Memoria Flash

Se trabaja en generar una librería en C para la extracción y guardado de datos en la memoria flash S25FL256S Datasheet incluída en la CLU. Se utiliza el NIOS II para la transacción de datos por software.

Pruebas Iniciales

Se envía el comando de identificación **Read Identification - REMS (Read_ID or REMS 90h). **Para esto se envían 8 bits correspondientes a la instrucción 0x90 y 24 bits de ceros. La respuesta esperada en 2 sets de 8 bits se obtiene del datasheet:

respuesta_id_flash.png

Se ejecuta una pequeña rutina en NIOS II para verificar una implementación básica.

La salida de la consola de NIOS II se obtiene de la siguiente forma:

Hello from Nios II!
90 0 0 0
1 18

Acá los valores corresponden a datos uint8 enviados y datos en uint8 recibidos respectivamente.

Las señales de la comunicación SPI se observan en la siguiente imagen. SPI Clock, SPI Chip Select, SPI MOSI y SPI MISO respectivamente.

osciloscopio_test.png

Funcionalidad básica lectura/escritura

Se construye una pequeña librería (wrapper de funciones de Altera) para leer datos de la memoria flash. La interfaz tiene como funciones principales write_memory() y read_add() que contienen los pasos necesarios en termino de modificación de registros y limpieza de sectores para la lectura/escritura de datos. Esto se ve a continuación.

   1 // *** MAIN INTERFACE ***
   2 
   3 // main functions
   4 void read_id();
   5 void sector_erase(uint32_t add);
   6 void write_memory(uint32_t add, uint8_t value);
   7 uint8_t read_add(uint32_t add);
   8 
   9 // status register related functions
  10 void write_enable(); // ** write enable se deshabilita después de cada
  11 // funcion de escritura (revisar 8.2 write enable command en 8. Data Protection)
  12 void write_disable();
  13 void clear_status_register();
  14 uint8_t read_status_register();
  15 void check_write_enable(bool value_target);
  16 void check_write_in_progress();
  17 
  18 // auxiliary functions
  19 void split_32_to_8_bits(uint32_t number, uint8_t * pointer);

La librería se prueba con un programa que ejecuta los siguientes pasos:

  • Identificación del módulo ocupando read_id
  • Lectura de un sector de memoria
  • Activación de write_enable y limpieza de sector de memoria
  • Activación de write_enable y escritura a sector de memoria
  • Corroborar los datos leyendo el sector de memoria
SPI FLASH INTERFACE!

*** CLEAR STATUS REGISTER ***

*** READ_ID ***
90 0 0 0 
1 18 

*** READ ADDRESS ***
13 1 ff f0 0
25

*** Write to memory ***

*** Write enable ***

*** Clear memory sector ***
dc
 1 ff f0 0

*** Write enable ***
12
 1 ff f0 0
 23

*** READ ADDRESS ***
13 1 ff f0 0
23
Status Register: 0



*** READ_ID ***
90 0 0 0 
1 18 

*** READ ADDRESS ***
13 1 ff f0 0
23

*** Write to memory ***

*** Write enable ***

*** Clear memory sector ***
dc
 1 ff f0 0

*** Write enable ***
12
 1 ff f0 0
 24

*** READ ADDRESS ***
13 1 ff f0 0
24
Status Register: 0

About

Smalll library and quartus project for data transaction between Nios II and Flash Memory S25FL256S.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published