simple FS  v0.1.0
Classes | Macros | Typedefs | Enumerations | Functions | Variables

low level implementation SPI and QSPI memory More...

Collaboration diagram for Memory_SPI:

Classes

struct  __winbond_driver_
 

Macros

#define MEMORY_MANUFACTURER_WINBOND   0xEF
 
#define MEMORY_MANUFACTURER_MICRON   0x20
 
#define MEMORY_MANUFACTURER_CYPRESS   0x01
 
#define W_SR   0x01
 
#define PAGE_PGM   0x02
 
#define READ   0x03
 
#define W_DE   0x04
 
#define R_SR1   0x05
 
#define W_EN   0x06
 
#define FAST_READ   0x0b
 
#define SECTOR_E   0x20
 
#define QPAGE_PGM   0x32
 
#define READ_DSPI   0x3B
 
#define R_SR2   0x35
 
#define R_UNIQUE_ID   0x4b
 
#define W_SR_ENABLE   0x50
 
#define CHIP_ERASE2   0x60
 
#define BLK_E_32K   0x52
 
#define E_SUSPEND   0x75
 
#define E_RESUME   0x7a
 
#define R_MANUF_ID   0x90
 
#define R_JEDEC_ID   0x9f
 
#define HIGH_PERF_M   0xa3
 
#define RELEASE   0xab
 
#define PDWN   0xb9
 
#define CHIP_ERASE   0xc7
 
#define BLK_E_64K   0xD8
 
#define CONT_R_RST   0xff
 
#define SR1_BUSY_MASK   0x01
 
#define SR1_WEN_MASK   0x02
 
#define WINBOND_MANUF   0xef
 
#define DEFAULT_TIMEOUT   200
 
#define WINBOND_32_PAGE   256
 
#define WINBOND_32_SECTOR_SIZE   WINBOND_32_PAGE*16
 WINBOND_32_SECTOR = 4096.
 
#define WINBOND_32_SECTOR_COUNT   1024
 

Typedefs

typedef enum __winbond_status_mem_ Winbond_memoryStatus
 
typedef struct __winbond_driver_ WindBondDriver_TypeDef
 

Enumerations

enum  __winbond_status_mem_ { MEMORY_EMPTY =0, MEMORY_NOT_EMPTY, MEMORY_BUSY, MEMORY_ERROR }
 

Functions

uint8_t winbond_init (void *hw_object)
 end IO functions More...
 
uint8_t winbond_init (void *hspi, void *GPIOx, uint16_t GPIO_Pin)
 
uint8_t winbond_isBusy (void)
 
uint16_t winbond_readSR (void)
 
uint8_t winbond_readManufacturer (void)
 
uint64_t winbond_readUniqueID ()
 
uint8_t winbond_readMemoryType (void)
 
uint8_t winbond_readCapacity (void)
 
uint16_t winbond_read (uint32_t addr, uint8_t *buf, uint16_t n)
 
uint16_t winbond_read_DMA (uint32_t addr, uint8_t *buf, uint16_t n)
 
uint16_t winbond_write (uint32_t addr, uint8_t *buf, int32_t n)
 
uint8_t winbond_powerDown (void)
 
uint8_t winbond_powerUp (void)
 
uint8_t winbond_eraseSector (uint32_t addr_start)
 
uint8_t winbond_eraseAll (void)
 
Winbond_memoryStatus winbond_checkSector (uint16_t sector_index)
 
uint8_t winbond_writeToMemory (uint32_t address, uint8_t *buf, uint16_t n)
 
uint8_t * winbond_readChipInfo (void)
 
void winbond_dump (void)
 
uint8_t winbond_dma_cmplt ()
 
uint8_t winbond_dma_half ()
 
uint8_t ds_init (void *hw_object, void *hw_object2, uint16_t GPIO_Pin)
 Inicializacia drivera.
 
uint16_t ds_readSR (void)
 
uint8_t ds_isBusy (void)
 Vráti stav FLASH pamäti. More...
 
uint16_t ds_read (uint32_t adr, uint8_t *buf, uint16_t n)
 
uint16_t ds_write (uint32_t adr, uint8_t *buf, int32_t len)
 
uint8_t ds_eraseAll ()
 
uint8_t ds_eraseSector (uint32_t adr_start)
 
uint8_t ds_powerDown (void)
 
uint8_t ds_powerUp (void)
 
void ds_dump (void)
 
uint8_t ds_capacity (void)
 
uint8_t ds_Manufacturer (void)
 
uint8_t ds_type (void)
 
uint64_t ds_id (void)
 
uint8_t ram_init (void *hw_object, void *hw_object2, uint16_t GPIO_Pin)
 Inicializacia drivera.
 
uint8_t ram_isBusy (void)
 Vráti stav FLASH pamäti. More...
 
uint16_t ram_read (uint32_t addr, uint8_t *buf, uint16_t n)
 
uint16_t ram_write (uint32_t addr, uint8_t *buf, int32_t dlzka)
 
uint8_t ram_eraseAll ()
 
uint8_t ram_eraseSector (uint32_t addr_start)
 
uint8_t ram_powerDown (void)
 
uint8_t ram_powerUp (void)
 
uint8_t ram_capacity (void)
 
uint8_t ram_Manufacturer (void)
 
uint8_t ram_type (void)
 
void ram_dump (void)
 
uint64_t ram_id (void)
 
void HAL_SPI_RxHalfCpltCallback (SPI_HandleTypeDef *hspi)
 
void HAL_SPI_RxCpltCallback (SPI_HandleTypeDef *hspi)
 
void HAL_QSPI_RxHalfCpltCallback (QSPI_HandleTypeDef *hqspi)
 
void HAL_QSPI_RxCpltCallback (QSPI_HandleTypeDef *hqspi)
 

Variables

MemoryDriver_t memorySpi
 
MemoryDriver_t memoryOneWire
 
uint8_t * FLASH_MEMORY
 
MemoryDriver_t memoryRam
 
WindBondDriver_TypeDef winbondFlash
 
MemoryDriver_t memorySpi
 

Detailed Description

low level implementation SPI and QSPI memory

low level implementation memory emulation (in RAM)

low level implementation 1-wire interface

Function Documentation

◆ ds_eraseSector()

uint8_t ds_eraseSector ( uint32_t  adr_start)
Parameters
adr_startindex sektora, prvy sektor ma adresu 0, druhy 1, ...

◆ ds_isBusy()

uint8_t ds_isBusy ( void  )

Vráti stav FLASH pamäti.

Returns
stav. 1 - busy, 0 - available

◆ ram_eraseSector()

uint8_t ram_eraseSector ( uint32_t  addr_start)
Parameters
addr_startindex sektora, prvy sektor ma adresu 0, druhy 1, ...

◆ ram_isBusy()

uint8_t ram_isBusy ( void  )

Vráti stav FLASH pamäti.

Returns
stav. 1 - busy, 0 - available

◆ winbond_init()

uint8_t winbond_init ( void *  hw_object)

end IO functions

Inicializacia drivera.

Parameters
hspiodkaz na rozhranie SPI
GPIOxport na ktorom je pin pre CS
GPIO_Pinpin pre funkciu CS

Nacita konstantu vyrobcu, ktora reprezentuje kapacitu cipu. Pozor, toto nie je kapacita.

Vráti stav FLASH pamäti

Returns
stav. 1 - busy, 0 - available

HAL_SPI_Transmit(winbondFlash.spi, winbondFlash.tx_data, 1, 2); HAL_SPIEx_FlushRxFifo(winbondFlash.spi); winbondFlash.tx_data[0]=0xFF;

Skontroluje, ci je sektor prazdny, alebo su tam zapisane nejake data.

Parameters
sector_indexporadie sektora. Sektry su cislovane od 0 do 1023 (0 - 0x3FF)

Skontroluje, ci je oblast pamati prazdna, alebo su tam zapisane nejake data.

Parameters
addrAdresa pamati
nvelkost kontrolovanej pamati. Velkost pamati musi byt mensia ako 1 sektor, co pre 32Mbit pamat je 4096B.
Return values
MEMORY_EMPTY,MEMORY_NOT_EMPTY,MEMORY_BUSY(nepodarila sa synchronizacia), MEMORY_ERROR (n > 4096)

Prepis udajov v sektore. Vo funkcii winbond_checkSector sa nacita aktualny obsah sektore, nasledne sa sektor zmaze. V nacitanych datach sa urobia pozadovane zmeny a data sa zapisu naspat do pamate.

Parameters
addressadresa sektora (absolutna adresa)
*bufdata, ktore sa maju zapisat od zaciatku sektora.
nvelkost buffera buf.

Kontrolovaný zápis do pamati. Skontroluje obsah pamati, do ktorej sa zapisuje. Táto funkcia dovoluje postupné zapisovanie aj v rámci jedného sektora.

Parameters
addressadresa pre zápis
bufbuffer, ktorý sa zapíše
ndĺžka buffera buff
Note
max po4čet bajtov na zápis je 4096
Return values
0- úspech
Parameters
addr_startindex sektora, prvy sektor ma adresu 0, druhy 1, ...

Variable Documentation

◆ memoryOneWire

MemoryDriver_t memoryOneWire
Initial value:
= {
&ds_read,
&ds_write,
&ds_eraseAll,
&ds_powerUp,
&ds_powerDown,
&ds_dump,
&ds_capacity,
&ds_Manufacturer,
&ds_type,
&ds_id,
}

◆ memoryRam

MemoryDriver_t memoryRam
Initial value:
= {
&ram_read,
&ram_write,
&ram_eraseAll,
&ram_powerUp,
&ram_powerDown,
&ram_dump,
&ram_capacity,
&ram_Manufacturer,
&ram_type,
&ram_id,
}

◆ memorySpi

MemoryDriver_t memorySpi
Initial value:
= {
&winbond_read,
&winbond_write,
&winbond_isBusy,
&winbond_eraseAll,
&winbond_eraseSector,
&winbond_powerUp,
&winbond_powerDown,
&winbond_dump,
&winbond_readCapacity,
&winbond_readManufacturer,
&winbond_readMemoryType,
&winbond_readUniqueID,
}
winbond_init
uint8_t winbond_init(void *hspi)
end IO functions
Definition: memory_winbond32.c:274
ram_eraseSector
uint8_t ram_eraseSector(uint32_t addr_start)
Definition: memory_ram.c:83
ds_init
uint8_t ds_init(void *hw_object, void *hw_object2, uint16_t GPIO_Pin)
Inicializacia drivera.
Definition: memory_ds.c:39
ram_init
uint8_t ram_init(void *hw_object, void *hw_object2, uint16_t GPIO_Pin)
Inicializacia drivera.
Definition: memory_ram.c:39
ds_eraseSector
uint8_t ds_eraseSector(uint32_t adr_start)
Definition: memory_ds.c:82
ds_isBusy
uint8_t ds_isBusy(void)
Vráti stav FLASH pamäti.
Definition: memory_ds.c:59
ram_isBusy
uint8_t ram_isBusy(void)
Vráti stav FLASH pamäti.
Definition: memory_ram.c:53