roboforum.ru

Технический форум по робототехнике.


SPI флеш AT25DF041 и AVR

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

SPI флеш AT25DF041 и AVR

Сообщение grek » 03 июл 2013, 19:34

Добрый день.Подскажите как заставить записывать и считывать на данный тип флехи SPI флеш AT25DF041 - AVR. Может кто выложит рабочий код с данным типом флешки. Не могу записать и прочить байт. Может она не пишет побайтно. Если не так поправьте меня.
Код: Выделить всёРазвернуть
//****************** SPI Definitions **************//
#define CHIP_SELECT_AT25   PORTE.3=0;delay_ms(100);
#define CHIP_UNSELECT_AT25 PORTE.3=1;delay_ms(100);
//******************* SPI Definitions *************//

//******************* Instruction Set ************//
// Read Commands
#define SPI_FLASH_INS_READ             0x03 // Read array                                 
#define SPI_FLASH_INS_FAST_READ        0x0B // Read array(low frequency)

// Program and Erase Commands
#define SPI_FLASH_INS_BLOCK_ERASE_4K   0x20 // Sector erase
#define SPI_FLASH_INS_BLOCK_ERASE_32K  0x52 // Sector erase
#define SPI_FLASH_INS_BLOCK_ERASE_64K   0xD8 // Sector erase
#define SPI_FLASH_INS_CHIP_ERASE_1   0x60 // Sector erase
#define SPI_FLASH_INS_CHIP_ERASE_2   0xC7 // Sector erase
#define SPI_FLASH_INS_PAGE_PROGRAM        0x02 // Byte/Page program

// Protection commands
#define SPI_FLASH_INS_WRITE_ENABLE      0x06 // Write enable
#define SPI_FLASH_INS_WRITE_DISABLE      0x04 // Write disable
#define SPI_FLASH_INS_PROTECT_SECTOR      0x36 // Write disable
#define SPI_FLASH_INS_UNPROTECT_SECTOR      0x39 // Write disable

// Status register commands

#define SPI_FLASH_INS_READ_STATUS_REGISTER      0x05 // Read status register                                   
#define SPI_FLASH_INS_WRITE_STATUS_REGISTER      0x01 // Write status register

// Miscellanous Commands
#define SPI_FLASH_INS_READ_DEVICE_ID      0x9F // Read  identification
#define SPI_FLASH_INS_DEEP_POWER_DOWN 0xB9 // Deep power-down                                 
#define SPI_FLASH_INS_RESUME_FROM_DEEP_POWER_DOWN       0xAB // Release from deep power- down
//*************** Instruction Set ***************//

while (1)
{     
     PORTE.2=0;
         if(getchar()==0x31)
         {
         CHIP_SELECT_AT25 // _S Low
         PORTE.2=1;
         spi(SPI_FLASH_INS_PAGE_PROGRAM);
         spi(0x00);
         spi(0xFF); 
         spi(0x00);  // adress 000005
         spi(0x68);  // данные
         delay_ms(1);
         putchar('w');
         delay_ms(100);
         CHIP_UNSELECT_AT25 // _S High 
         PORTE.2=0;
         }
         
                 
          if(getchar()==0x32)
         {
         CHIP_SELECT_AT25 // _S Low
         PORTE.2=1;
         //spi(SPI_FLASH_INS_READ_STATUS_REGISTER); 
         spi(SPI_FLASH_INS_READ );
         spi(0x00);
         spi(0xFF); 
         spi(0x00);// adress 000005
         receivedchar[0]=spi(0xFF); // считываем  значение в переменную
         delay_ms(1);
         putchar('r');
         delay_ms(1);
         putchar(receivedchar[0]);
         delay_ms(1);
         CHIP_UNSELECT_AT25 // _S High 
         PORTE.2=0;
         }
     }
}


вот запись и вывод значения по 485 порту но постоянно вижу FF. Подскажите как правильно считать данные с флешки данного типа?

И статус регистор тоже не читает, FF постоянно
Код: Выделить всёРазвернуть
if(getchar()==0x32)
         {
         CHIP_SELECT_AT25 // _S Low
         PORTE.2=1;
         spi(SPI_FLASH_INS_READ_STATUS_REGISTER); 
         /*spi(SPI_FLASH_INS_READ );
         spi(0x00);
         spi(0xFF); 
         spi(0x00);// adress 000005
         */
         //receivedchar[0]=spi(0xFF); // считываем  значение в переменную   
         receivedchar[0]=spi(0x00); // считываем  значение в переменную
         delay_ms(1);
         putchar('r');
         delay_ms(1);
         putchar(receivedchar[0]);
         delay_ms(1);
         CHIP_UNSELECT_AT25 // _S High 
         PORTE.2=0;
         }
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 08 июл 2013, 03:17

Подскажите на какой минимальной частоте работает данная флешка ?
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение avr123.nm.ru » 08 июл 2013, 18:44

Наверно даже в статике будет работать.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 08 июл 2013, 20:14

