Перейти к содержанию
    

STM32F103 + M95080 чтение запись всего массива

Доброго времени суток уважаемые.

Пытаюсь написать программу , которая будет писать / читать 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);
}

 

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);
}
}

 

SPI у меня программный , он работает хорошо . Проверял так:

1000 раз читал статус регистр . И этот код у меня работал на флешке EN25T80

Изменено пользователем Artos5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел косяк ))) исправил , и все завелось!

 

проблема была в функции записи, вот так надо:

 

void flash_write_arr(char *data, uint16_t size, uint16_t addr)

{

uint32_t x=0, y=0;

data+=0;

addr/=32;

for(y=addr; y<(addr+size/32); y++) // page

{

write_enable_M95080();

write_status_reg_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);

}

}

 

И добавил включение разрешение на запись в функции чтения массива (думаю не помешает):

 

void flash_mas_read( uint16_t y, uint16_t addr, uint8_t s)

{

uint16_t z=0, x=0;

write_enable_M95080();

write_status_reg_M95080();

while((read_status_M95080()&0x00)!=0x00);

 

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();

 

HAL_Delay(8);

 

}

SPI_CS_SET;

HAL_Delay(8);

}

Изменено пользователем Artos5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...