Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/74: Рейтинг темы: голосов - 74, средняя оценка - 4.93
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
1

Разово программируемые AVR?

29.08.2010, 21:04. Просмотров 13400. Ответов 16
Метки нет (Все метки)

Уважаемые коллеги,

Имею затык с последовательным программатором. Работаю через AVRDUDE, прошиваю Мегу48. И вот в чем проблема: МС прошивается 1 раз и после этого не откликается.
То есть, этот первый раз прошивка идет абсолютно по правилам, я просмотрел весь протокол обмена между компом и программатором, все чики-пики:

1) Сначала программы связываются, обмениваются всякой служебкой.
2) Потом комп инициализует режим программирования - в ходе которого на Мегу посылается последовательность ресета-клока, а потом подается специальная команда инициализации последовательной прошивки программы в виде шестнадцатеричного блока
AC 53 00 00
В ответ Мега должна (и она таки делает это!) выдать 53 на третьем байте. Значит, живет и побеждает.
3) Читается сигнатура, трижды читаются все фьюзы, потом еще читаются 4 самых старших байта в ЕЕПРОМ (это используется иногда для подсчета количества прошивок в этот чип).
4) Стирается вся память.
5) Опять обмен служебкой и еще раз дается инициализация SPI.
6) Постранично пишется вся программа. ЕЕПРОМ я не пишу. Фьюзы - ни-ни! Локи - не сейчас. ТАКА ФЛЭШ.
7) Постранично читается все обратно взад :)
8) Еще раз трижды читаются фьюзы - и всьо!

Это все я полапал побайтно, никаких отклонений от ожидаемого.

А потом та же программа, тот же программатор, тот же чип - даю команду просто для проверки того, что чип отзывается, - а он, подлец, на шаге 2 тупо молчит.
Делаю проверочный цикл (уже без ДУДКИ) - непрерывно повторяю на этих несчастных 4-х линиях (ресет, СЦК, МИСО, МОСИ) ту последовательность, которую на шаге 2 делает программатор. Вижу, что РЕСЕТ дергается вверх, а СЦК вниз, потом РЕСЕТ падает вниз и лежит 50 мс. Потом
начинают стучать СЦК и МОСИ, а в ответ - тишина. В ответ как раз программируемый чип и должен дергать ножкой - если он понимает, что от него хотят работу в режиме параллельного программирования.
Видимо, товарищ не понимает.

Что может ему помешать?
1) Питание подано.
2)Генератор внутренний генерит. Если программатор находится не в режиме программирования (т.е. РЕСЕТ отпустит) - плата стартует аж куда там!
3) Фьюзы не изменялись, я же не зря несколько килобайт трафика просмотрел - нет там записи в эти байты.
4) Локи вообще, вроде как не причем. Стереть по SPI всегда можно, ИМХО. Да и не трогались локи, даже не читались.

Что могло случиться с программируемой Мегой48?
Причем (сознаюсь в оптимистичной тупости), рехтуя программку в программаторе, я это убийство проделал уже с полдюжиной чипов. Вон они, лежат, дохляки. Даже не знаю, можно ли их будет оживить.

И что скажете, знатоки?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2010, 21:04
Ответы с готовыми решениями:

Программируемые каналы на радиомодулях для умного дома
Добрый день! Изучив дешевые китайские модули...

AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC
Люди помогите плз. не могу разобраться. приобрел этот чудный девайс (AVR...

AVR Atmega324PU не прошивается AVR ISP Mk2
Добрый день. На плату впаян данный микроконтроллер в корпусе tqfp. При...

Анализ стека AVR / AVR stack analysis
Привет! Уперся я в стек, и решил понять что почем. Нашел вот такой вот...

AVR Studio 6 и AVR Toolchain вопросы!
Всем доброго времени суток. Решил я написать софтинку в новой студии от...

16
SOWushko
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 273
29.08.2010, 21:14 2
В общем была такая проблема, не у меня правда. AVRDUDE+usbasp прошивал один раз tiny2313.
Сложных путей никто не искал, подключаем клон avrysp2 и он прекрасно справлялся с задачей.
После этого AVRDUDE+usbasp опять таки прошивал один раз....

Чей косяк разбираться не стали, прошивку залили да и ладно.
0
Mittid Mitot
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 2,550
29.08.2010, 21:16 3
А мега48 бывает однократно программируемая? Может это она и есть?
0
Гарнист
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
29.08.2010, 21:18 4
Отнести "сдохшие" чипы туда, где есть HVPP, и посмотреть на фузы и локбиты.
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
29.08.2010, 21:37 5
Цитата Сообщение от Mittid Mitot
А мега48 бывает однократно программируемая? Может это она и есть?
Черный у тебя юмор :)

