Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATMega->SPI->AT45DB
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
prottoss
Привет всем!

Сильно меня проблема эта не волнует, но все же пытливый ум smile.gif не дает покоя.

Проблема такова. Цепляю DataFlash AT45DB к Меге. Сначала прицепил ATmega16. Начались сбои при программировании. Програматор - LPT STK200, ПО - PonyProg2000. После нажатия два-три раза на кнопку Programm прошивка заливается. Все нормально. Думал, что DataFlash AT45DB нагружает линии MISO-MOSI. Счас новый проект на ATmega128 - то же самое - но данный МК программируется по другим линям, кроме SCK и RESET - симптомы точно такие же. Пробовал другими программаторами - такая же картина. Схема с М128 вот такая:
GDI
Были похожие проблемы в проекте с мега16 и ат45, схемы подключения была очень похожа, если не идентична, приведенной, и программатор был тоже STK200 на HC244, может проблема в самом программаторе? Может помехи какие? Программатор у меня дох по линии MISO причем хитро это проявлялось, линия просаживалась до первой операции прошивки программатором и проявлялось в том что не работали операции записи-чтения в ат45 пока к схеме был подключен программатор и до того момента пока я не перешивел мегу - после этого все работало нормально... Еще мое устройство при отладке питалось от импульсного источника питания и мне припоминается, что у моего соседа тоже были проблемы с прошивкой пока работал этот источник...т.е. на лицо влияние помех.
P.S. А куда же делся крутейший программатор AVR910-USB? smile.gif
P.P.S Тогда я этот вопрос не решил, просто тихо матерился и перешивал по 3 раза smile.gif Но при производстве прошивку производили программатором AVR910-COM с довольно коротким шлейфом и проблем, насколько я помню не было...
oll
Попробуйте "прицепить" электролит 33мкФ на питание AT45
_Алекс
У меня работает и программатор и флеш, схему включения приводил здесь, между собой не конфликтуют, ветка «Небольшая скорость чтения Flash AT45DB».
_Sam_
У меня такая память в двух проектах используется с mega48 и mega128. Программирую ByteBlaster + avreal. Проблем нет. Схема вроде такая же. Можно попробовать 100pF на sck повесить.
prottoss
Цитата(GDI @ Aug 13 2007, 22:03) *
P.S. А куда же делся крутейший программатор AVR910-USB? smile.gif
Вы не внимательно читаете посты. Было написано - "...Пробовал другими программаторами - такая же картина..."

Цитата(oll @ Aug 14 2007, 00:13) *
Попробуйте "прицепить" электролит 33мкФ на питание AT45
А смысл? И почему именно 33мкФ а не, допустим 47 или 20???

Цитата(_Sam_ @ Aug 14 2007, 01:49) *
У меня такая память в двух проектах используется с mega48 и mega128. Программирую ByteBlaster + avreal. Проблем нет. Схема вроде такая же. Можно попробовать 100pF на sck повесить.
не хотелось бы навешивать всякие не стабильные элементы на SCK.



По идее должно все и так программироваться нормально... Память, кстати, AT45DB081RI, используется в обоих случаях. Я все же склоняюсь к мысли, что виноват не SCK, а RESET. Заливаю прошивку в МК я не слишком часто, по этому сигналы не анализировал...
INT1
2 prottoss, а где же Ваша мега на схеме?, попробуйте поставить подтягивающие резисторы на SPI, что то похожее было, точно не помню, для какой то ATxxxLV
prottoss
Цитата(INT1 @ Aug 14 2007, 15:49) *
2 prottoss, а где же Ваша мега на схеме?, попробуйте поставить подтягивающие резисторы на SPI, что то похожее было, точно не помню, для какой то ATxxxLV
А зачем ее показывать? Сигналы проставлены... В первом случае МК - ATmega16-16PI, во втором - ATmega128-16AU
GDI
В моем том проекте тоже стояла AT45DB081RI
Сергей Борщ
Цитата(prottoss @ Aug 14 2007, 10:58) *
А зачем ее показывать? Сигналы проставлены...
Правильно ли я понял, что у вас на вход reset процессора подается сигнал RESET_M, т.е. в случае программирования сигнал reset программатора, "обработанный" ADM1232? Если да, то наверное правильнее будет поставить резистор 1-10К между RESET_M и 6 ножкой ADM + R18, а RESET с разъема ISP завести на RESET_M.
rx3apf
Цитата(prottoss @ Aug 14 2007, 11:08) *
Вы не внимательно читаете посты. Было написано - "...Пробовал другими программаторами - такая же картина..."

А смысл? И почему именно 33мкФ а не, допустим 47 или 20???

не хотелось бы навешивать всякие не стабильные элементы на SCK.

