Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: atmel168 и at45db642d
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
k296
Подцепил по SPI к ATMEGA168 память AT45DB642D.
Режим SPI - 3. SPCR = 0x5D;
Высылаю команду D7 - считать статус регистр, по datasheet байт ответа должен идти сразу, но он почемуто приходит вторым байтом ?

while(!(PIND & 0x40)){}; // ïðîâåðêà çàíÿòîñòè ôëýøà
CS_ON;
SPDR = 0xD7; // ?????? ???? ??? ???????? ? ???
while(!(SPSR & 0x80));
M[0]=SPDR;
SPDR = 0xD7; // ?????? ???? ??? ???????? ? ???
while(!(SPSR & 0x80));
M[1]=SPDR;

И на компе вижу: M[0]=0xff;
M[1]=0xBC - то что и должно быть передано 1-м байтом;

Подскажите в чем проблема ?

Пытюсь также считать ID, тоже самое первым идет не 1F, как по даташит, а снова 0xff
demiurg_spb
По доке команды можно посылать лишь через 250ns после CS.
И еще, если скорость работы SPI более 25MHz, то требуется прочитать dummy byte перед чтением регистра статуса.
k296
Вставил задержку 10 мс. не помогает.
LED_MIG;
while(!(PIND & 0x40)){}; // ïðîâåðêà çàíÿòîñòè ôëýøà
CS_ON;
Delay(1);
SPDR = 0xD7; // ?????? ???? ??? ???????? ? ???
while(!(SPSR & 0x80));
M[0]=SPDR;
SPDR = 0xD7; // ?????? ???? ??? ???????? ? ???
while(!(SPSR & 0x80));
M[1]=SPDR;

Частота процессора - 11.050МГЦ
Сергей Борщ
Вы забываете, что по SPI происходит обмен байтами. В то время, как идет передача вашего первого D7 из SPDR, происходит и прием. Именно его результат вы и получаете при первом чтении. Просто игнорируйте его.
k296
Цитата(Сергей Борщ @ Dec 30 2008, 21:43) *
Вы забываете, что по SPI происходит обмен байтами. В то время, как идет передача вашего первого D7 из SPDR, происходит и прием. Именно его результат вы и получаете при первом чтении. Просто игнорируйте его.

а...понял. спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.