Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PIC24F08 как hex-файл пишется во флэш
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
vardik
Разрабатываю девайс, фрагмент задачи - получить по Ethernet прошивку (hex-файл) и зашить ею PIC24F08.
Написал интерфейс для программирования PIC'a, для получения прошивки, синтаксического анализа строк hex-файла. Встал вопрос, как именно данные из hex-файла должны быть прописаны во флэш PIC'a.

У меня есть некий тестовый хекс-файл, с прошивкой. Я PICkit'ом прошиваю микроконтроллер и смотрю содержимое флеш памяти и пытаюсь сопоставить с тем, что в хекс-файле, которым я его только что прошил было написано.

Вот например кусок

:100800000080FA003400F9004F0078000040060034
:10081000801F78003400F80000002000A00188004C
:100820000200FA00004180000000E0001E003A00D3
:100830001900370022C2BF00624060000004E000DF

Разберем его
Размер Адрес Тип записи Данные КС
: 10 0800 00 00 80 FA 00 34 00 F9 00 4F 00 78 00 00 40 06 00 34
: 10 0810 00 80 1F 78 00 34 00 F8 00 00 00 20 00 A0 01 88 00 4C
: 10 0820 00 02 00 FA 00 00 41 80 00 00 00 E0 00 1E 00 3A 00 D3
: 10 0830 00 19 00 37 00 22 C2 BF 00 62 40 60 00 00 04 E0 00 DF

Что я вижу в памяти PIC,а.



Проблема в следующем. Очевидно, что данные из первой строки записались по адресу 0x0400 вместо 0x0800 (это не совпадение и по адресу 0x0800 память пуста, FFFFFF там). Также непонятно куда делись выделенные жирным в хексе байты.
Danis
Цитата(vardik @ Oct 20 2011, 11:13) *
Разрабатываю девайс....


А нужен ли вам именно hex файл. Его ведь разбирать надо (парсить). Hex файл это не просто карта флеш памяти для контроллера, там много другой служебной информации. Проще сразу «бинарник» удаленно получать и писать. Либо, все таки, разберитесь со структурой hex. А нули это фантомные байты, с ними ничего делать не надо.
vardik
Цитата(Danis @ Oct 20 2011, 12:52) *
А нужен ли вам именно hex файл. Его ведь разбирать надо (парсить). Hex файл это не просто карта флеш памяти для контроллера, там много другой служебной информации. Проще сразу «бинарник» удаленно получать и писать. Либо, все таки, разберитесь со структурой hex. А нули это фантомные байты, с ними ничего делать не надо.


Немного разобрался, насчет нулей ты действительно прав, спасибо.
А с адресами ситуация следующая. Дело в том, что в hex-файле адресация идет по байтам, а на представленном скриншоте из PICKIT'a адресация идет по словам, каждое из которых состоит из трех байт. В хексе каждый четвертый байт, те которые выделены жирным шрифтом. как верно заметил коллега Danis "фантомные".
Одно слово занимает диапазон адресов длиной 0x2, например

0x000000 - 0x000002 - 1ое слово (3 байта)
0x000002 - 0x000004 - 2ое слово (3 байта)

Для записи такого диапазона берем 3 байта из поля данных Hex-файла + 1 "фантомный байт", итого 4 байта.

Таким образом одно слово занимает 2 адреса при адресации по словам
Это же слово в hex-файле занимает 4 байта и соответственно 4 адреса при адресации по байтам.
Этим и обусловлено удвоение адресов в hex-файле.

Насчет бинарника согласен, но задача именно через hex-файл стоит, да и парсер уже написан ; )
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.