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

Как прошить PIC18F4550 готовым hex с помощью ICD2?


Ушик

Рекомендуемые сообщения

Здравствуйте, уважаемые. Собственно, вопрос уже озвучен выше. Волею судьбы заимел натуральный микрочиповский дебагер и горсточку микропроцессоров, тоже микрочиповских. А так же имею необходимость собрать одно небольшое приспособление, для которого как нельзя лучше подходит этот контроллер. Хотя бы уже тем, что он есть :) К сожалению, на этом "уже есть" и заканчивается. Для удобства хочу влить в микроконтроллер какой-нибудь USB bootloader и не париться, да вот как-то не получается. Сколько ни рылся, в MPLAB не нашел ни опции "сделать хорошо", ни "запрограммировать без компиляции проекта". А проект бутлоадера как раз и не собирается. Собирать же программер для разовой акции тоже как-то не хочется.

Так что прошу подсказки, может быть кто-то знает решение. Спасибо.

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

10 минут назад, Ушик сказал:

Собирать же программер для разовой акции тоже как-то не хочется.

Но изначально бутлоадер всеравно зашивается программатором. Да и компилить проект перед зашивкой всеравно придется

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

55 минут назад, musa56 сказал:

Но изначально бутлоадер всеравно зашивается программатором. Да и компилить проект перед зашивкой всеравно придется

Все так, но Вы немного неверно поняли мой вопрос. Есть готовый, утащенный из Сети файл прошивки. Есть готовый, рабочий и даже видящий процессор отладчик. Но я не владею секретом соединить эти две компоненты :( Я отчаянно надеюсь, что есть хитрый финт, с помощью которого можно превратить отладчик в программатор :) Пусть крайне непродуктивный и неудобный, но чтобы можно было однократно прошить готовое готовым, а дальше уже пользоваться этим самым бутлоадером.

Изменено пользователем Ушик
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

19 минут назад, Ушик сказал:

помощью которого можно превратить отладчик в программатор

Не нужно ничего превращать. ICD2 это и програматор тоже. Иначе все это работатьне будет. Просто подключите согласно даташиту на микросхему и описания на ICD

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

Хм, вроде бы об одном говорим, а как-то не понимаю я Вас. Мои действия пошагово:

1. Установил дрова на железо, поставил софт, поженил отладчик и процессор - они друг друга видят, лампочки на отладчике мигают в такт моим размахиваниям мышкой.

2. В пакете MPLAB IDE 8.92 открыл проект USB HID bootloader, но скомпилировать его не получается - на этапе линкования вылазит ошибка, которую я не победил. Которую все-таки придется победить, ибо иного выхода у меня, похоже, нет. 

2.1. Получить файл bootloader.hex честным путем я не смог, зато в инете нашел готовый.

3. Пятый день ищу в MPLAB IDE способ влить в процессор прошивку БЕЗ компиляции. Так же вполне устроит вариант найти ее в другой программе, которая умеет работать с ICD2.

 

Кратко: мне нужно прошить готовым кексом без компиляции. Это возможно? Если да, то как? Спасибо :)

 

 

  

42 минуты назад, andrusha152 сказал:

Здесь вроде есть.

Тут описан вариант с компиляцией исходников, но компиляция-то как раз и не проходит. Иначе я бы не приставал тут к умным дядькам :)

 

 

П.С.

Вот сообщение об ошибке, которое заставляет меня окончательно поседеть в столь юном возрасте:

На этапе компиляции:

C:\Projects\PIC18\Boot_2\usbdrv.c:104:Warning [2056] expression is always true

 

И линкования:

MPLINK 5.00, LINKER

Device Database Version 1.17

Copyright (c) 1998-2013 Microchip Technology Inc.

Error - section '_cinit_scn' can not fit the section. Section '_cinit_scn' length=0x0000009e

Errors    : 1

Изменено пользователем Ушик
Ссылка на комментарий
Поделиться на другие сайты

Программатору нужен только файл *.hex. Попробуйте найти, или скомпилируйте любой проект для вашего МК ( например ааа ).

Найдите куда помещается файл - ааа.hex. Удалите его, а вместо него подставьте bootloader.hex - предварительно переименовав его в ааа.hex.

Попробуйте запрограммировать.

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

54 минуты назад, snn_krs сказал:

Программатору нужен только файл *.hex. Попробуйте найти, или скомпилируйте любой проект для вашего МК ( например ааа ).

Найдите куда помещается файл - ааа.hex. Удалите его, а вместо него подставьте bootloader.hex - предварительно переименовав его в ааа.hex.

Попробуйте запрограммировать.

Увы, не получилось так сделать: то ли без перекомпиляции система не подхватывает файл с диска (что вряд ли), то ли я в лыжах на асфальте обутый. В логах нет строчки, сообщающей о прошивке устройства, только стирание и верификация. Так что хороший метод, возможно, где-то еще пригодится, но не в данном конкретном случае. Я тут другое нашел: "If you are trying to compile the MicroChip bootloader, you'll need the full version of the C programmer (not the LITE or Student versions) or the compiled code won't fit into the bootspace (0x800 for MCHPUSB bootloader and 0x1000 for the HID bootloader)". А я уже столько бубнов порвал, что сам не знаю, что там сейчас стоит. Очень даже возможно, что вообще ознакомительная версия компилятора. Попробую в этом направлении порыться. 

 

Крик души: как же не хочется трогать эту шаткую конструкцию! Если оно работает - не лезь! :( 

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

17 минут назад, Ушик сказал:

Попробую в этом направлении порыться. 

Возможно поможет:

Спойлер

791416640_20220315163325.png.11a1b2326c0dc4dcb68113b744ca9159.png

 

Улыбнись! Завтра будет ещё хуже...

@Borodach - мудератор.

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

Микрочиповский прошивальщик готовых хексов называется MPLAB IPE.

Хотя не понятно что вы будете делать дальше. Прошивки под бутлоадер отличаются.

Да, еще был момент что какой-то микрочиповский  бутлоадер требовал платной версии компилятора, в противном случае он не влезал в выделенный под него участок памяти.

Есть еще бутлоадер и среда/компилятор под нее от микроэлектроники (кажется), но там тоже не совсем бесплатно. Есть другие, но я не пользовался.

Зачем вам бутлоадер если есть программатор?

 

Изменено пользователем Михаил В
Ссылка на комментарий
Поделиться на другие сайты

Поставил я этот IPE, но не нашел в ней поддержки своего ICD2. Наверное, плохо искал. 

Для чего мне нужен бутлоадер. В моем видении мира он (бутлоадер) превращает коммуникационный порт ПК в программатор. Т.е. я пишу новую программу, получаю кекс. Затем подключаю своё устройство к ПК, запускаю программу поддержки этого бутлоадера и вливаю новую прошивку с процессор. Устройство приобретает новые функции, еще более улучшенные. Все счастливы.

Отыскав готовый бутлоадер (и даже не один) я радовался, что половина дела сделана. Как же я заблуждался! :)  Для меня бутлоадер - это та же ардуина, подключил и работай.

 

1 час назад, Михаил В сказал:

Хотя не понятно что вы будете делать дальше. Прошивки под бутлоадер отличаются.

Поясните, пожалуйста, что Вы имеете в виду? Насколько я представляю, общий функционал в целом остается прежним. Меня (сейчас) интересуют 1-2 канала ШИМ, 1 таймер, I2C, GPIO. Возможно, в конечной программе нужно будет указывать какие-то моменты, но это я дальше буду уже постигать. С Пиками я работал последний раз лет 7 назад, так что могу искренне верить в любую чушь :) 

 

Про платный компилятор - да, Вы и тут правы, такую информацию я тоже находил. Естественно, не в официальных источниках :) Вот мой ознакомительно-лайтовый компилятор и не компилирует, таблетку хочет.

----------------------------------------------------------------------------------------------------------------------------------------

 

Надеюсь, я верно понял Вашу мысль. Если нет - пожалуйста, распишите как для идиота, пошагово, я точно не обижусь :)  Спасибо

 

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

Да, еще запоздалое прозрение. Может быть какой-либо софт умеет использовать эту микрочиповскую шайбу как программатор? А то ICD2 что-то ни в одной программе не попадается.

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

1 час назад, Ушик сказал:

Надеюсь, я верно понял Вашу мысль. Если нет - пожалуйста, распишите как для идиота, пошагово, я точно не обижусь :)  Спасибо

 

PIC18F умеет записывать память программы под управлением самой этой программы, но микроконтроллер сам по себе никак не различает бутлоадер и основной функционал прошивки, ему всё равно.

По сути бутлоадер это просто неизменяемая часть вашей программы которая умеет переписывать изменяемую часть и обычно расположена в стороне от основной программы по фиксированному адресу, чтобы при изменении основного функционала прошивки адреса бутлоадера не плавали.

Если вы зашьёте "обычную" прошивку поверх бутлоадера, то она просто затрёт бутлоадер или, как минимум, точку входа.

По этому бутлоадер включается в исходный код вашей прошивки как его неизменяемая часть и компилируется вместе с прошивкой.

Изменено пользователем Михаил В
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Михаил В сказал:

...По этому бутлоадер включается в исходный код вашей прошивки как его неизменяемая часть и компилируется вместе с прошивкой.

Спасибо, доходчиво и понятно разъяснили. Я думал, что пользовательская программа и бутлоадер - они живут в разных, не связанных между собой областях памяти. Пусть и в пределах одного поля памяти, не важно. Типа как в атмеловских чипах - выделил кусок памяти под загрузчик и забыл про нее. Ну а раз так нельзя и надо исходники бутлоадера пришивать к своим исходникам, то все плохо.

 

