Цитата
Насколько понял, после передачи каждого байта, в SPDR должен оставаться байт, выдвигаемый из MAX. Т.е. то, что было туда задвинуто в предыдущем цикле.
Поняли неверно. То, что будет оставаться (вернее, появлятся) в SPDR, определяется МАХ'ом. На стр.6 даташита указано:
Цитата
DOUT provides a copy of the bit that was input 15.5 clocks earlier, or upon a query it outputs internal register data
Данные на выходе MAX'a появятся только после второго записанного байта. А в SPDR попадут только после третьего (если держать CS==0). Это используется для каскадирования микросхем. Для работы с одним максом это не нужно. Разве что для тестирования подключения MAX'a
Теперь о записи и чтении.
Предполагаю, что MAX у Вас на плате один. То есть цикл записи состоит из 16 бит(команда + данные), которые обрамлены спадом и фронтом CS.
Процесс записи занимает 1 цикл:
Код
cs=0, <Command_0>, <Data> cs=1.
Процесс чтения - минимум 2 цикла.
В первом цикле пишем команду чтения + ЛюбойБайт. По фронту CS запрошенные данные читаются в сдвиговый регистр.
В следующем цикле пишем следующую комманду (запись/чтение/nop) и перед (или после) установки CS=1 из SPDR читаем результат выполнения первой команды.
Код
cs=0, <Command_1>, <Dummy>, cs=1, пауза,
cs=0, <Command_0/1>, <Data/Dummy>, cs=1.
Если второй командой была также команда чтения, то ее результат мы получим после завершения третьего цикла и т.д.
Command_0 - команда записи (8 бит)
Command_1 - команда чтения (8 бит)
Command_0/1 - команда записи/чтения/nop (8 бит)
Data - байт данных
Dummy - 8 бит безразлично какой информации.