реклама на сайте
подробности

 
 
> Проблема с SPI, зависает при обращении к SPDR
Alex Truhin
сообщение Oct 7 2010, 10:33
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 13-04-10
Пользователь №: 56 609



Atmega 128 и память AT45DB321, читаю статус памяти,
SELECT();
status = DF_SPI_RW(StatusReg);
status = DF_SPI_RW(0x00);
DESELECT();

static uint8_t DF_SPI_RW( uint8_t tx )
{
uint8_t rx;
SPDR = tx;
while(!(SPSR & 0x80));
rx = SPDR;
return rx;
}
при первом чтении все ОК, но при повторном чтении, на строке status = DF_SPI_RW(0x00);
программа зависает, т.е. SPSR не взводиться.
Возможно есть проблемы с памятью, но почему не взводится флаг SPSR? Ведь насколько я понимаю,
мастер устройству пофиг на реакцию слэйв устройства на SPI?
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 20)
V_G
сообщение Oct 8 2010, 14:47
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(alexeyv @ Oct 9 2010, 00:08) *
А можно поинтересоваться что у Вас с пином SS (используется или нет и как настроен - вход или выход) ?

Если вопрос по теме топика, то в мастер-режиме пин SS никак не задействован, его можно настраивать как угодно и манипулировать вручную. У меня на SPI сидят несколько устройств, для каждого вручную дергаю свой чипселект (он же SS)

Сообщение отредактировал V_G - Oct 8 2010, 14:48
Go to the top of the page
 
+Quote Post
=GM=
сообщение Oct 8 2010, 15:31
Сообщение #17


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(Alex Truhin @ Oct 7 2010, 09:33) *
uint8_t rx;
SPDR = tx;
while(!(SPSR & 0x80));
rx = SPDR;
при первом чтении все ОК, но при повторном чтении, на строке status = DF_SPI_RW(0x00); программа зависает, т.е. SPSR не взводиться

Явно есть проблема с периферией МК, нельзя ли оторвать SCLK и MOSI от чипа памяти и повторить тест?

Ещё интересует, почему вы читаете статус памяти, но не дожидаетесь готовности бита BUSY?
Вот кусок из старой библиотеки
Код
//================================================
// Ожидание готовности DataFlash,
// проверяем BUSY в регистре статуса
//------------------------------------------------
//аргументы: нет
//возвращает:значение регистра статуса
//================================================
xByte at45WaitReady(st_at45_Data *pntr)
{
xByte res=0;
SET_CS_DATAFLASH;                               //установим CS для DataFlash
txrxByteSpi(at45_StatusRegRead1, pntr->num);    //передаем номер команды
while (!(res&AT45BUSY))                         //ждем пока не установится
{
  res=txrxByteSpi(0, pntr->num);                //бит READY/nBUSY в регистре
}                                               //статуса DataFlash
RESET_CS_DATAFLASH;                             //сбросим CS для DataFlash
return(res);
}


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Alex Truhin
сообщение Oct 8 2010, 17:16
Сообщение #18





Группа: Новичок
Сообщений: 8
Регистрация: 13-04-10
Пользователь №: 56 609



Спасибо всем за рекомендации и советы, теперь только в понедельник посмотрю, отпишу результаты.
Цитата
=GM=: Ещё интересует, почему вы читаете статус памяти, но не дожидаетесь готовности бита BUSY?
Вот кусок из старой библиотеки

BUSY смотрю при переключении страниц, при запросе статуса его смотреть не нужно, это видно и из примеров atmel, и по логике, т.к. busy, согласно документации, можно проверять 2 способами, либо проверять на выводе (если он есть), либо проверять бит статуса.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 8 2010, 21:20
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(V_G @ Oct 8 2010, 17:47) *
Если вопрос по теме топика, то в мастер-режиме пин SS никак не задействован, его можно настраивать как угодно и манипулировать вручную.
Это не по теме топика (у автора он настроен на вывод), но для полноты картины: в мастер-режиме, будучи настроенным на ввод эта ножка используется:
Цитата
If SS is configured as an input, it must be held high to ensure Master SPI operation. If the SS pin is driven low by peripheral circuitry when the SPI is configured as a master with the SS pin defined as an input, the SPI system interprets this as another master selecting the SPI as a slave and starting to send data to it. To avoid bus contention, the SPI system takes the following actions:
1. The MSTR bit in SPCR is cleared and the SPI system becomes a slave. As a result of the SPI becoming a slave, the MOSI and SCK pins become inputs.
2. The SPIF flag in SPSR is set, and if the SPI interrupt is enabled, and the I-bit in SREG is set, the interrupt routine will be executed.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 10 2010, 12:41
Сообщение #20


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Настройте ногу SS на выход, как Вам уже ранее неоднократно намекали.
Это стандартные грабли, на которые очень многие наступают:-)

Сори, увидел, что уже спросили Вас об этом (нога SS) и за Вас же ответили...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Oct 11 2010, 03:48
Сообщение #21


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Цитата
А можно поинтересоваться что у Вас с пином SS (используется или нет и как настроен - вход или выход) ?


Цитата
Это не по теме топика (у автора он настроен на вывод),


Цитата
If SS is configured as an input, it must be held high to ensure Master SPI operation. If the SS pin is driven low by peripheral circuitry when the SPI is configured as a master with the SS pin defined as an input, the SPI system interprets this as another master selecting the SPI as a slave and starting to send data to it.


Это именно по теме топика и именно это я и хотел порекомендовать проверить!!!!!
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th June 2025 - 17:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01408 секунд с 7
ELECTRONIX ©2004-2016