Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Флаг сброса по включению питания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
EugeNNe
Есть M640. В соответствии с алгоритмом работы программы требуется анализ флагов источников сброса. Выяснилось что со всеми флагами регистра MCUSR всё в порядке, устанавливаются когда надо. А вот флаг PORF, который указывает включение питания как источник сброса почему то упорно не хочет устанавливаться. В чём может быть причина?

Ещё вопросик по фьюзам:почему чип прекрасно входит в режим отладки даже со сброшенным фьюзом OnChipDebugEnable? Всё равно установлен он или сброшен без разницы. Отлаживаем с помощью JTAG ICE mkII.
Александр Куличок
Отладчик сам устанавливает этот бит (OnChipDebugEnable) при старте отладки. И снимает при завершении.
Цитата
А вот флаг PORF, который указывает включение питания как источник сброса почему то упорно не хочет устанавливаться.

Т.е. после сброса ни один из флагов сброса в MCUSR не установлен?

Как проверяли состояние флага? Я бы сделал следующим образом:
1. Запуск отладки с JTAG ICE mkII. При этом JTAG ICE mkII должен быть запитан от USB или от отдельного осточника, независимого от питания target'a
2. установка точки прерывания в начале работы программы
3. запуск программы на выполнение
4. отключение питания таргета на пару..десяток секунд (до полной разрядки конденсаторов по питанию)
5. включение питания таргета. При этом отладчик должен остановить выполнение программы контроллера на точке останова
6. проверяем состояние флага PORF.

Хотя... хто его знает, как там стартует отладчик при включении питания. Может надежней было бы проверить с помощью светодиода и с отключенной отладкой. Только питание с таргета снимать полностью, до полной разрядки кондесаторов питания. Иначе можете получить флаг BORF вместо PORF

Р.S. Очищать флаги после считывания не забываете? хотя для PORF этого вроде как и не надо.
EugeNNe
Цитата(Александр Куличок @ Oct 16 2009, 15:08) *
...

Пробовали описаную вами послндовательность действий - без особого эффекта.

Отключили житаг и стали записывать содержимое вышеуказанного регистра в епром сразу при старте программы. Оказылось что все биты установленны....
Александр Куличок
И даже 3 старших? эсли это так, то что-то у Вас не с программой. Ищите ошибки.
Попробуйте просто при начале работы программы (до разрешения прерываний) вывести состоние битов 0..4 на какой-то порт и зависнуть в вечном цикле.
defunct
Цитата(Александр Куличок @ Oct 16 2009, 14:08) *
Отладчик сам устанавливает этот бит (OnChipDebugEnable) при старте отладки. И снимает при завершении.

Отладчик сам ничего не меняет!
А работает потому, что JTAG позволяет. FUSE OCDEN отвечает за перевод некоторой периферии в отладочный режим - к примеру эмуляция энергосберегающих режимов. Только с установленным фузом OCDEN можно безболезненно отлаживать программу в которой есть переход в PowerDown режим. Если этот фуз не установить, то при переходе в PowerDown получите дисконнект отладчика.

Цитата(BigBolt @ Oct 16 2009, 14:42) *
Оказалось что все биты установленны....

Если включен BOD и имеется емкость на RESET, то должны быть установлены не все, а 3 бита из 5-ти.
PORF, BORF и EXTRF.
PORF - из-за того что было включение.
BORF - из-за того, что напряжение после отработки POR все еще нарастало.
EXTRF - из-за емкости на RESET'е.

WDRF должен быть точно сброшен. В противном случае Вы что-то не то читаете или не туда пишете.

Цитата
Отключили житаг и стали записывать содержимое вышеуказанного регистра в епром сразу при старте программы.

А вообще, заморачиваетесь не тем. Вначале надо хотя бы UART консольку поднять, а потом когда есть куда отладочную информацию выводить, - то можно и reset смотреть...
Александр Куличок
Цитата
А работает потому, что JTAG позволяет

Думаю, (нет, даже уверен) что Вы неправы. Насколько я понимаю, установка точек останова (в том числе по доступу к данным), непосредственно останов выполнения программы (без которого отладка немыслима) - это функции ОСD-ситемы, но никак не возможности JTAG'а как такового. И останов выборки следующего адреса - это уже не периферия, а ядро.
Цитата
Отладчик сам ничего не меняет!

В даташитах везде написано, что для работы отладки этот бит должен (а не может) быть установлен.:
Цитата
The JTAGEN Fuse must be programmed to enable the JTAG Test Access Port. In addition, the OCDEN Fuse must be programmed and no Lock bits must be set for the On-chip debug system to work. As a security feature, the On-chip debug system is disabled when either of the LB1 or LB2 Lock bits are set. Otherwise, the On-chip debug system would have provided a back-door into a secured device.

В хелпе уже прямо сказано,что отладчик снимает этот бит при окончании отладки (хотя про его включение прямо и не сказано)
Цитата
The software front-end will always ensure that the OCDEN fuse is left un-programmed when terminating a session, thereby restricting unnecessary power consumption by the OCD module.

А то, что OCDEN изменяется при запуске отладки, косвенно говорит тот факт, что в опциях JTAG'а в ИАРе есть опция "восстановить фьюзы по окончанию сессии" (отладки)
Хотя проверить легко:
снимаете бит - запускаете отладчик - отключаете питание таргета(чтобы не дать отладчику восстановить значение бита) - отключаете отладчик - включаете питание таргета - и программатором смотрите, что бит OCDEN установлен.
defunct
Цитата(Александр Куличок @ Oct 18 2009, 04:55) *
Думаю, (нет, даже уверен) что Вы неправы. Насколько я понимаю, установка точек останова (в том числе по доступу к данным), непосредственно останов выполнения программы (без которого отладка немыслима) - это функции ОСD-ситемы, но никак не возможности JTAG'а как такового. И останов выборки следующего адреса - это уже не периферия, а ядро.

Например в даташите на m162 скромно написано только это:

JTAG Interface and On-chip
Debug System
If the On-chip debug system is enabled by the OCDEN Fuse and the chip enter Power
down or Power save sleep mode, the main clock source remains enabled. In these
sleep modes, this will contribute significantly to the total current consumption. There are
three alternative ways to avoid this:

• Disable OCDEN Fuse.
• Disable JTAGEN Fuse.
• Write one to the JTD bit in MCUCSR.
The TDO pin is left floating when the JTAG interface is enabled while the JTAG TAP
controller is not shifting data. If the hardware connected to the TDO pin does not pull up
the logic level, power consumption will increase. Note that the TDI pin for the next
device in the scan chain contains a pull-up that avoids this problem. Writing the JTD bit
in the MCUCSR register to one or leaving the JTAG fuse unprogrammed disables the
JTAG interface.


Цитата
В даташитах везде написано, что для работы отладки этот бит должен (а не может) быть установлен.:

Укажите место где это написано. А лучше просто цитату.

Цитата
В хелпе уже прямо сказано,что отладчик снимает этот бит при окончании отладки (хотя про его включение прямо и не сказано)

Предположим вместо m128 отладчику подсунули m1281 расположения фузов в которой отличается, отладчик все равно будет менять фузы?
Кстати на какой отладчик хелп.

Цитата
А то, что OCDEN изменяется при запуске отладки, косвенно говорит тот факт, что в опциях JTAG'а в ИАРе есть опция "восстановить фьюзы по окончанию сессии" (отладки)

Отладчик IAR позволяет менять фузы. Какие фузы отладчику можно автоматически менять настраивает пользователь в соответвующих опциях. Если Вы себе в опциях разрешили автоматическое включение OCDEN, то вы и имеете то что имеете:
Цитата
отключаете отладчик - включаете питание таргета - и программатором смотрите, что бит OCDEN установлен.

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

PS: вечером попробую проделать предложенный эксперимент.
Александр Куличок
Цитата
Укажите место где это написано. А лучше просто цитату.

Цитата выше, я ее уже приводил:
Цитата
The JTAGEN Fuse must be programmed to enable the JTAG Test Access Port. In addition, the OCDEN Fuse must be programmed and no Lock bits must be set for the On-chip debug system to work

Цитата
Предположим вместо m128 отладчику подсунули m1281 расположения фузов в которой отличается, отладчик все равно будет менять фузы?
Кстати на какой отладчик хелп.

Хелп из АВРСтудио. JTAGICE mkII User Guide -> Special Considerations -> Mega OCD (JTAG)
Отладка - в АВРСтудио, JTAG MKII. Студия перед началом отладки проверяет чип и не дает возможности подсунуть ей другой контроллер. Она предлагает автоматом меняет тип контроллера в свойставх проекта или отказывается от отладки.

Отлаживаю обычно в АВРСтудио. Он автоматом устанавливает/снимает бит и не дает возможности повлиять на это.
Хотел попробывать запустить отладку со снятым битом в ИАРе (еще при написании предыдущего поста), но чего-то не нашел опции автоматического включения OCDEN (хотя в памяти отложилось, что где-то была такая опция. Может, в предыдущих версиях? У меня 5.11В).

P.S. Цитату брал из даташита на мегу 164. Но в 162 данный текст тоже присутствует в разделе Using the On-chip Debug system. Кстати, в этом же разделе описаны составляющие блоки OCD-системы, одним из которых есть Break Point unit, без которого, как Вы сами понимаете, отладка немыслима.
defunct
Цитата(Александр Куличок @ Oct 19 2009, 19:52) *
Он автоматом устанавливает/снимает бит и не дает возможности повлиять на это.

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

