Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Чтение прошивки ADuC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Polaris
Всем привет!
При написании собственного загрузчика для ADuC834 через Com-порт (встроенный использовать нельзя, так как доступа к джамперу на PSEN не будет) столкнулся со следующей проблемой: WSD умеет только писать и запускать программу, Keil по последовательному интерфейсу отлаживать не очень хочет (точнее, хочет, но толку от такой отладки ноль, так как код остановить нельзя и что-то передать через порт тоже нельзя - порт занят отладчиком). А очень нужно прочитать текущее содержимое флэш, чтобы увидеть, где ошибка в алгоритме, что не получается (проц точно стирается, но вот пишется ли - вопрос). Начал искать средства для более достойной отладки. Ничего бесплатного не нашел, есть только нечто single-pin от accutron через пин EA, но не факт, что я смогу его быстро приобрести.
Неужели вообще нет никакой возможности прочитать содержимое флэшки у ADuC? Или я что-то пропускаю очевидное?

Жду любых советов, за исключением советов отказаться от ADuC.
Заранее спасибо!
KRS
к сожалению у родного бутлоадера нет команды чтения флеша.
Но вы можете написать свою функцию, которая скидывает нужную область флеша в UART!
Просто поставте ее вызов в нужном месте вашей прораммы (после записи)...
Polaris
Цитата(KRS @ Sep 19 2007, 18:19) *
к сожалению у родного бутлоадера нет команды чтения флеша.
Но вы можете написать свою функцию, которая скидывает нужную область флеша в UART!
Просто поставте ее вызов в нужном месте вашей прораммы (после записи)...

Да, спасибо, сам уже тоже начал подумывать именно о таком способе. Завтра попробую читать флэш сразу же после записи, посмотрю, в чем там отличие... Но вообще, конечно, это существенный минус ADuC smile.gif
Polaris
Если кому-то интересно, как решилась проблема, то сообщаю smile.gif
Добавил в собственный загрузчик команду вычитывания флэш. Промучался с ней, так как читала ерунду. Только после вдумчивого повторного прочтения даташита uC007 с сайта AnalogDevices обнаружил следующую довольно неожиданную вещь - в режиме ULOAD команда WRITEBYTE (0x82) пишет байт по заданному в EADRH/L адресу из регистра EDATA1 во флэш. Но команда READBYTE (0x81) читает байт по адресу EADRH/L почему-то не из флэш, а из flash/EE data memory. Читать флэш нужно при помощи MOVC или указателя на code, если это Си. Смысл этих телодвижений не очень понятен, все другие команды режима ULOAD работают именно с флэш (flash/EE program memory).
В связи с этим прошиватель мой и не работал - я сразу после перехода в режим перепрошивки стираю всю память и ставлю в 0x0000 прыжок на 0xE000, там лежит мой загрузчик. После этих манипуляций даже прерывание режима программирования внеплановым отключением питания не смертельно - можно начать все сначала, сбросив прибор. Затем я получаю новую прошивку и пишу ее во флэш, все, кроме первой страницы (там же у меня джамп на тело загрузчика smile.gif), первая страница пишется в конец перепрограммируемого кода (0xDFC0), длина у нее 0x40 байт. После успешного окончания программирования (контрольные суммы пакетов, чтение прошивки для сравнения - все как полагается), я стираю первую страницу и переписываю ее из 0xDFC0. Вот в этом месте я и писал в начало прошивки бред, вычитанный из flash/EE data memory.
Вроде бы все. Надеюсь, кому-то в будущем поможет.
a_lexsandr
Цитата(Polaris @ Sep 20 2007, 17:56) *
Если кому-то интересно, как решилась проблема, то сообщаю sm.gif
Добавил в собственный загрузчик команду вычитывания флэш. Промучался с ней, так как читала ерунду. Только после вдумчивого повторного прочтения даташита uC007 с сайта AnalogDevices обнаружил следующую довольно неожиданную вещь - в режиме ULOAD команда WRITEBYTE (0x82) пишет байт по заданному в EADRH/L адресу из регистра EDATA1 во флэш. Но команда READBYTE (0x81) читает байт по адресу EADRH/L почему-то не из флэш, а из flash/EE data memory. Читать флэш нужно при помощи MOVC или указателя на code, если это Си. Смысл этих телодвижений не очень понятен, все другие команды режима ULOAD работают именно с флэш (flash/EE program memory).
В связи с этим прошиватель мой и не работал - я сразу после перехода в режим перепрошивки стираю всю память и ставлю в 0x0000 прыжок на 0xE000, там лежит мой загрузчик. После этих манипуляций даже прерывание режима программирования внеплановым отключением питания не смертельно - можно начать все сначала, сбросив прибор. Затем я получаю новую прошивку и пишу ее во флэш, все, кроме первой страницы (там же у меня джамп на тело загрузчика sm.gif), первая страница пишется в конец перепрограммируемого кода (0xDFC0), длина у нее 0x40 байт. После успешного окончания программирования (контрольные суммы пакетов, чтение прошивки для сравнения - все как полагается), я стираю первую страницу и переписываю ее из 0xDFC0. Вот в этом месте я и писал в начало прошивки бред, вычитанный из flash/EE data memory.
Вроде бы все. Надеюсь, кому-то в будущем поможет.


Не сохранились ли исходники программы???, мучаюсь, нужно почитать флеш данных у Aduc848.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.