|
|
  |
AVR + DataFlash |
|
|
|
Jan 10 2006, 16:30
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Добрый день уважаемые специалисты Кто нибудь пробывал подключать к AVR DataFlash Необходимо сделать примерно то что описано в avr335 толька с управлением по I2C Перекомпилил все под Мегу 8 (поменял ножки) Собрал схему на макетнице DataFlash AT45DB081B питаю 3.3 вольтами Атмегу 8 - Пятью В датащите на AT45DB081B сказано что с 5 вольтовыми сигналами нет проблемм Тем немение DataFlash ничего не отвечает несмотря на то что осцилографом видно как Атмега посылает данные. Сигнала BUSY тоже нету. На выходе ДатаФлеща - 0. Может спалил Незнаю Подскажите пожалуста если кто имеет какието мысли по этому поводу
|
|
|
|
|
Jan 10 2006, 16:54
|

Иногдящий
   
Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931

|
Работал с DataFlash + ATmega64, пользуясь аппаратным SPI. Питание контроллера - 5В, флэшки - 3,3В. Никаких проблем не возникло. Проверьте: 1. Сконфигурированы ли у Вас соответствующие порты контроллера (MISO на вход, MOSI, ~SS и SCK на выход) 2. Включен ли SPI 3. Правильно ли выставлен режим SPI (должен быть 0 или 3) 4. Перед началом каждой команды, посылаемой в DataFlash, необходимо деактивировать и вновь активировать ChipEnable. Текущая команда выполняется флэшкой именно до деактивации chipenable, а не просто до получения новой команды (я на этом поначалу обжегся).
Кстати, сигнал BUSY, как и соответствующий флаг в регистре статуса, выставляется только на время выполнения нескольких команд (запись буфера в память, чтение памяти в буфер, сравнение памяти и буфера) и не означает, что флэшку вообще нельзя беспокоить. Скажем, получать у нее статус можно в любое время. Читать и писать буфер - тоже. Об этом довольно подробно написано в даташите на флэшку и в аппликейшне AN-4 Using Atmel's DataFlash.
|
|
|
|
|
Jan 10 2006, 17:40
|
Участник

Группа: Свой
Сообщений: 74
Регистрация: 24-10-05
Пользователь №: 10 056

|
Работал с AT45DB021B, аппаратный SPI, но только всё 3.3В. Ни наких проблем, всё работает.
|
|
|
|
|
Jan 10 2006, 17:53
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(AndyBig @ Jan 10 2006, 19:54)  Работал с DataFlash + ATmega64, пользуясь аппаратным SPI. Питание контроллера - 5В, флэшки - 3,3В. Никаких проблем не возникло. Проверьте: 1. Сконфигурированы ли у Вас соответствующие порты контроллера (MISO на вход, MOSI, ~SS и SCK на выход) 2. Включен ли SPI 3. Правильно ли выставлен режим SPI (должен быть 0 или 3) 4. Перед началом каждой команды, посылаемой в DataFlash, необходимо деактивировать и вновь активировать ChipEnable. Текущая команда выполняется флэшкой именно до деактивации chipenable, а не просто до получения новой команды (я на этом поначалу обжегся).
Кстати, сигнал BUSY, как и соответствующий флаг в регистре статуса, выставляется только на время выполнения нескольких команд (запись буфера в память, чтение памяти в буфер, сравнение памяти и буфера) и не означает, что флэшку вообще нельзя беспокоить. Скажем, получать у нее статус можно в любое время. Читать и писать буфер - тоже. Об этом довольно подробно написано в даташите на флэшку и в аппликейшне AN-4 Using Atmel's DataFlash. 1. Порты сконфигурированы как нада. 2. СПиАй включен Обмен по нему видел осцилграфом Но память ничего не отвечала 3. Насчет режима - содрал с АВР335 точно не проверял - надеюсь ошибка не там - проверю. 4. Насчет ChipEnable такого не видел осцилографом и в коде похоже нету. Надеюсь что проблемма в этом Завтра приду на работу - все проверю. Вопрос: на какой интервал времени достаточно запретить а потом разрешить Флешку ?? Ещораз спасибо Хотел сделать акцент Использовал ли кто либо при работе AVR335: Digital Sound Recorder with AVR and DataFlash или все сами писали процедуры обмена с ДатаФлешкой ??? Я слышал что а Апноутах часто бывают ошибки Хотя скорее вего ошибаюсь я Спасибо
|
|
|
|
|
Jan 10 2006, 21:16
|

Иногдящий
   
Группа: Свой
Сообщений: 691
Регистрация: 28-02-05
Пользователь №: 2 931

|
Цитата и в коде похоже нету Ну как же... Я сам там видел  . Я тоже ковырял этот аппноут и именно там заметил деактивацию чипселекта. Например: Код void write_to_flash(unsigned char flash_data) { static unsigned int buffer_counter; static unsigned int page_counter; unsigned char temp = 0x80; if((ACSR & 0x02)) // if flag is set that new data has to be written { buffer_counter = 0; page_counter = 0; // reset the counter if new data has to be written ACSR &= 0xFD; // clear the signal flag }
while(!(PINB & 0x02)); // check if flash is busy
PORTB &= ~DF_CHIP_SELECT; // enable DataFlash SPDR = BUFFER_1_WRITE; while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = 0x00; // don't cares while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)(buffer_counter>>8); // don't cares plus first two bits of buffer address while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)buffer_counter; // buffer address (max. 2^8 = 256 pages) while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = flash_data; // write data into SPI Data Register while (!(SPSR & temp)); // wait for data transfer to be completed PORTB |= DF_CHIP_SELECT; // disable DataFlash buffer_counter++; if (buffer_counter > 528) // if buffer full write buffer into memory page { buffer_counter = 0; if (page_counter < 4096) // if memory is not full { PORTB &= ~DF_CHIP_SELECT; // enable DataFlash SPDR = B1_TO_MM_PAGE_PROG_WITHOUT_ERASE; // write data from buffer1 to page while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)(page_counter>>6); while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = (char)(page_counter<<2); while (!(SPSR & temp)); // wait for data transfer to be completed SPDR = 0x00; // don't cares while (!(SPSR & temp)); // wait for data transfer to be completed PORTB |= DF_CHIP_SELECT; // disable DataFlash page_counter++; } else { PORTB |= 0x08; // turn LED off while (!(PIND & 2)); // wait until button for recording (button 1) is released } } } Цитата Вопрос: на какой интервал времени достаточно запретить а потом разрешить Флешку ?? Учитывая, что флэшка работает на частоте до 20 МГц, никаких пауз между деактивацией и активацией делать не надо. Лишь бы компилятор не "оптимизировал" код, который в результате оставляет содержимое регистра в прежнем виде  ). На всякий случай прилагаю код, который у меня на атмеге64 работает прекрасно. Просьба ногами не бить, изяществом код не блещет  ))).
|
|
|
|
|
Jan 11 2006, 22:16
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(AndyBig @ Jan 11 2006, 22:38)  1. Проблем не будет, ничего не нужно. 2. А зачем через диоды? Чем не устраивает стабилизатор? Да здоровый очень А Маленькую версию в Одессе заказывать нада и ждать долго =( Да и по деньгам нада быть оптимальным .... Хотя думаю обойдусь стабилизатором в ТО220 =)
|
|
|
|
|
Jan 12 2006, 08:27
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(DeXteR @ Jan 11 2006, 21:18)  1. Дело в том что Атмега питаеться от 5 В а датафлеш от 3.3 Небудит ли проблемм с уровнем в канале данных от датафлешки к Атмеги Нужен ли там приобразователь уровня ?? Если да - какой посоветуете. Преобразователь уровня желателен именно в случае применения AVR, т. к. у последнего CMOS уровни, в отличие от многих 51-х, у которых TTL уровни. Цитата(DeXteR @ Jan 11 2006, 21:18)  2. Счас Датафлешка питаеться от LM317 Гдето видел схему подачи питания через 3-4 кремниевых диода. Насколько это приемлимо ??? Приемлемо, применял. Присоединённые файлы разные по содержимому, а не просто перевод!
|
|
|
|
|
Jan 12 2006, 09:48
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(DeXteR @ Jan 12 2006, 00:16)  Цитата(AndyBig @ Jan 11 2006, 22:38)  1. Проблем не будет, ничего не нужно. 2. А зачем через диоды? Чем не устраивает стабилизатор?
Да здоровый очень А Маленькую версию в Одессе заказывать нада и ждать долго =( Да и по деньгам нада быть оптимальным .... Хотя думаю обойдусь стабилизатором в ТО220 =) маленькие 3х вольтовые стабилизаторы TPS76333 - MSOP.. IRU1010-33 - SOT223.. 78L03 - как KT3102 ;> в крайнем случае питайте DataFlash от стабилитрона, SMD стабилитроны тянут 20-30MA должно хватить для флешки. а можно и дешевым опером запитать, LM358/LM158 - включить по схеме Voltage Follower итого 2 резюка и опер ~70коп ;> когда была напряженка со стабилизаторами ARM от опера питал, у LM358 как раз два опера в одном корпусе - 2х уровневое напряжения выдавал...
|
|
|
|
|
Jan 15 2006, 19:49
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Добрый день уважаемые специалисты Во вложении - схема согласования 3.3 вольтовой ДатаФлеш и Атмеги с питанием 5 вольт Каковы будут ваши мнения ?? Будет ли нормально работать ?? Будут ли проблеммы ??
Спасибо !
|
|
|
|
|
Jan 24 2006, 04:30
|
Группа: Новичок
Сообщений: 14
Регистрация: 3-01-06
Пользователь №: 12 807

|
У меня тоже АТ45 глючит,при записи страницы первые 4 байта меняются,а при чтении первые 2 байта . И ещё проблема, после выключения питания память обнуляется. Может кто сталкивался или знает ответ ?
|
|
|
|
|
Jan 24 2006, 08:49
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(Andrey_31 @ Jan 24 2006, 08:30)  У меня тоже АТ45 глючит,при записи страницы первые 4 байта меняются,а при чтении первые 2 байта . И ещё проблема, после выключения питания память обнуляется. Может кто сталкивался или знает ответ ? Может ты забываеш запустить команду для записи буфера на страницу и работаеш с буфером. Посотри апликухи от атмела . А из них все выдрал и все работает =)
|
|
|
|
|
Jan 27 2006, 08:34
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(zheka @ Jan 27 2006, 11:31)  Dexter - заработала схема согласования? Простите пока немекетировал .... Делаю срочно другой проэкт. Шеф говорит - заработает - Он человек умный =)
|
|
|
|
|
Jan 28 2006, 17:50
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(makc @ Jan 28 2006, 21:42)  У меня тоже с 5-вольтовыми ИС AT45DB041B нормально работает. И это правильно, т.к. в datasheet'e четко на первой странице написано: "5.0V-tolerant Inputs: SI, SCK, CS, RESET, and WP Pins". Но выход данных то с АТ45 3.3 вольтовый А Атмега8 5 вольтовая КПОП Значит если чтото гульнет по питанию и логическая единичка с АТ45 равная например 2,7 вольта (гульнуло :-) ) примица авркой с питанием 5.8 (тоже гульнуло) то АВРка прочитает ноль и все поидет насмарку =) Это в теории =)
|
|
|
|
|
Jan 28 2006, 19:43
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(DeXteR @ Jan 28 2006, 20:50)  Но выход данных то с АТ45 3.3 вольтовый Это так. Цитата А Атмега8 5 вольтовая КПОП Значит если чтото гульнет по питанию и логическая единичка с АТ45 равная например 2,7 вольта (гульнуло :-) ) примица авркой с питанием 5.8 (тоже гульнуло) то АВРка прочитает ноль и все поидет насмарку =) Это значит, что питание должно гульнуть в разную сторону. Т.е. на AT45 оно должно уменьшиться, а на Меге увеличиться. Мне, например, сложно себе представить, как такое может случиться, особенно если питание AT45 получается чем-нибудь вроде LDO из 5 вольт Меги, которые тоже должны быть стабилизированными (в теории  ). Так что наиболее вероятна просадка именно по 5 вольтам. В этом случае LDO для AT45 будет продолжать выдавать свои 3.3 вольта, а вот Меге будет несколько сложнее. Но все-равно 1 с AT45 в этом случае будет воспринята правильно. Цитата Это в теории =) Теории бывают разные.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
Jan 28 2006, 20:02
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата Теории бывают разные.  А там по теме выше пару файликов мине умный человек прикрепил Там это все проанализировано =) .... Гон конечно но диод с резистором я всеже впаяю .... ... но потом =)
|
|
|
|
|
Jan 28 2006, 20:10
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(zheka @ Jan 28 2006, 23:03)  В общем план у меня такой: 1. Денежку никому не платить 2. Попробовать всю схему запитать от 3,3 вольт. Звук у меня 8 битный, 8 килогерцовый, выход по питанию не критичный.
Вы мен только скажите, если я на Меге8 спаяю девайс, на какой частоте она сможет работать, если при заявленых 5 волтах она работает на 16 МГц ? При 5В. Легко =) При 3.3 Непробывал - думаю будет.
|
|
|
|
|
Jan 29 2006, 07:08
|
Гуру
     
Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164

|
Вопрос: Цитата Вы мен только скажите, если я на Меге8 спаяю девайс, на какой частоте она сможет работать, если при заявленых 5 волтах она работает на 16 МГц ? Ответ: Цитата При 5В. Легко =) При 3.3 Непробывал - думаю будет Что-то несвязанно как-то... Поясните свою мысль.
|
|
|
|
|
Jan 30 2006, 13:55
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 2-08-05
Из: Одесса
Пользователь №: 7 287

|
Цитата(zheka @ Jan 30 2006, 15:28)  Так все-таки, я прав насчет питания Mega8L и DataFlash от 3 вольт без согласования? Прав 8мгц + Атмега 8L + Датафлешка - 3.3 вольта 16 Мгц + Атмега 8 + Датафлешка + согласование - 5 вольт. Мне больше подходит второй вариант Потомучто для моих целей нехватает 8Мгц
|
|
|
|
|
Apr 10 2008, 13:46
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-04-08
Пользователь №: 36 402

|
Цитата(Rst7 @ Jan 12 2006, 09:22)  А почему так нельзя??? Как надо, подскажите плиз  Потому что переход CS 0->1 есть признак окончания комманды и старт ее выполнения. А переход 1->0 соответственно начало комманды. привет! может тема и давнишняя, только грабли всё новые. хотел тоже читать всё подряд и памяти, ан нет, не читается, на ногу CS повесил нолик, согласно (AN-4)"The CS pin must remain low during the loading of the opcode, the address bits, the don’t care bits, and the reading of data." и"A low-to-high transition on the CS pin will terminate the read operation and tri-state the SO pin". и вот теперь сижу и думаю, что ж его делать? если решил отправить команду 68Н, то судя по цитате вверху надо ногу CS подкинуть в "1",, а судя по ан-4, это прекратит выполнение этой команды. Дилемма, однако... Что же таки делать?
|
|
|
|
|
Apr 11 2008, 14:09
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-04-08
Пользователь №: 36 402