Хотя остается вопрос: в сети гуляет куча всяких бутлоадеров для пиков, и большая часть именно в виде скомпилированных кексов, без исходников. А с этими тогда как быть?

 

2 часа назад, andrusha152 сказал:

Похоже, только MPLAB IDE и умеет.

Блин, блин, вот же блин! Придется собирать программатор. 

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

4 часа назад, Ушик сказал:

А с этими тогда как быть?

Никто не мешает создать свой линковочный файл, который разместит пользовательскую прошивку по тому адресу, куда передаёт управление бутлоадер и так, чтобы hex прошивки не перекрывал бутлоадер (особенно точки входа). Аналогично с прерываниями.

Потом бутлоадер зашьет прошивку не затирая вектор входа и передаст ей управление.

Но компилятор (линковщик) должен знать об изменившемся стартовом адресе и области памяти занятой бутлоадером. Ну и прочих ресурсах если они используются. Обычно это оговаривается в описании бутлоадера.

У PIC18, на память, три точки входа стартовая 0x000, и две прерываний 0x008 и 0x018

Т.е. микроконтроллер при включении выполняет команду расположенную по адресу 0x000. Там обычно живёт команда перехода на адрес функции main для программы на си. При наличии бутлоадера будет переход на соответствующую функцию бутлоадера. Который потом должен передать управление функции main основной прошивки. Но этот адрес не обязан быть постоянным для любой прошивки. Тогда бутлоадеру надо или запомнить этот адрес взяв его из хекса, или проще собрать прошивку так, чтобы ее точка входа была постоянной.

Изменено пользователем Михаил В
Ссылка на комментарий
Поделиться на другие сайты

Да уж, не все так просто, как хотелось бы :) Спасибо, теперь картина стала чуточку яснее. Значит, левые бутлоадеры пришиваются к пользовательскому коду на этапе линкования. Забавно, в статьях об этом говорится примерно так, как я писал выше: очень уверенно, умно, и нихрена не понятно :) 

 

Буду дальше ковырять эту отвратительную экосистему (не зря же мне с самого детства PIC иррационально не нравились :)) Достану с полки ЭВМ Древних, у которого есть LPT и COM порты, и буду на нем городить свою хотелку :) 

 

Собственно, я чего хочу от него. Проект - это мозги для протяжки филамента из бутылок, которых в Сети хоть пруд пруди. Но в силу обстоятельств ардуину туда ставить я не хочу ,а в загашниках лежит несколько пиков. Вот и хочу пустить их в дело. Заодно глядишь и умнее чуточку стану. И, как оказалось, не прогадал: с Вашими разъяснениями это получилось :)  Спасибо :) 

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

А зачем бутлоадер если есть дебаггер?

Если устройство не в полях, а на столе, то на этапе отладки проще нажать одну кнопку в MPLAB (X) чем ковыряться с файлами. А в серии тем более - всё равно бутлоадер надо как-то зашить.

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

При серийном производстве вопросы были бы иные, там совсем другие реалии :) На столе, конечно, можно и отладчиком прошить, но посмотрите условия задачи в первом моем посте - из имеющегося оборудования для работы с исконно микрочиповскими чипами у меня есть лишь старый злобный ICD2, который под виндой 10 кое-как заработал, но это не точно. Плюс есть еще старинный программатор, который точно умеет шить эти процессоры, но подключается к LPT порту. Так что придется или страдать в MPLAB (не Х, в старом), или городить старый комп из хлама. Согласитесь, обе перспективы не внушают оптимизма. Потому-то и возлагал такие надежды на USB bootloader. Станочек у меня уже есть такой, работает, вполне устраивает. Просто хочу вынуть дуню и применить ее в другом, более приоритетном проекте. Вот такая вот сублимация зла своими руками в домашних условиях :)

Попробую сотворить какой-нибудь PicKit2, раз уж больше вариантов нет.

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

Кажется, что-то зашевелилось: микрочиповский бутлоадер из солюшена за 2013 год начал хотя бы компилироваться. Подкуп, шантаж и слезы все-таки великая сила! :) 

 

