Artos5 0 22 января, 2018 Опубликовано 22 января, 2018 (изменено) · Жалоба Доброго времени суток уважаемые. Пытаюсь написать программу , которая будет писать / читать 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 Изменено 22 января, 2018 пользователем Artos5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artos5 0 22 января, 2018 Опубликовано 22 января, 2018 (изменено) · Жалоба Нашел косяк ))) исправил , и все завелось! проблема была в функции записи, вот так надо: 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); } Изменено 22 января, 2018 пользователем Artos5 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться