Polaris 0 19 сентября, 2007 Опубликовано 19 сентября, 2007 · Жалоба Всем привет! При написании собственного загрузчика для ADuC834 через Com-порт (встроенный использовать нельзя, так как доступа к джамперу на PSEN не будет) столкнулся со следующей проблемой: WSD умеет только писать и запускать программу, Keil по последовательному интерфейсу отлаживать не очень хочет (точнее, хочет, но толку от такой отладки ноль, так как код остановить нельзя и что-то передать через порт тоже нельзя - порт занят отладчиком). А очень нужно прочитать текущее содержимое флэш, чтобы увидеть, где ошибка в алгоритме, что не получается (проц точно стирается, но вот пишется ли - вопрос). Начал искать средства для более достойной отладки. Ничего бесплатного не нашел, есть только нечто single-pin от accutron через пин EA, но не факт, что я смогу его быстро приобрести. Неужели вообще нет никакой возможности прочитать содержимое флэшки у ADuC? Или я что-то пропускаю очевидное? Жду любых советов, за исключением советов отказаться от ADuC. Заранее спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KRS 0 19 сентября, 2007 Опубликовано 19 сентября, 2007 · Жалоба к сожалению у родного бутлоадера нет команды чтения флеша. Но вы можете написать свою функцию, которая скидывает нужную область флеша в UART! Просто поставте ее вызов в нужном месте вашей прораммы (после записи)... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Polaris 0 19 сентября, 2007 Опубликовано 19 сентября, 2007 · Жалоба к сожалению у родного бутлоадера нет команды чтения флеша. Но вы можете написать свою функцию, которая скидывает нужную область флеша в UART! Просто поставте ее вызов в нужном месте вашей прораммы (после записи)... Да, спасибо, сам уже тоже начал подумывать именно о таком способе. Завтра попробую читать флэш сразу же после записи, посмотрю, в чем там отличие... Но вообще, конечно, это существенный минус ADuC :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Polaris 0 20 сентября, 2007 Опубликовано 20 сентября, 2007 · Жалоба Если кому-то интересно, как решилась проблема, то сообщаю :) Добавил в собственный загрузчик команду вычитывания флэш. Промучался с ней, так как читала ерунду. Только после вдумчивого повторного прочтения даташита 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. Вроде бы все. Надеюсь, кому-то в будущем поможет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
a_lexsandr 0 16 февраля, 2012 Опубликовано 16 февраля, 2012 · Жалоба Если кому-то интересно, как решилась проблема, то сообщаю :) Добавил в собственный загрузчик команду вычитывания флэш. Промучался с ней, так как читала ерунду. Только после вдумчивого повторного прочтения даташита 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться