Перейти к содержанию
    

Чтение прошивки ADuC

Всем привет!

При написании собственного загрузчика для ADuC834 через Com-порт (встроенный использовать нельзя, так как доступа к джамперу на PSEN не будет) столкнулся со следующей проблемой: WSD умеет только писать и запускать программу, Keil по последовательному интерфейсу отлаживать не очень хочет (точнее, хочет, но толку от такой отладки ноль, так как код остановить нельзя и что-то передать через порт тоже нельзя - порт занят отладчиком). А очень нужно прочитать текущее содержимое флэш, чтобы увидеть, где ошибка в алгоритме, что не получается (проц точно стирается, но вот пишется ли - вопрос). Начал искать средства для более достойной отладки. Ничего бесплатного не нашел, есть только нечто single-pin от accutron через пин EA, но не факт, что я смогу его быстро приобрести.

Неужели вообще нет никакой возможности прочитать содержимое флэшки у ADuC? Или я что-то пропускаю очевидное?

 

Жду любых советов, за исключением советов отказаться от ADuC.

Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

к сожалению у родного бутлоадера нет команды чтения флеша.

Но вы можете написать свою функцию, которая скидывает нужную область флеша в UART!

Просто поставте ее вызов в нужном месте вашей прораммы (после записи)...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

к сожалению у родного бутлоадера нет команды чтения флеша.

Но вы можете написать свою функцию, которая скидывает нужную область флеша в UART!

Просто поставте ее вызов в нужном месте вашей прораммы (после записи)...

Да, спасибо, сам уже тоже начал подумывать именно о таком способе. Завтра попробую читать флэш сразу же после записи, посмотрю, в чем там отличие... Но вообще, конечно, это существенный минус ADuC :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кому-то интересно, как решилась проблема, то сообщаю :)

Добавил в собственный загрузчик команду вычитывания флэш. Промучался с ней, так как читала ерунду. Только после вдумчивого повторного прочтения даташита 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, там лежит мой загрузчик. После этих манипуляций даже прерывание режима программирования внеплановым отключением питания не смертельно - можно начать все сначала, сбросив прибор. Затем я получаю новую прошивку и пишу ее во флэш, все, кроме первой страницы (там же у меня джамп на тело загрузчика :)), первая страница пишется в конец перепрограммируемого кода (0xDFC0), длина у нее 0x40 байт. После успешного окончания программирования (контрольные суммы пакетов, чтение прошивки для сравнения - все как полагается), я стираю первую страницу и переписываю ее из 0xDFC0. Вот в этом месте я и писал в начало прошивки бред, вычитанный из flash/EE data memory.

Вроде бы все. Надеюсь, кому-то в будущем поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если кому-то интересно, как решилась проблема, то сообщаю :)

Добавил в собственный загрузчик команду вычитывания флэш. Промучался с ней, так как читала ерунду. Только после вдумчивого повторного прочтения даташита 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, там лежит мой загрузчик. После этих манипуляций даже прерывание режима программирования внеплановым отключением питания не смертельно - можно начать все сначала, сбросив прибор. Затем я получаю новую прошивку и пишу ее во флэш, все, кроме первой страницы (там же у меня джамп на тело загрузчика :)), первая страница пишется в конец перепрограммируемого кода (0xDFC0), длина у нее 0x40 байт. После успешного окончания программирования (контрольные суммы пакетов, чтение прошивки для сравнения - все как полагается), я стираю первую страницу и переписываю ее из 0xDFC0. Вот в этом месте я и писал в начало прошивки бред, вычитанный из flash/EE data memory.

Вроде бы все. Надеюсь, кому-то в будущем поможет.

 

Не сохранились ли исходники программы???, мучаюсь, нужно почитать флеш данных у Aduc848.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...