На одном из форумов нашел упоминание, что в обрезанной демоверсии компилятора оптимизаций не хватает на то, чтобы уместить это самый бутлоадер в 1000 (или 800?) слов. Для чего можно попытаться выкинуть что-то лишнее. В том примере лишним было ехидное перемигивание светодиодов, которые, к слову, еще и ноги отжирали. Выбросив буквально несколько строк, отвечающих за эти светодиоды, их определения и процедуру с мигалками проект втиснулся в отведенное ему место. Уж по крайней мере заветное  "Build succeeded" появилось. Теперь придется страдать и мучаться в этом MPLAB :(, сочиняя все эти протоколы с нуля.

 

Вот ссылка на статью, где указаны лишние строчки http://www.picprojects.net/usbbootloader/

Изменения в файле boot.c

...
/** P R I V A T E  P R O T O T Y P E S ***************************************/
---> remove prototype
//void BlinkUSBStatus(void);
...
...
...
void BootService(void)
{
---> remove call to BlinkUSBStatus
//BlinkUSBStatus();
if((usb_device_state < CONFIGURED_STATE)||(UCONbits.SUSPND==1)) return;
...
...
...
case UPDATE_LED:
---> remove the following block
/*
if(dataPacket.led_num == 3)
{
mLED_3 = dataPacket.led_status;
counter = 0x01;
}//end if
if(dataPacket.led_num == 4)
{
mLED_4 = dataPacket.led_status;
counter = 0x01;
}//end if
*/
---> add the following line
counter = 0x01;
break;
...
...
...
---> remove BlinkUSBStatus function
/*
void BlinkUSBStatus(void)
{
//static word led_count=0;  //declared globablly instead, to save code space
if(led_count == 0)led_count = 20000U;
led_count--;
#define mLED_Both_Off()         {mLED_1_Off();mLED_2_Off();}
#define mLED_Both_On()          {mLED_1_On();mLED_2_On();}
#define mLED_Only_1_On()        {mLED_1_On();mLED_2_Off();}
#define mLED_Only_2_On()        {mLED_1_Off();mLED_2_On();}
if(UCONbits.SUSPND == 1)
{
if(led_count==0)
{
mLED_1_Toggle();
mLED_2 = mLED_1;        // Both blink at the same time
}//end if
}
else
{
switch(usb_device_state)
{
case DETACHED_STATE:
mLED_Both_Off();
break;
case ATTACHED_STATE:
mLED_Both_On();
break;
case ADDRESS_STATE:
if(led_count == 0)
{
mLED_1_Toggle();
mLED_2_Off();
}//end if
break;
case POWERED_STATE:
mLED_Only_1_On();
break;
case DEFAULT_STATE:
mLED_Only_2_On();
break;
case CONFIGURED_STATE:
if(led_count==0)
{
mLED_1_Toggle();
mLED_2 = !mLED_1;       // Alternate blink
}//end if
break;
default:		//For POWERED_STATE and DEFAULT_STATE
mLED_Both_On();
break;
}
}//end else of if(UCONbits.SUSPND...)
}//end BlinkUSBStatus
*/
...

Изменения в файле main.c

...
// Note: Some of the below configuration bits are commented out
// to prevent build errors with some of the above listed devices.
// For example, on the PIC18F4458 CP3, WRT3, and EBTR3 don't exist.
// adjust PLLDIV configuration to your oscillator frequency
#pragma config PLLDIV   = 5       // (20 MHz input)
...
...
...
// adjust pin to be checked for bootloader mode entry to your hardware
//Check Bootload Mode Entry Condition
---> adjust pin for bootloader entry if it is not RB4 pin for your hardware
if(PORTBbits.RB4 == 1)      // If not pressed, User Mode
{
ADCON1 = temp;          // Restore reset value
_asm goto RM_RESET_VECTOR _endasm
}//end if
//Bootload Mode
---> remove LED init
//mInitAllLEDs();
...

 

Возможно, кому-то тоже пригодится.

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

В 15.03.2022 в 13:24, Ушик сказал:

Все так, но Вы немного неверно поняли мой вопрос. Есть готовый, утащенный из Сети файл прошивки. Есть готовый, рабочий и даже видящий процессор отладчик. Но я не владею секретом соединить эти две компоненты :( Я отчаянно надеюсь, что есть хитрый финт, с помощью которого можно превратить отладчик в программатор :) Пусть крайне непродуктивный и неудобный, но чтобы можно было однократно прошить готовое готовым, а дальше уже пользоваться этим самым бутлоадером.

В догон и на будущее. Работа с готовым хексом не требует никакой компиляции. Но загрузка хекса в среду для последующего программирования производится путем ИМПОРТА хекса в фиктивный созданный проект.

戦う前に相手のベルトの色に注目

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

35 минут назад, my504 сказал:

В догон и на будущее. Работа с готовым хексом не требует никакой компиляции. Но загрузка хекса в среду для последующего программирования производится путем ИМПОРТА хекса в фиктивный созданный проект.

Спасибо. Импорт прошел успешно. Потихоньку смотрю в сторону MPLAB X, в надежде увидеть в ней что-то прекрасное. Может быть, проект еще и зашевелит лапками :) 

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

6 часов назад, Ушик сказал:

Потихоньку смотрю в сторону MPLAB X

Бесплатная IDE среда разработки без ограничения по объёму кода. Есть графический интерфейс через который быстро и легко можно настроить реистры.

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...