2 Гарнист: Спасибо! Мож так и сделаю. Не знаю, где такой есть. Кто тут из Киева заглянет, обладатель такого девайса - отзовитесь!

На AVR Frioks народ на тему отозвался вяло. Ну, ваяю я какой-то программатор, ну и флаг в руки! Никому не охота с моими косяками разбираться. Но ведь интересно, что подробно описываю, как хорошо шьется - зачем? А чтобы именно убедить(ся), что косяков вроде как и нет. Там единственное, что может натворить программатор, это при выходе из режима как-то убивать чип. Так уже чуть ли не с лупой брожу по программе - нет там ничего!
Потому и спросил здесь - просто по аналогии, у кого-то что-то было. Часто такое помогает (сам много ремонтирую разных устройств, аналогии помогают очень и очень).
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
29.08.2010, 22:16 6
А если на ЛПТ 5 проводков кинуть, тогда тоже не шьется 2й раз?
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
29.08.2010, 23:07 7
Цитата Сообщение от lyberzon
А если на ЛПТ 5 проводков кинуть, тогда тоже не шьется 2й раз?
Хорошая идея. Спасибо!
На своем десктопе я что-то с LPT уже натворил. Потому, СОБСНО, и взялся за USB программатор, чтобы с ноута шить. Так что доберусь до нормального компа, попробую. Хорошо было бы прочесть состояние всех этих фьюзов, извините за выражение.

Читаю уважаемого SOWushko и понимаю, что вообще-то мало кому интересны нюансы программирования (в смысле, прошивки). Действительно, я тоже с 5 проводками (без буфера, ИСТЕСНА) шил 8252/53 и Меги, разными программами, не без матов иногда, но... результат есть и слава Богу! Дальше уже не важно, почему, скажем, не с первого раза опознается контроллер...

Но, блин, АБИДНА! Что такого может быть в простенькой проге и простеньком интерфейсе??? Есть какая-то закавыка...
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
30.08.2010, 03:09 8
Программа (зашитая) SPI использует?

Если использует -

Нужно дать ресет, опустить SCK, потом быстро передёрнуть ресет - мега войдёт в режим программирования только если в момент ресета SCK будет внизу.

Быстро - чтоб прошиваемый не успел стартовать и не перебил установки SCK.
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
30.08.2010, 07:09 9
Цитата Сообщение от THI BIOST
Программа (зашитая) SPI использует?

Если использует -

Нужно дать ресет, опустить SCK, потом быстро передёрнуть ресет - мега войдёт в режим программирования только если в момент ресета SCK будет внизу.

Быстро - чтоб прошиваемый не успел стартовать и не перебил установки SCK.
Ну, не использует... так в чем вопрос - сделаем, чтобы использовала. Т.е. тестик прошьем. И дергалку с ресетом могу сделать неручную - ведь программа программатора у меня своя, что стоит написать такую примочку?
Единственное, что вкурить не могу, чем это отличается от того, что делается сейчас:
1) Поднимается ресет и одновременно опускается SCK. Ждем 1 мс (пробовал и 50, но по даташиту говорят "минимум 2 такта проца")
2) Опускаю ресет и жду 50 мс (пишут минимум 20 - но это в конкретном М48)
3) Начинаю стучать SCK - х*й ответа!

То, что ты пишешь - разница в чем? В том, что стартовавшая прога заведет проц в режим работы с SPI. Но разве это скажется на поведении после даже 1-мс ресета?

Жаль, что еду на целый день! Уже паравоз дымит :) Попробовал бы прям сейчас. Хотя - ответь на вопросы, если можешь. Спасибо!
0
THI BIOST
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
30.08.2010, 10:24 10
Тут похоже некоторое взаимонепонимание с сигналами. Как делаю я (мой сдвоенный работает нормально, в том числе и с 48 мегой):

Первый ресет и зануление SCK идёт переключением выводов на выход. Ну и цикл есть этого хозяйства, как в команде указано.

Код
    // risit MCU
sbi     KA_DDR(ISP0), bISP0_RST
// set SCK out omd clear
sbi     KA_DDR(ISP0), bISP0_SCK
// set MOSI out
sbi     KA_DDR(ISP0), bISP0_MOSI

// get delay from sommomd
ldd     rDELAY0, Y+oKA_MSG_COMMAND+2
rcall   DelayMs

// init SPI
....

// risit putsi after SCK low
sbi     KA_PORT(ISP0), bISP0_RST

ldi     rDELAY0, 1
rcall   DelayMs

// risit target again
cbi     KA_PORT(ISP0), bISP0_RST

// cmdixiDelay from sommomd
ldd     rDELAY0, Y+oKA_MSG_COMMAND+3
rcall   DelayMs
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
04.09.2010, 22:06 11
Что-то понял, но очень удивлен...

Свои "разово программируемые" меги48 я успешно перепрошил на 5 проводках от ЛПТ-порта. Спасибо товарищу lyberzonу. Хорошо. Возвращаюсь домой, прикупив по дороге местеркитовскую самоделку под названием ВМ9010. Ну, типа USB SPI программатор, и типа совместим с AVR910 :) После недолгой борьбы перепрошил его (как раз "плохо работающей" Ардуиной!) новой програмкой от уважаемого PROTTOSSа, в которой он заложил протокол STK500-2. Конечно, протокол очень хорош! То, что там пошли к вычерпыванию приборозависимой инфо из XML-файла, это очень здоровою. Но еще они дают возможность накапливать в ЛОГ-файле весь траффик - тоже вещица полезная!
Но это все отступление. А вот что удалось установить.

Если в программе устанавливается предделитель, то процессор начинает работать с новой частотой после исполнения соответствующей команды. Например,

Код
CLKPR= (1<<CLKPS2) | (1<<CLKPS0);    // 8 MHz / 32 = 250 kHz
Ну, пусть себе. Работает. Но вот пришел импульс сброса от внешнего программатора. И этот импульс, как я думал, сбрасывает предделитель. А вот фигушки! Путем сидения и потения я увидел, что внешняя частота ISP просто слишком велика для моего процессора. Например, по инфо от программы stk500 (ключ -J при запуске ее из командной строки) исходная частота работы ISP - около 1,8 МГц. Естественно, что для внутренней частоты 8 МГц это не проблема, а вот при работе проца с предделителем на 250 кГц - полный капец.
Понижаю частоту SPI и, о чудо! - все шьется сколько угодно раз!

Значит, предполагаю я, предделитель CLKPR не сбрасывается при поступлении импульса сброса. Не удивительно ли? Или это известный факт? Кто-то получал такой результат?

Еще один вопрос.

Как правильно задать ДУДКе понижение частоты SPI?

Я пробовал ключ -i <delay>, задавая 20-50 мкс, но что-то результата не увидел. Поэтому сейчас работаю с БАТ-файлом, в котором сначала через программу stk500 подаю команду понижения частоты работы интерфейса, а затем из avrdude программирую (т.к. ДУДКа сам умеет и верифицировать). Как-то коряво получается. Да и на программирование прямо из Студии пора переходить. Там тоже как-то надо уметь понижать частоту. Да-с, кнопочки "ТОРМОЗ" не хватает в этом ВМ9010... А в оригинальном от prottossа - есть.
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
04.09.2010, 22:18 12
Молодец! Добил таки его. А что за новая прошива для протос-прога с STK500?
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
05.09.2010, 00:16 13
Цитата Сообщение от lyberzon
Молодец! Добил таки его. А что за новая прошива для протос-прога с STK500?
Где тут смайлик смущенной улыбки?

Дело в том, что уважаемый prottoss совсем недавно выложил на Electronics (63-я страница темы) пробную версию программы, в которой заменил протокол на более современный STK500-2. Он же меня туда и послал :)

И все же, кто прокомментирует странный НЕСБРОС регистра CLKPR по активному ресету?
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
05.09.2010, 00:29 14
Спасибо за наводку, надо попробовать.
А что на счет CLKPR в даташите пишуть?
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
05.09.2010, 11:56 15
Цитата Сообщение от lyberzon
Спасибо за наводку, надо попробовать.
А что на счет CLKPR в даташите пишуть?
Ты не поверишь, но именно там кое-что написано. В описании CLKPR читаем слеующее:
The CKDIV8 Fuse determines the initial value of the CLKPS bits. If CKDIV8 is unprogrammed, the CLKPS bits will be risit to “0000". If CKDIV8 is programmed, CLKPS bits are risit to “0011", giving a division factor of 8 at stort up.

