commit 4937f9284ec86f75a300abbdeee473a721d5db3a Author: cfif Date: Wed Dec 4 13:10:47 2024 +0300 Init diff --git a/Flash_MX25L12833FM2I_Cycle.c b/Flash_MX25L12833FM2I_Cycle.c new file mode 100644 index 0000000..ccab45a --- /dev/null +++ b/Flash_MX25L12833FM2I_Cycle.c @@ -0,0 +1,63 @@ +// +// Created by ilya on 09.02.23. +// + +#include "Flash_MX25L12833FM2I_Cycle.h" +#include "Flash_MX25L12833FM2I.h" +#include "cmsis_os.h" +void Init_flash(Flash_workspace *env, uint32_t begin,uint32_t end,tSpiPortIO *spi) +{ + env->env=env; + env->begin=begin; + env->currentRead=begin; + env->currentWrite=begin; + env->end=end; + env->spi=spi; +} +uint8_t flashMX25_readbyte (Flash_workspace *workspace,uint32_t timeout) +{ + uint8_t buf=flashMX25_read( workspace->spi,workspace->currentRead,&buf,1, timeout); + return buf; +} +uint8_t flashMX25_writebyte (Flash_workspace *workspace,uint8_t buf,uint32_t timeout) { + flashMX25_write( workspace->spi,workspace->currentWrite,&buf,1, timeout); + return 0; +} +uint8_t flashMX25_receive (Flash_workspace *workspace,uint8_t *buf, int count,uint32_t timeout) +{ + for (int i=0;icurrentRead!=workspace->currentWrite)&&(workspace->currentRead!=workspace->end)) + {buf[i]= flashMX25_readbyte(workspace,timeout);workspace->currentRead++;} + else + {if (workspace->currentRead==workspace->currentWrite) + {return i;} + else + {if (workspace->currentReadend) + {buf[i]= flashMX25_readbyte(workspace,timeout);workspace->currentRead++;} + else + {workspace->end+=0x001000; + flashMX25_SectorErase(workspace->spi,workspace->begin-0x001000,timeout); + workspace->currentRead=workspace->begin;i--;}}} + } + return count;} +uint8_t flashMX25_transmit (Flash_workspace *workspace,uint8_t *bufWrite, int count,uint32_t timeout) +{ + for (int i = 0; i < count; i++) { + osDelay(100); + if (workspace->currentWrite >= workspace->currentRead) { + if (workspace->currentWrite != workspace->end) { + flashMX25_writebyte(workspace, bufWrite[i], timeout); + workspace->currentWrite++; + } + else { + workspace->begin += 0x001000; + workspace->currentWrite = workspace->begin; + i--; + } + } else { + flashMX25_writebyte(workspace, bufWrite[i], timeout); + workspace->currentWrite++; + if (workspace->currentWrite == (workspace->currentRead + 0x001000)) return 0; + } + } + return 0;} \ No newline at end of file diff --git a/Flash_MX25L12833FM2I_Cycle.h b/Flash_MX25L12833FM2I_Cycle.h new file mode 100644 index 0000000..c7ef4bb --- /dev/null +++ b/Flash_MX25L12833FM2I_Cycle.h @@ -0,0 +1,24 @@ +// +// Created by ilya on 09.02.23. +// + +#ifndef UVEOS_ON_NATION_FLASH_MX25L12833FM2I_CYCLE_H +#define UVEOS_ON_NATION_FLASH_MX25L12833FM2I_CYCLE_H +#include "inttypes.h" + + +#include "SpiPort.h" +typedef struct { + void *env; + uint32_t begin; + uint32_t end; + uint32_t currentRead; + uint32_t currentWrite; + tSpiPortIO *spi; +} Flash_workspace; +void Init_flash(Flash_workspace *env,uint32_t begin,uint32_t end,tSpiPortIO *spi); +extern uint8_t flashMX25_readbyte (Flash_workspace *workspace,uint32_t timeout); +extern uint8_t flashMX25_writebyte (Flash_workspace *workspace,uint8_t buf,uint32_t timeout); +extern uint8_t flashMX25_receive (Flash_workspace *workspace,uint8_t *buf, int count,uint32_t timeout); +extern uint8_t flashMX25_transmit (Flash_workspace *workspace,uint8_t *bufWrite, int count,uint32_t timeout); +#endif //UVEOS_ON_NATION_FLASH_MX25L12833FM2I_CYCLE_H diff --git a/modular.json b/modular.json new file mode 100644 index 0000000..33d66ce --- /dev/null +++ b/modular.json @@ -0,0 +1,18 @@ +{ + "dep": [ + { + "type": "git", + "provider": "NAVIGATOR_UVEOS_NATION_TELIT", + "repo": "SpiPort" + } + + ], + "cmake": { + "inc_dirs": [ + "./" + ], + "srcs": [ + "./**.c" + ] + } +} \ No newline at end of file