Flash_MX25L12833FM2I_Cyclic.../Flash_MX25L12833FM2I_Cycle.c

63 lines
2.3 KiB
C

//
// 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;i<count;i++)
{if ((workspace->currentRead!=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->currentRead<workspace->end)
{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;}