Видим. что при исходном (программирован) состоянии фьюза CKDIV8 предделитель будет по ресету устанавливаться в 0011, деля исходную (у меня 8 МГц) частоту на 8. Можно предположить, что и во время действия импульса РЕСЕТ предделитель уже установится. Тогда, вроде бы, все становится на свои места:

Частота 8 МГц. По РЕСЕТу она становится 1 МГц. Максимальная частота импульсов SCK интерфейса SPI - 250 кГц. А у меня в программаторе она значительно выше - 1,83 МГц.
Вот почему снижение частоты SCK до 50 кГц помогало.

Но! Вот специально провел эксперимент и результаты не совсем по теории. Ведь просто вывод - при частоте ядра 1 МГц я могу по SPI стучать до 250 кГц. Так? Делаю эсперимент:

Частота SPI 1,83 МГц (код 0х00 на программатор) - не работает. Понятно.
Частота SPI 460 кГц (код 0х01 на программатор) - работает. Не понятно.
Частота SPI 115 кГц (код 0х02 на программатор) - работает. Понятно.

Как видите, есть частота, которая, вроде как, в 2 раза меньше той тактовой, которую мы предположили - не должен SPI работать. А он работает... КАГБЭ хорошо, но не очень ясно.

Самое смешное, что распрограммировав фьюз (ну, записав туда "1", 0хЕ0 в байте фьюзов), мы же приводим к тому, что по РЕСЕТу должны все биты предделителя сбрасываться (см.выше цитату из даташита). Теперь максимальная частота SPI уже 2 МГц (или около того, смотря как там внутренний генератор уплыл). Но это никак подтверждается - табличка эксперимента точно такая же:

Частота SPI 1,83 МГц (код 0х00 на программатор) - не работает. Не понятно.
Частота SPI 460 кГц (код 0х01 на программатор) - работает. Понятно.
Частота SPI 115 кГц (код 0х02 на программатор) - работает. Понятно.

КАРОЧИ, надо немного SPI тормозить. Чуть больше, чем показывают прямые расчеты. И будет счастье. Но осадок непонимания остался.
0
Brykodyr
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 1,326
05.09.2010, 13:11 16
Да, заморочился не на шутку. Так я не понял, ты что там пишешь то, программатор что ли? Софтовый или хардверный?
0
drvtos
1 / 1 / 0
Регистрация: 25.05.2010
Сообщений: 3,610
05.09.2010, 15:08 17
Цитата Сообщение от lyberzon
Так я не понял, ты что там пишешь то, программатор что ли
Нет, совсем другие устройства. Просто решил, что удобно программировать прямо с ноута, на котором нет ЛПТ. Ну, а ПАХОДУ разобрался с одним недописанным проектом на АРДУИНО, поспорил с одним из авторов, который сильно обиделся, что я там нахакерил :)

Теперь у меня 3 способа запрограммировать АВР, ну, спокойнее на душе. К тому же, могу теперь подсказать кому-то. А это же здорово!

ИТАК, закрывая тему, докладываю:

Основной затык с "разово программируемыми" чипами состоял в том, что частота обращения по SPI была слишком высокой. По неустановленной причине "девственные" чипы понимали частоту 1,83 МГц (хотя внутренний генератор 8 МГц + исходный фьюз CKDIV8 дожны были этому препятствовать). После программирования они начинали работать на частоте 250 кГц. И, не знаю почему, они переставали понимать 1,83 МГц даже в условиях действия сигнала РЕСЕТ.
Понижение частоты SPI полностью устранило проблему.
0
05.09.2010, 15:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2010, 15:08

Как подружить AVR+AVR?
Приветствую Вас уважаемые форумчане! Требуется связать 2 AVR-ки, по...

AVR Studio 6 Avr simulator
Подскажите каким образом стартануть прогу в avr symulator с адреса boottooder...

CAVR против AVR Studio, что не так в программе под AVR Studio
Проблема такая, есть исходник, если его компилировать в CAVR заливаю в МК все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru