Michael_K писал(а):когда вы ставите SPI enable,проц его конфигуряет как вход независимо от настроек порта.
Если я на ногу не включаю подтяжку (0 логический на ноге), то во входящем регисторе 0х00, если включаю (1 логическая на ноге) - то 0хFF. Оно и понятно, если память никак на уровень не влияет (в моем случае, дохлая может?), то микроконтроллер интерпретирует состояние на входе так. Так что, как показывает в моем случае практика, зависит от настроек
Michael_K писал(а):Обратите внимание: SS на МАСТЕРЕ должен быть или настроен на ВЫХОД, или подтянут к плюсу
(иначе он в режим слейва самопроизвольно перейдет)
Спасибо за совет. SS у меня выходом сделан. И еще на нем 1 поднята. Без результатов
Есть один ньюанс. Я микросхемой памяти управляю не ногой SS, а другим пином, конкретно PB5 -так по разводке удобнее было. Соответственно в программе я её "дергаю" для включения-выключения памяти. Может в этом причина неработоспособности? Поэтому я на всякий случай и SS дергаю, но она, как уже сказал, в воздухе висит...
Еще вопрос. Правильно ли я считываю STATUS REGISTER? Написал следующую процедуру в CVAVR:
- Код: Выделить всё
unsigned char status_load (void)
{
unsigned char status_register_from_spdr;
unsigned char temp = 0x80;
PORTB &= ~DF_CHIP_SELECT; // enable DataFlash (DF_CHIP_SELECT определено выше по коду)
SPDR = STATUS_REGISTER; // STATUS_REGISTER - бит команды, определен выше.
while (!(SPSR & temp));
SPDR = 0xFF; //записываем произвольный байт, как сказано в посте ниже !
while (!(SPSR & temp));
status_register_from_spdr = SPDR;
PORTB |= DF_CHIP_SELECT; // disable DataFlash and start transaction
return (status_register_from_spdr & 0x80);
}
Соответственно применяю её так:
- Код: Выделить всё
while(!(status_load())); // в цикле, пока память занята
SPDR = ... выполняю загрузку в SPDR новой команды