Флешка стала отвечать, дело было в опторазвязке, которая стоит между контроллером и флеш. ADUM1401 может, что упустил в ее работе по SPI. Пока пробую без нее, настрою и потом буду искать в чем же проблема.
Код: Выделить всёРазвернуть
   PORTE.2=0;// прием по RS485
         if(getchar()==0x31) // запрос ID
             {
             PORTE.2=1; // вкл передачу RS485       
             CHIP_SELECT_AT25 // _S Low        // разрешение работы AT25
             spi(SPI_FLASH_INS_READ_DEVICE_ID);         // передача оптокода SPI_FLASH_INS_READ_DEVICE_ID ответ FF его не принимаем
             receivedchar[0]=spi(0xFF);           // принимает код предприятия от AT25
             receivedchar[1]=spi(0xFF);           // и соответствующее данные(для ответа подаем FF)
             receivedchar[2]=spi(0xFF);
             delay_ms(1);     
             CHIP_UNSELECT_AT25 // _S High;     // запрет работы AT25
             putchar(receivedchar[0]);          // вывод значение принятых данных в терминал
             delay_ms(1);
             putchar(receivedchar[1]);
             delay_ms(1);
             putchar(receivedchar[2]);
             delay_ms(1);
             putchar('I');
             delay_ms(1000);       
             PORTE.2=0;// прием по RS485
             }
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение RoboHobbyRu » 08 июл 2013, 20:31

ХМ, а зачем между контроллером и флэшкой гальваноразвязка?
RoboHobbyRu
 
Сообщения: 203
Зарегистрирован: 04 май 2013, 10:35
Откуда: Тюмень

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 09 июл 2013, 01:03

Схема такая ,что требуется развязка и в принципе она должна работы.
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 09 июл 2013, 12:51

Что то я немного не понимаю, микросхема AT25DF041A-SSH-B работает от 5V , а от 3.3V не работает хотя по даташит от 2.3 до 3.6 ? Очень интересно,пробовал разные микросхемы. Обе работают от 5 V.
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение Duhas » 09 июл 2013, 17:39

а вы у нее на ногах измеряете ? и 0 и 3.3 прям с ее ног берете ?
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Re: SPI флеш AT25DF041 и AVR

Сообщение RoboHobbyRu » 09 июл 2013, 18:10

>>микросхема AT25DF041A-SSH-B работает от 5V , а от 3.3V
скорее всего память-то работает, только контроллер её не понимает (работающий от 5 В).
Приведите свою схему.
RoboHobbyRu
 
Сообщения: 203
Зарегистрирован: 04 май 2013, 10:35
Откуда: Тюмень

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 09 июл 2013, 19:49

Сначала стояло так. Контролер Mega (5V) потом развязка Adum1401 с одной стороны ее 5v, со стороны флешки все питания 3.6 V. Не работает импульсы от нее исходили непонятные.Потом напрямую без развязки питания +5V, отвечает(по даташит не слова про 5v?). Далее решил попробовать +3.3 на питания выводы все управления остались на 5V не работает. Конечно правильнее и управление сделать на 3.6V , но так к сожалению не пробовал. Хотя как я думаю эти уровни для меги не должны быть креичными.

а вы у нее на ногах измеряете ? и 0 и 3.3 прям с ее ног берете ?


мерил все на ее ножках.

Добавлено спустя 7 минут 45 секунд:
Может кто то выложит рабочий код записи и чтения. Не получается нечего записать. Как будто защита стоит. Хотя по статус регистру sowtware protection status все секторы защищены и как выключить не понятно. Бит SPRL тоже не пишется. Вроде все не так сложно, по описанию, но запихнуть в нее не как не могу.
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 15 июл 2013, 15:37

Работает и на 3 и на 5 вольтах. Все данные надо отправлять и передавать через запрос регистра статуса.

На приеме на контролер стоят две оптики, и у каждой выход заведен на контролер на вход MISO и вот они негодуют друг с другом, так они оба выхода. Вот думаю как решить этот вопрос. Через оптику по SPI идут ответы с разных устройств на один и тот же выход контролера .
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение elmot » 15 июл 2013, 16:02

Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 15 июл 2013, 17:53

У меня выходы с оптики сидят вместе и идут на одну ногу микроконтроллера. И при такой схеме они уменьшают напряжение сигнала. Может конечно резисторы маловаты. Но по моему проблема в другом. Соответственно если поставить один резистор 500 ом то одна часть работает. А нужно чтобы обе работали и принимали от разных устройств в определенный момент времени.
Можно конечно добавить еще элементов в схему, но хотелось бы простого решения.
Вложения
1.JPG
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

Re: SPI флеш AT25DF041 и AVR

Сообщение avr123.nm.ru » 15 июл 2013, 18:02

либо открытые коллекторы использовать или открытые стоки 2N7002 или логику 2ИЛИ если в неактивном устройстве "0" на выходе. Если там "1" то используйте логику 2И, есть и логика с открытым стоком. Либо буферы управл тем же сигналом выбора микрухи CS.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: SPI флеш AT25DF041 и AVR

Сообщение grek » 15 июл 2013, 18:21

либо открытые коллекторы использовать или открытые стоки 2N7002 или логику 2ИЛИ если в неактивном устройстве "0" на выходе. Если там "1" то используйте логику 2И, есть и логика с открытым стоком. Либо буферы управл тем же сигналом выбора микрухи CS.


Это все понятно. Я просто не думал, что выход будет сажать другой выход. Честно говоря так и не понимаю почему.Может еще попробовать выходом управления оптики поиграться, на одной из оптик всегда на управляющем сигнале висит 1(на VCC всегда разрешена работа). Такое ощущения, что один из входов вешиется на 0 и получается делитель и соответственно не хватает уровня сигнала для микроконтроллера.

У меня сейчас нет возможности подключить реальное второе устройство slave к выводу SPI, пока висит только память.
grek
 
Сообщения: 159
Зарегистрирован: 16 сен 2009, 15:41
Откуда: Арзамас

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23