реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Детектирование резета в 89S52, Что происходит с ОЗУ при резете?
paskal
сообщение Oct 14 2008, 16:57
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



В системе на AT89S52 требуется различать по какой причине прошел старт процессора - по включению питания, или же после подачи активного сигнала на резет. Для этого в определенный участок ОЗУ пишу определенную сигнатуру, при старте сравниваю её с образцом. Если совпадает - был резет. До сих пор это нормально работало. Но вот понадобилось модифицировать программу, и обнаружилась удивительная вещь - метод работает в зависимости от того в каком адресе ОЗУ располагаю сигнатуру.
Вопрос следующий: неужели при резете ОЗУ может меняться? Может какаято микропрограмма, скрытая от пользователя, скажем та что программирует по SPI процессор, работает во время резета и пользуется при этом ОЗУ?
А может в 89S52 есть другой метод обнаружения старта по резету?
Go to the top of the page
 
+Quote Post
koyodza
сообщение Oct 14 2008, 18:26
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 213
Регистрация: 28-02-07
Из: Киев
Пользователь №: 25 744



Цитата(paskal @ Oct 14 2008, 19:57) *
В системе на AT89S52 требуется различать по какой причине прошел старт процессора - по включению питания, или же после подачи активного сигнала на резет. Для этого в определенный участок ОЗУ пишу определенную сигнатуру, при старте сравниваю её с образцом. Если совпадает - был резет. До сих пор это нормально работало. Но вот понадобилось модифицировать программу, и обнаружилась удивительная вещь - метод работает в зависимости от того в каком адресе ОЗУ располагаю сигнатуру.
Вопрос следующий: неужели при резете ОЗУ может меняться? Может какаято микропрограмма, скрытая от пользователя, скажем та что программирует по SPI процессор, работает во время резета и пользуется при этом ОЗУ?
А может в 89S52 есть другой метод обнаружения старта по резету?

Никто, кроме пользовательской программы, ОЗУ не модифицирует. Но пользовательская программа, кроме всего прочего, ещё и из стартапа состоит, так что внимательно его просмотрите. Ну и учтите, что в 51 регистры находятся в озу - может, вы сигнатуру неудачно расположили, и она с регистрами пересекается.
Вообще маловато исходных данных: программа на С? Стартап стандартный? Где сигнатура портится, а где нет?
А то больше на конкурс телепатов похоже.
Go to the top of the page
 
+Quote Post
paskal
сообщение Oct 14 2008, 19:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(koyodza @ Oct 14 2008, 22:26) *
Никто, кроме пользовательской программы, ОЗУ не модифицирует. Но пользовательская программа, кроме всего прочего, ещё и из стартапа состоит, так что внимательно его просмотрите. Ну и учтите, что в 51 регистры находятся в озу - может, вы сигнатуру неудачно расположили, и она с регистрами пересекается.
Вообще маловато исходных данных: программа на С? Стартап стандартный? Где сигнатура портится, а где нет?
А то больше на конкурс телепатов похоже.

Я проверял все что мог, в том числе и то что вы указали.
Программа на асме. Тест идет практически сразу, уже после всякие инициализации, т.е. стартап помешать не может. Все переменные после 20-го адреса, регистры тоже отпадают. Сигнатура в 1-й половине ОЗУ. Сбоит если передвинуть адрес хоть на несколько байт. Кроме того моя программа сама попортить сигнатуру не может. Я отвел под неё нужный кусок памяти, и другие переменные залезть в неё не должны, а иначе и программа не работала бы.
Так что я сам сильно удивлён, ведь я такой приём с проверкой резета проводил несколько раз и раньше, но никаких глюков не наблюдал.
Могу ещё грешить на некий уникальный глюк процессора, т.к. для проверки имею в наличии один экземпляр платы.
Go to the top of the page
 
+Quote Post
Flasher
сообщение Oct 14 2008, 20:26
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



а с какого перепугу вы взяли что после сброса должно оставаться то что было до сброса? Вам никто не может гарантировать состояние памяти после запуска процессора
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 14 2008, 22:31
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Flasher @ Oct 15 2008, 02:26) *
а с какого перепугу вы взяли что после сброса должно оставаться то что было до сброса? Вам никто не может гарантировать состояние памяти после запуска процессора
Топикстартер имеет в виду "горячий" старт (питание в норме, рестарт по сигналу RESET) и "холодный" старт (начальный старт после подачи питания). После "горячего" старта содержимое ОЗУ самопроизвольно не меняется.
Go to the top of the page
 
+Quote Post
mrcashe
сообщение Oct 15 2008, 01:49
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 21-07-06
Из: Владивосток
Пользователь №: 18 987



Цитата(paskal @ Oct 15 2008, 03:57) *
В системе на AT89S52 требуется различать по какой причине прошел старт процессора - по включению питания, или же после подачи активного сигнала на резет. Для этого в определенный участок ОЗУ пишу определенную сигнатуру, при старте сравниваю её с образцом. Если совпадает - был резет. До сих пор это нормально работало. Но вот понадобилось модифицировать программу, и обнаружилась удивительная вещь - метод работает в зависимости от того в каком адресе ОЗУ располагаю сигнатуру.
Вопрос следующий: неужели при резете ОЗУ может меняться? Может какаято микропрограмма, скрытая от пользователя, скажем та что программирует по SPI процессор, работает во время резета и пользуется при этом ОЗУ?
А может в 89S52 есть другой метод обнаружения старта по резету?

Ненадёжная какая-то констрикция, я бы не расчитывал на такое поведение. В AT89S8253 для этой цели предусмотрен специальный бит POR (Power-On Reset). Его можно читать и потом сбросить. Но в S52 такого нет. Я бы попробовал добавить триггер, если модернизация девайса возможна, т.е. заместить такой внутренний бит внешним. При включении питания устанавливать триггер с помощью RC-цепочки, потом программно опрашивать и сбрасывать. Нужны 2 дополнительных ноги. Или заменить чип на AT89S8253.
Go to the top of the page
 
+Quote Post
Flasher
сообщение Oct 15 2008, 06:21
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 374
Регистрация: 6-09-05
Из: Тирасполь, Приднестровье
Пользователь №: 8 294



я как раз и имел в виду оба вида старта smile.gif
Go to the top of the page
 
+Quote Post
paskal
сообщение Oct 15 2008, 16:56
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(koyodza @ Oct 14 2008, 22:26) *
Никто, кроме пользовательской программы, ОЗУ не модифицирует.

Сегодня поэксперементировал, сливал содержимое памяти через последовательный канал. Действительно, ОЗУ по резету никак не меняется, признаю был неправ. Заодно нашел причину неправильной работы. У меня резет подает ПЛИС, которая сама выдает его по сигналу с процессора. Из-за дурацкой ошибки в программе, не выдавалась нужная команда, и резет в нужный момент просто не приходил.
Цитата
Я бы попробовал добавить триггер, если модернизация девайса возможна, т.е. заместить такой внутренний бит внешним.

Модернизация невозможна, но теоретически триггер как то можно сделать с помощью ПЛИС. Я подумаю.
Спасибо всем кто ответил.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 11th July 2025 - 17:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.01416 секунд с 7
ELECTRONIX ©2004-2016