Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F103 + M95080 чтение запись всего массива
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Artos5
Доброго времени суток уважаемые.
Пытаюсь написать программу , которая будет писать / читать 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);
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.