Меня сбило с толку то, что при отключении питания таргета и последующей остановке отладки фуз оказывался сброшенным. Сегодня я попробовал по-другому, вместо отключения питания таргета, -отключил JTAG шнур, затем остановил отладку. После просмотра фузов, OCDEN оказался зашитым. Выходит, что после отключения питания, потенциала сигнальных линий JTAG'a хватало на то, чтобы перешить фузы.... :o
Ara60
Цитата(Александр Куличок @ Oct 16 2009, 21:26) *
И даже 3 старших? эсли это так, то что-то у Вас не с программой. Ищите ошибки.
Попробуйте просто при начале работы программы (до разрешения прерываний) вывести состоние битов 0..4 на какой-то порт и зависнуть в вечном цикле.


При подключеном mkII - в регистре MCUSR при включении питания устанавливался только флаг JTRF. при отсоединённом mkII, при включении питания, устанавливались все 5!

Цитата(defunct @ Oct 17 2009, 05:47) *
Отладчик сам ничего не меняет!
А работает потому, что JTAG позволяет. FUSE OCDEN отвечает за перевод некоторой периферии в отладочный режим - к примеру эмуляция энергосберегающих режимов. Только с установленным фузом OCDEN можно безболезненно отлаживать программу в которой есть переход в PowerDown режим. Если этот фуз не установить, то при переходе в PowerDown получите дисконнект отладчика.


Если включен BOD и имеется емкость на RESET, то должны быть установлены не все, а 3 бита из 5-ти.
PORF, BORF и EXTRF.
PORF - из-за того что было включение.
BORF - из-за того, что напряжение после отработки POR все еще нарастало.
EXTRF - из-за емкости на RESET'е.

WDRF должен быть точно сброшен. В противном случае Вы что-то не то читаете или не туда пишете.


А вообще, заморачиваетесь не тем. Вначале надо хотя бы UART консольку поднять, а потом когда есть куда отладочную информацию выводить, - то можно и reset смотреть...


Флаг EXTRF при включении питания, устанавливается не зависиммо есть ёмкость или нет. Работает от Vrst ( подробнее в даташите). Проверено на практике. После включения питания устанавливались все. Дальше анализировали флаг PORF( он важен при включении питания, кстати устанавливается и от понижения питания ниже порога Vpot при отключеном BODLEVEL), регистр очищался. Далее влаги работают согласно даташиту.
Александр Куличок
2 Ara60
когда я спрашивал про 3 старших, я имел ввиду биты 7:5 регистра MCUSR, которые в меге 640 должны всегда считаваться как "0".
Цитата
При подключеном mkII - в регистре MCUSR при включении питания устанавливался только флаг JTRF

Странно, ведь ниже Вы сами пишете, что должен как минимум еще установится EXTRF:
Цитата
Флаг EXTRF при включении питания, устанавливается не зависиммо есть ёмкость или нет.

ТОлько что проверил на меге32, при подключенном МКІІ и отключенном WDT при включении питания устанавливается 3 флага: JTRF - его устанавливает МК2, BORF, PORF.
EXTRF - не устанавливается. Может из-за того, что им управляет МК2.

Цитата
при отсоединённом mkII, при включении питания, устанавливались все 5

Странно, что сразу после включения питания у Вас устанавливался флаг сброса по WDT. Может, Вы просто поздно счтитывали его состояние при запущенном WDT?
Ara60
Цитата(Александр Куличок @ Oct 24 2009, 21:33) *
2 Ara60
когда я спрашивал про 3 старших, я имел ввиду биты 7:5 регистра MCUSR, которые в меге 640 должны всегда считаваться как "0".

Странно, ведь ниже Вы сами пишете, что должен как минимум еще установится EXTRF:

ТОлько что проверил на меге32, при подключенном МКІІ и отключенном WDT при включении питания устанавливается 3 флага: JTRF - его устанавливает МК2, BORF, PORF.
EXTRF - не устанавливается. Может из-за того, что им управляет МК2.


Странно, что сразу после включения питания у Вас устанавливался флаг сброса по WDT. Может, Вы просто поздно счтитывали его состояние при запущенном WDT?


Считывали регистр сразу же первой командой при сбросе.... К WDT ещё никто не прикасается.
Да ещё наблюдались странные явления замозапуска WDT, как будто фьюз WDON установлен (c тайм аутом по умолчанию), и это то при сбросе по JTAG и RESET. Хотя при сбросе если этот фьюз не установлен WDT должен сбрасываться. И только выключив питание на устройстве это пропадало, отладка продолжалась нормально. (устройство двухпроцессорное, отлаживаем двумя мкII).
Вам спасибо за внимание!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.