Цитата(AHTOXA @ Sep 7 2011, 17:16)

Да, именно. (В четвёртом сообщении темы есть пример)
Я его изначально за основу и взял, если честно. Но неопределенность с функциями spi_r8 и spi_w привела в тупик.
Вот сейчас не получается добиться того чтобы прочитать из микросхемы записанный ранее байт.
Функция записи получилась такая:Код
uint8_t ssp_rw(uint8_t b)
{
SSP1DR = b; // передаём
while ( !(SSP1SR & SSPSR_RNE) ); // ждём пока примется
return SSP1DR;
}
void at25_command(char cmd)
{
at25_SSEL_low(AT25_CS);
ssp_rw(cmd);
}
void at25_write_byte(uint32_t adr, uint8_t data)
{
at25_command(EE_WREN);
at25_SSEL_high(AT25_CS); // toggle CS, necessary for WREN
at25_command(EE_WRITE);
ssp_rw(adr >> 16);
ssp_rw(adr >> 8);
ssp_rw(adr);
ssp_rw(data);
at25_SSEL_high(AT25_CS);
while (at25_read_status()& SS_WRITING);
}
Функция at25_write_byte() вроде отрабатывает без ошибок.
Но при чтении этого байта - вместо мною записанного байта возвращается 0xFFФункция чтения:Код
uint8_t at25_read_byte(uint32_t adr)
{
uint8_t result;
at25_command(EE_READ);
ssp_rw(adr >> 16);
ssp_rw(adr >> 8);
ssp_rw(adr);
result = ssp_rw(0);
at25_SSEL_high(AT25_CS);
return result;
}