К слову о элементах - если подключаемся к LPT на длинном кабеле - лучше обеспечить согласование, и именно по SCK (до буфера). И не просто конденсатором, а RC-цепочкой (100 Ohm+100 pF). Имел удовольствие бороться с плавающими и совершенно дикими глюками при записи и чтении через byteblaster на метровом ленточном удлинителе. Пока скопом не глянул...
prottoss
Цитата(Сергей Борщ @ Aug 15 2007, 16:19) *
Правильно ли я понял, что у вас на вход reset процессора подается сигнал RESET_M, т.е. в случае программирования сигнал reset программатора, "обработанный" ADM1232? Если да, то наверное правильнее будет поставить резистор 1-10К между RESET_M и 6 ножкой ADM + R18, а RESET с разъема ISP завести на RESET_M.
Да - RESET_M (RESET, активный нулем) заведен на вывод RESET МК. Можно сделать и так, как Вы предлагаете, ибо вывод RST# ADM1232 - типа ОК (открытый коллектор). Но тогда на время программирования на линии RESET_P будут импульсы от WDT ADM1232, что не приятно мнеsmile.gif К тому же я не вижу принципиальных отличий, ибо схема работает без DatаFlash отлично, и мне не понятно, от чего она не хочет работать нормально с DataFlash. К слову, до осциллографа руки пока так и не доходят smile.gif - дела, черт бы их побрал biggrin.gif
Сергей Борщ
Цитата(prottoss @ Aug 15 2007, 14:48) *
Но тогда на время программирования на линии RESET_P будут импульсы от WDT ADM1232, что не приятно мнеsmile.gif
Да, засада. Но так они и сейчас там должны быть, ибо при программировании программатор лишь кратковременно "прижимает" Reset. А поскольку программатор обычно имеет пуш-пульный выход на reset, при его подключении в предложенном мной варианте (на RESET_M) срабатывание собаки в ADM будут отсекаться.
Цитата(prottoss @ Aug 15 2007, 14:48) *
К тому же я не вижу принципиальных отличий, ибо схема работает без DatаFlash отлично, и мне не понятно, от чего она не хочет работать нормально с DataFlash.
Действительно чуднО. В приложенной схеме программируется и с DataFlash и без. В ней Reset формируется подтягивающим резистором к +3.3В
prottoss
Цитата(Сергей Борщ @ Aug 15 2007, 21:37) *
Да, засада. Но так они и сейчас там должны быть, ибо при программировании программатор лишь кратковременно "прижимает" Reset. А поскольку программатор обычно имеет пуш-пульный выход на reset, при его подключении в предложенном мной варианте (на RESET_M) срабатывание собаки в ADM будут отсекаться.
Неа. Если я сажаю линию RESET от программатора как у меня в схеме (линия MSTR_RESET) - WDT ADM1213 прибивается и он активирует линии сброса RESET_M и RESET_P. Если делать, как предложили Вы выше, то линия RESET_M прибъется к нулю сигналом RESET программатора. При чем не кратковременно, а на весь период программирования/чтения программатором памяти МК. Но так как WDT ADM1213 будет работать - его то мы не тормознули! - то по линии RESET_P будут генерится импульсы сброса...



Еще выяснился один интересный ньюанс - если в прошивке заливаемой МК убрать блок активирования SPI-модуля и работы с DataFlash - сбои при программировании прекращаются! Более того - цепляю туда же AT25256 - МК работает и программируется без проблем 07.gif . Очучение, что DataFlash гонит... В первом и во втором случае использовались буквально одни и те же микросхемы. Менялись четыре штуки из одной и той же партии.
Сергей Борщ
Цитата(prottoss @ Aug 15 2007, 17:00) *
Неа.
Точно, ступил. Программатор зажимает reset на все время программирования.
Цитата(prottoss @ Aug 15 2007, 17:00) *
Еще выяснился один интересный ньюанс - если в прошивке заливаемой МК убрать блок активирования SPI-модуля и работы с DataFlash - сбои при программировании прекращаются!
Чудесатые чудеса. Даже если предположить, что после включения питания проц успевает начать обмен с флешкой, то сброс от программатора должен а) сбросить саму флешку аппаратно и б) перевести ногу, управляющующую CS флешки в третье состояние и за счет резистора подтяжки вторично деактивировать флешку. А если выпаять микросхему флешки или обрезать DB_CS?
_Sam_
Цитата
Еще выяснился один интересный ньюанс - если в прошивке заливаемой МК убрать блок активирования SPI-модуля и работы с DataFlash - сбои при программировании прекращаются!

Может сбои прекращаются, потому что уменьшается программа?

Цитата
цепляю туда же AT25256

Может у неё ёмкости входов другие? Потребление наверное другое. Да и резета у неё вроде нет. Можно кстати порпобовать резет at45 на VCC бросить.

А сколько ошибок при неудачной прошивке и в каком месте в начале, в конце или ещё как?
prottoss
Цитата(_Sam_ @ Aug 16 2007, 14:45) *
Может сбои прекращаются, потому что уменьшается программа?
Не вижу связи


Цитата(_Sam_ @ Aug 16 2007, 14:45) *
Может у неё ёмкости входов другие? Потребление наверное другое. Да и резета у неё вроде нет. Можно кстати порпобовать резет at45 на VCC бросить.
Если в чипе предусмотрен RESET я бы хотел его использовать. smile.gif


Цитата(_Sam_ @ Aug 16 2007, 14:45) *
А сколько ошибок при неудачной прошивке и в каком месте в начале, в конце или ещё как?
Две-три ошибки при входе в режим программирования. Затем все заливается как по маслу.



Таки некогда пока добраться до платы и посмотреть осциллом, что там творится. Как только доберусь - обязательно отпишусь.



Цитата(Сергей Борщ @ Aug 16 2007, 00:42) *
А если выпаять микросхему флешки или обрезать DB_CS?
В том то и дело, что без Флэш все пучком, и даже если прицепить вместо Флэш ЕЕПром, все работает...
Roger
У меня возникла проблема со связью Atmega8L и at45db161D-SU
Проблема заключается в том что не могу прочитать не один регистр с at45
В аттаче лежит тестовый исходник который читает с AT45 и передает по UART.
C UART приходит постоянно строка SR=00
Для убеждения что все с SPI пробывал соединить MISO=MOSI и передавать a++ то все нормально передается
Пробывал на разных скоростях читать и разные режимы толку нету sad.gif

Питание схемы от LL1187-3.3V
Выводы CS WP Res повесил PD7 PD6 PD5 соответсвенно. т.к. выводы порта PB заняты для шим.

В чем может быть проблема
Горит курсач
Roger
Всем спасиб, проблема была в прорайке...
Александр Куличок
Только предположение.
Раздел даташита меги128, SPI Serial Programming Algorithm, вход в режим программирования.
[quote]
1. Power-up sequence:
Apply power between VCC and GND while RESET and SCK are set to ”0”. In some systems, the programmer can not guarantee that SCK is held low during power-up. In this case, RESET must be given a positive pulse of at least two CPU clock cycles duration after SCK has been set to ”0”.
[quote]
Так как в даташите не нашел отдельного описания последовательности входа в последоветельный режим программирования, то смею предположить, что для этого ресет и SCK садятся на ноль, потом на ресет подается импульс длиной более чем в 2 такта CPU. (Уточнить можно ) Супервизор "съедает" часть этого импульса (его ResetActiveTime = 250..1000ms) и вполне возможно, что он не доходит до меги. Также его может "съедать" и watchdog.
Хотя это никак не связано с наличием/отсутствием АТ45.

P.S.
Пересмотрел исходники AVR910. Оказывается, последовательность немного другая. (хотя я выражение из даташита "positive pulse" понимаю как переход 0->1->0) Сначала программатор садит SCK на "0". Потом ждет (~50 мс) дальше ресет на 0 и после паузы ~50 мс выдает на mosi "Programming Enable". То есть фаза входа в режим программирования начинается немного раньше подачи ресета.
Ресет в момент выдачи программатором "0" НЕ активен, поэтому программатор и контроллер работают "навстечу". Из-за этого уровень на этой ноге при фронте на ресете может отличаться от "0". Отсюда и ошибка входа в режим программирования.
Так что попробуйте sck подключить к ат45 через резистор
Андрей67
Извиняюсь, что со своим вопросом в чужую тему. Но маленький вопрос.
Использовал в устройстве память AT45DB011B-SU, а сейчас есть возможность купить только AT45DB011D-SH-B-ND. Полностью ли они взаимозаменяемые? Есть ли разница в коде при обращении к В и к D?
Спасибо!
rezident
Цитата(Андрей67 @ Feb 11 2011, 00:34) *
Есть ли разница в коде при обращении к В и к D?
Производитель (фирма Atmel) специально для вас написал документ Migrating from the B to the New D DataFlash Family, который давно уже выложен на страничке продукта.
demiurg_spb
Цитата(Андрей67 @ Feb 10 2011, 22:34) *
Извиняюсь, что со своим вопросом в чужую тему. Но маленький вопрос.
Использовал в устройстве память AT45DB011B-SU, а сейчас есть возможность купить только AT45DB011D-SH-B-ND. Полностью ли они взаимозаменяемые? Есть ли разница в коде при обращении к В и к D?
Спасибо!
Должны быть совместимы, я переходил с B на C и на D не помню, чтобы я что-то допиливал в драйвере.
Андрей67
Цитата(rezident @ Feb 10 2011, 23:57) *
Производитель (фирма Atmel) специально для вас написал документ Migrating from the B to the New D DataFlash Family,


Спасибо большое!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.