Ну по порядку:
WP напрямую на мониторе питания, так что тут проблем нет
Не запрограммирован, т.е. нормальный режим atmega 128
SPDR = tx;
876: 8f b9 out 0x0f, r24 ; 15
878: 80 e0 ldi r24, 0x00 ; 0
В нерабочем/тестируемом куске именно такой код, т.е. не выкинул все ОК.
Не распаян у меня JTAG, пока посмотреть не могу.
Посмотрю, может завтра (у нас уже вечер).
Нет. Сделал таймаут ожидания:
SPDR = tx;
uint8_t Cnt = 0;
while(((SPSR & 0x80) == 0) and (Cnt++ < 0xFE));
rx = SPDR;
Функция начала нормально читать данные. Но скорость ограниченна таймаутом.
Проще но при инлайне выкидывается чтение, а оно нужно.
Вообще тестирую на нескольких устройствах (пишу прошивку тестирования железа), на некоторых работает абсолютно нормально, на некоторых подвисает, похоже как раз на этих устройствах проблемы с памятью. Непонятно 2 момента:
1. как память slave может влиять на SPI
2. если ввести таймаут (см. выше) то память читается.