Пытаюсь написать программу , которая будет писать / читать SPI eeprom M95080
Написал функции чтения и записи данных с / в еепром. Если с 0 адреса пишу / читаю - работает , если уже пишу читаю с 256 адреса 256 байт , то есть по 512 адрес - то полная фигня считывается ...
Вот функции чтения и записи :
Код
void flash_mas_read( uint16_t y, uint16_t addr, uint8_t s)
{
uint16_t z=0, x=0;
read_cmd_M95080();
soft_spi_write_addr(addr);
HAL_Delay(1);
for(x=0; x<y; x++) // читаем данные
{
if(s==0)buff_text1[x] = soft_spi_read();
else buff_text2[x] = soft_spi_read();
}
SPI_CS_SET;
HAL_Delay(8);
}
{
uint16_t z=0, x=0;
read_cmd_M95080();
soft_spi_write_addr(addr);
HAL_Delay(1);
for(x=0; x<y; x++) // читаем данные
{
if(s==0)buff_text1[x] = soft_spi_read();
else buff_text2[x] = soft_spi_read();
}
SPI_CS_SET;
HAL_Delay(8);
}
Код
void flash_write_arr(char *data, uint16_t size, uint16_t addr)
{
uint16_t x=0, y=0;
data+=0;
for(y=addr; y<=addr+size/32; y++) // page
{
write_status_reg_M95080();
write_enable_M95080();
while((read_status_M95080()&0x00)!=0x00);
SPI_CS_SET;
soft_spi_write_instruct(SPI_FLASH_INS_PAGE_PROGRAM);
soft_spi_write_addr(y*32);
for(x=y*32; x<(y*32+32); x++)
{
soft_spi_write_instruct(data[x-addr*32]);
}
SPI_CS_SET;
HAL_Delay(70);
}
}
{
uint16_t x=0, y=0;
data+=0;
for(y=addr; y<=addr+size/32; y++) // page
{
write_status_reg_M95080();
write_enable_M95080();
while((read_status_M95080()&0x00)!=0x00);
SPI_CS_SET;
soft_spi_write_instruct(SPI_FLASH_INS_PAGE_PROGRAM);
soft_spi_write_addr(y*32);
for(x=y*32; x<(y*32+32); x++)
{
soft_spi_write_instruct(data[x-addr*32]);
}
SPI_CS_SET;
HAL_Delay(70);
}
}
SPI у меня программный , он работает хорошо . Проверял так:
1000 раз читал статус регистр . И этот код у меня работал на флешке EN25T80