Slavast, читаем мануал на флешку вместе (4 старница)
Цитата
To read the status register, an
opcode of 57H or D7H must be loaded into the device.
After the last bit of the opcode is shifted in, the eight bits of
the status register, starting with the MSB (bit 7), will be
shifted out on the SO pin during the next eight clock cycles.
Дословно "Для чтения статусного регистра в устройство должен быть записан код 0x57 или 0xD7. После того, как последний бит "опкода" будет вдвинут в регистр, 8 бит статусного регистра (начиная со старшего 7-го бита) будут выдвигаться наружу на вывод SO (MISO) на протяжении следующих 8 тактов".
Т.е. Вам надо сперва передать опкод 0x57, потом передать 0x00 (при этом линия MOSI будет в 0, а по SCK пройдут 8 тактовых импульсов и микросхема памяти будет по MISO слать в МК значение статусного регистра). Только после этого из SPDR читаете принятый байт данных.
Приём и передачу неправильно так разносить ибо для SPI они по времени едины. Лучше чтобы ваша функция возвращала прочитанный в SPDR байт через регистр (пусть будет r16)
Код
;--------------- Передача по SPI --------------------
SPI_MasterTransmit:
// НЕ ЗАБЫВАЕМ УСТАНАВЛИВАТЬ SlaveSelect (SS) в 0
CBI PORTB,0
ldi r16,0xD7; Посылаем OPCODE для чтения Статус-регистра
out SPDR,r16
Wait_Transmit: ; Wait for transmission complete
lds r18, SPSR
sbrs r18,SPIF
rjmp Wait_Transmit
// Передаёи байт 0x00 для чтения результата из DataFlash в МК
ldi r16,0
out SPDR,r16
Wait_Transmit1:
lds r18, SPSR
sbrs r18,SPIF
rjmp Wait_Transmit1
// Деактивируем SlaveSelect (SS) после каждой транзакции с DataFlash
SBI PORTB,0
in r16,SPDR //ПРИ ВЫХОДЕ ИЗ ФУНКЦИИ в r16 будет лежать прочитанный байт (там с ним творите что хотите, хоть в UART его передать, хоть сохранить куда-нить)
ret