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

 
 
> Проблема с 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
 
Start new topic
Ответов
Alex Truhin
сообщение Oct 8 2010, 10:53
Сообщение #2





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



Ну по порядку:
Цитата
GDI: Ногу WP подтяните к питанию у АТ45. Можно просто соплю повесить, там нога питания соседняя, если корпус SO-8.

WP напрямую на мониторе питания, так что тут проблем нет
Цитата
aesok: Как запрограмирован фьюз M103C?

Не запрограммирован, т.е. нормальный режим atmega 128
Цитата
Как скомпилировалась строка rx = SPDR;?

SPDR = tx;
876: 8f b9 out 0x0f, r24 ; 15
878: 80 e0 ldi r24, 0x00 ; 0
Цитата
Проверте везде не только в функции DF_SPI_RW, но и во всех местах где она проинлайнилась. не выкинул ли ее компилятор. Есть ли в других местах программы обращение к регистру SPDR?

В нерабочем/тестируемом куске именно такой код, т.е. не выкинул все ОК.
Цитата
Поставте в отладчике остановку по обращению к адресу SPDR, возможно в него кто то пишет по указателю.

Не распаян у меня JTAG, пока посмотреть не могу.
Цитата
Состояние бита WCOL в SPSR?

Посмотрю, может завтра (у нас уже вечер).
Цитата
777777: А не сбрасывает ли кто SPE случайно? Может просто ноль в SPCR пишет?

Нет. Сделал таймаут ожидания:
SPDR = tx;
uint8_t Cnt = 0;
while(((SPSR & 0x80) == 0) and (Cnt++ < 0xFE));
rx = SPDR;
Функция начала нормально читать данные. Но скорость ограниченна таймаутом.
Цитата
777777: Немного позанудствую: а так не проще?

Проще но при инлайне выкидывается чтение, а оно нужно.

Вообще тестирую на нескольких устройствах (пишу прошивку тестирования железа), на некоторых работает абсолютно нормально, на некоторых подвисает, похоже как раз на этих устройствах проблемы с памятью. Непонятно 2 момента:
1. как память slave может влиять на SPI
2. если ввести таймаут (см. выше) то память читается.

Go to the top of the page
 
+Quote Post
GDI
сообщение Oct 8 2010, 11:10
Сообщение #3


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата(Alex Truhin @ Oct 8 2010, 14:53) *
WP напрямую на мониторе питания, так что тут проблем нет

Вы посмотрите осциллографом, что у Вас творится на интерфейсе. У меня были похожие проблемы с 321-ми и тоже Мега128, точно так же зависало на чтении статуса (похоже это глюк у 321х, возможно у какой-то партии или у меги128), тогда я выяснил что на не подключенном WP плавает потенциал от 0 до питания и потому проблема проявлялась периодически. В зависимости от потенциала АТ45 просто не отвечала ничего на MISO (или ногу Busy не отпускала, я уже плохо помню), помогло прямое подключение ноги WP на питание.

P.S. Хотя, возможно, я ошибаюсь и у меня просто приходил статус, да он был всегда BUSY... В общем осцилл все равно не помешает.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Alex Truhin   Проблема с SPI   Oct 7 2010, 10:33
- - aesok   Код настройки SPI. Функция DF_SPI_RW - это первая ...   Oct 7 2010, 10:53
- - Alex Truhin   Код настройки: static uint8_t df_GetStatus() { ...   Oct 7 2010, 15:17
|- - Lmx2315   прошу прощения если не на то ссылку даю и если нич...   Oct 7 2010, 17:55
|- - KSANDER   Цитата(Alex Truhin @ Oct 7 2010, 19:17) С...   Oct 8 2010, 07:44
|- - aesok   Как запрограмирован фьюз M103C? Как скомпилировала...   Oct 8 2010, 09:48
- - Alex Truhin   Цитата(KSANDER @ Oct 8 2010, 17:44) Эта с...   Oct 8 2010, 08:50
- - GDI   Ногу WP подтяните к питанию у АТ45. Можно просто с...   Oct 8 2010, 09:26
- - 777777   А не сбрасывает ли кто SPE случайно? Может просто ...   Oct 8 2010, 10:03
|- - Сергей Борщ   Цитата(777777 @ Oct 8 2010, 13:03) А не с...   Oct 8 2010, 10:25
|- - aesok   > 1. как память slave может влиять на SPI ника...   Oct 8 2010, 11:00
- - alexeyv   А можно поинтересоваться что у Вас с пином SS (исп...   Oct 8 2010, 13:08
|- - V_G   Цитата(alexeyv @ Oct 9 2010, 00:08) А мож...   Oct 8 2010, 14:47
|- - Сергей Борщ   Цитата(V_G @ Oct 8 2010, 17:47) Если вопр...   Oct 8 2010, 21:20
|- - demiurg_spb   Настройте ногу SS на выход, как Вам уже ранее неод...   Oct 10 2010, 12:41
- - GDI   В сообщении №3 все же написано, про входы и выходы...   Oct 8 2010, 13:29
- - =GM=   Цитата(Alex Truhin @ Oct 7 2010, 09:33) u...   Oct 8 2010, 15:31
- - Alex Truhin   Спасибо всем за рекомендации и советы, теперь толь...   Oct 8 2010, 17:16
- - alexeyv   ЦитатаА можно поинтересоваться что у Вас с пином S...   Oct 11 2010, 03:48


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

 


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


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