|
не бейте по голове, лучше ткните носом, я ж привел цитату из ан4 и с форума, что не дочитал в даташите? если не сложно помогите...
|
|
|
|
|
Apr 11 2008, 14:25
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(valera_o @ Apr 11 2008, 20:09)  не бейте по голове, лучше ткните носом, я ж привел цитату из ан4 и с форума, что не дочитал в даташите? если не сложно помогите... DataFlash имеет интерфейс SPI. SPI это синхронный интерфейс. У него нет начала и конца, как у асинхронных интерфейсов. Пока идут тактовые импульсы идет обмен по SPI. Чтобы выделить начало и/или конец фрейма (кадра/посылки) используется дополнительный сигнал фреймовой синхронизации. У DataFlash этим сигналом является CS. Кроме того, CS дополнительно (традиционная его функция) используется для управления разрешением функционирования самого интерфейса SPI (входов и выходов). Т.е. у сигнала CS здесь две функции: управление интерфейсом и управление фреймовой синхронизацией. Активизация CS (переход 1->0) служит для выделения начала фрейма. Фрейм обязательно начинается с команды, затем идет дополнительная информация, необходимая для выполнения команды, и только затем передаются/принимаются данные. Деактивация CS (переход 0->1) сигнализирует об окончания фреймовой транзакции и отключает функционирование интерфейса SPI. Вот в общем-то и все.
|
|
|
|
|
Apr 11 2008, 21:53
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(valera_o @ Apr 11 2008, 16:09)  что не дочитал в даташите? в даташитах на AT45 есть секции Read Operations и Write Operations. В самом начале этих секций есть диаграммы сигналов где показано, что команда начинается подачей "0" на CS, и завершается возвращением CS в "1". относительно этой цитаты: Цитата Потому что переход CS 0->1 есть признак окончания комманды и старт ее выполнения. полагаю автор цитаты имел в виду старт записи непосредственно во флеш (операция записи из буфера во флеш - длительная). К командам чтения статусов и данных из DF, эта цитата не имеет и не может иметь никакого отношения.
|
|
|
|
|
Apr 14 2008, 05:51
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-04-08
Пользователь №: 36 402

|
Благодарю всем, за подсказки и советы. Все заработало. Всем удачи!
|
|
|
|
|
May 14 2009, 08:47
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 2-04-08
Пользователь №: 36 402

|
Возник еще вопрос. Кусок проги вставлю позже. В общем смысл таков. Читаю из одной области памяти прямым чтением, потом перехожу на другую область памяти. получается что контроллер "дочитывает" кусок из первой области, а только потом начинает чтения второй с "0". Однозначно что-то с кодом, но проверять своё неблагодарное дело... никак не найду ошибку. помогите, пожалуйста!
Сообщение отредактировал valera_o - May 14 2009, 08:49
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|