Каково назначение загрузчика микроконтроллера? [дубликат]

Насколько я понимаю, для обычного микроконтроллера (например, AVR, PIC) обычно существует два метода программирования его флэш-памяти.

  1. Использование программатора: внутрисхемное последовательное программирование (или какой-то вариант?)
  2. Некоторая форма загрузчика, с которым взаимодействует внешнее устройство, что в конечном итоге позволяет микроконтроллеру прошивать свою собственную память.

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

Дело в том, что программатор стоит дорого? Но есть и Arduino (микроконтроллер ATmega), которые могут работать как программаторы . Достаточно ли стоимости одной дополнительной микросхемы для использования загрузчика? Если я не ошибаюсь, последние версии Arduino полностью избавляются от чипа FTDI, заменяя его процессором ATmega, который выполняет интерфейс USB для последовательного интерфейса. Конечно, можно было бы интегрировать функцию программатора, например, в эту ИС?

Или возьмем, к примеру, микроконтроллер PIC. Я видел нечто, называемое JDM-программистом . Если что-то подобное, практически без активных компонентов, может запрограммировать PIC, то,

  1. Зачем вообще использовать загрузчик?
  2. Какова цель относительно более сложного PICkit (помимо надежности)? Возможность отладки?
arduino.cc/en/Hacking/Bootloader?from=Main.Bootloader Ответ в значительной степени «удобство».
для инициализации оборудования или загрузки кода из внешнего источника во внутреннюю память
Чтобы добавить к некоторым ответам здесь, относительно «дорого»: для некоторых микроконтроллеров (AVR, STM8/32, ...) программисты дешевы. Вы можете получить программатор AVR за 15 долларов или меньше. Однако для других семейств MCU (например, Kinetis) программисты могут стоить более 100 долларов, а программисты / отладчики, которые могут программировать многие семейства ARM, могут стоить 500 долларов +. Но, как уже говорили другие, это в основном удобство, удаленное обновление и устранение внешнего оборудования.

Ответы (6)

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

Когда у вас есть эта возможность, вам не нужно дополнительное оборудование, что делает этот метод с наименьшими текущими затратами, и именно поэтому системы для любителей, такие как Arduino, используют его. Это также обеспечивает небольшую маркетинговую привязку, потому что теперь вам нужно покупать чипы AVR с уже запрограммированным в них загрузчиком.

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

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

Как правило, когда у вас есть электронный продукт, вы не позволяете открывать порт «отладки» или «программирования». У вас есть только Ethernet, последовательный порт, RS485, CAN или беспроводная связь на вашем продукте.

Кроме того, что если у вас уже продано/развернуто несколько десятков или, может быть, сотен устройств, и у вас есть обновление прошивки?

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

Еще лучше, когда у вас есть «подключенные» устройства, например, через Ethernet или любую беспроводную связь. Если вы поместите беспроводной модуль в какой-либо продукт, вы можете использовать эту беспроводную связь с загрузчиком для обновления кода, таким образом, вы можете обновлять несколько устройств одновременно и не касаясь их.

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

Для любителя, возможно, нет особого смысла использовать загрузчик, но с точки зрения бизнеса, когда вы на самом деле продаете устройства, это имеет большой смысл, поскольку это экономит время, добавляет много удобства в процесс, и если ваши пользователи контактируют с вашим устройство, вам не нужно продавать им программаторы только для обновления прошивки (или заставлять их покупать программаторы в противном случае). А что, если ваши устройства одинаковы функционально, но с разными микроконтроллерами? вам придется определить, у кого что есть, чтобы отправить или продать правильный программатор, это становится кошмаром!!

Вместо этого вы просто ставите на него USB-порт и все скрывается от пользователя, все знают, как подключить USB к ПК, скопировать на него один файл и прикрепить к другому устройству, но ни один нормальный пользователь не знает, что за хрень это отладчик P&E, PICKit или Segger J-Link.

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

Ваше здоровье!!

Хороший ответ, может быть, немного многословный. Ваш английский в порядке (по крайней мере, с моей точки зрения, не являющейся носителем языка).
Английский странен в том смысле, что, будучи языком по умолчанию для мировой торговли, вероятно, больше не-носителей языка, чем носителей языка. Таким образом, «правильный» английский становится намного сложнее определить. Как носитель языка из Канзас-Сити, США, у меня не было проблем с пониманием вас.

Основное назначение загрузчика:

  • получить программу из хранилища / сети и загрузить ее.

Рядом с процессором может быть очень ограниченный объем быстрой памяти, и программа, которую вы хотите запустить, может отличаться от платы к плате, или вы можете захотеть изменить программу на своей плате. Загрузчик — это программа общего знаменателя, которая знает, как загрузить ваше пользовательское программное обеспечение из того места, где оно хранится, и передать его в процессор.

Продвинутые загрузчики могут:

  • самотестирование
  • загрузка по сети
  • загрузить дополнительную прошивку
  • ...
ОП спрашивает конкретно о загрузчиках, обнаруженных в микроконтроллерах на основе флэш-памяти. Хотя этот ответ относится к загрузчикам в более общем смысле, он немного не по теме.

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

В зависимости от MCU эта опция защиты от считывания может фактически отключить подключение аппаратного программатора (например, SWD или JTAG). Если у вас не сделан загрузчик, вы не сможете перепрограммировать устройство.

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

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

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

  2. Какое-то схемное программирование после размещения на плате

Во второй категории у вас есть решения с жесткой логикой ( SPI или SPI-подобная вещь на чипах AVR) и программные решения (загрузчик, программа, работающая в части, использующей часть). У некоторых есть и то, и другое.

Трудное решение, которое вы должны найти правильное, если вы ошибаетесь в дизайне, вы должны поймать его достаточно рано, или ваш продукт представляет собой кучу бесполезных частей, которые вы должны выбросить. Вы можете изменить программные решения даже после кремния; вы даже можете подвести итоги, прогнать его и перепрограммировать. Так что есть такая роскошь, если ошибку в вашем продукте легче исправить и/или создать. Мягкое решение также может предоставить пользователю более широкий выбор вариантов. SPI , I²C , USB, последовательный порт и любое аппаратное решение, если таковое имеется. Мягкое решение в некоторых случаях пользователь может заменить загрузчик на свой по своим причинам.

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

Я вижу, что с ARM Cortex-M и SWD все меняется; некоторые чипы только SWD, и никакие другие из заводского варианта. Я только что получил Atmel SAM D21 ; у них больше нет загрузчика SAM-BA , и они предоставляют исходный код, чтобы вы могли добавить свой собственный в начале пользовательской прошивки, и некоторые регистры, чтобы как бы защитить его, но стереть его тривиально. Так много для этого; вы можете просто сделать свой собственный или использовать SWD.

Посмотрите на мир Arduino/AVR, на любителей. У них есть собственный загрузчик, и это основной интерфейс, поскольку он предоставляется бесплатно. Вы можете получить программиста интернет-провайдера за несколько (или несколько десятков) долларов. Но обратите внимание, что есть ряд других плат AVR, использующих протоколы на основе USB вместо популярных на тот момент загрузчиков. Некоторые из этих USB-протоколов используются разными поставщиками.

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

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

Просто чтобы также дать точку зрения любителя:

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

  • Источник питания
  • беспроводная сеть
  • интернет-соединение
  • Еще один компьютер для написания программного обеспечения

Это делает процесс довольно недорогим и на самом деле довольно простым с точки зрения непрофессионала.