Wysyła z atmega8a po SPI tymi funkcjami do pamięci DataFlash at45db bajt danych, a podczas odczytu zawsze dostaję o jeden bit za mało. Nie wiem co może być nie tak. Z góry dziękuję za pomoc.
Przykład:
wysyłam: 30 (00001110)
odbieram: 15 (00000111)
wysyłam: 31 (00001111)
odbieram: 15 (00000111)
wysyłam: 255 (11111111)
odbieram: 127 (01111111)
---
Dodano po 2 [godziny] 8 [minuty]:
Już wiem co było nie tak. Funkcję są ok. Trzeba używać opcodow odpowiednich do trybu w jakim się ustawiło spi.
Dla trybu 0:
zamiast 0x54 (standard) dla odczytu z pierwszego bufora powinno być 0xD4
dla drugiego bufora 0xD6 zamiast 0x56
itd.
(reszta w dokumentacji
)
Przykład:
wysyłam: 30 (00001110)
odbieram: 15 (00000111)
wysyłam: 31 (00001111)
odbieram: 15 (00000111)
wysyłam: 255 (11111111)
odbieram: 127 (01111111)
---
void df_write_byte_x(unsigned char byte)
{
static unsigned int counter_buffer;
spi_hw_cs_low();
spi_hw_data_send(BUFFER_1_WRITE);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(byte);
spi_hw_cs_high();
spi_hw_cs_low();
spi_hw_data_send(B1_TO_MM_PAGE_PROG_WITH_ERASE);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_cs_high();
}
unsigned char df_read_byte_x()
{
spi_hw_cs_low();
spi_hw_data_send(MAIN_MEMORY_PAGE_READ);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0);
spi_hw_data_send(0xff); // dummy
spi_hw_cs_high();
return SPDR;
}Dodano po 2 [godziny] 8 [minuty]:
Już wiem co było nie tak. Funkcję są ok. Trzeba używać opcodow odpowiednich do trybu w jakim się ustawiło spi.
Dla trybu 0:
zamiast 0x54 (standard) dla odczytu z pierwszego bufora powinno być 0xD4
dla drugiego bufora 0xD6 zamiast 0x56
itd.
(reszta w dokumentacji