Используете ли вы собственный USB-порт Due (SAM3X8E) для программирования?
Я хотел бы создать свою собственную версию Arduino Due.
На что я не могу найти ответа, так это: Могу ли я запрограммировать пустой SAM3X8E, используя собственный порт USB из Arduino IDE, или мне сначала нужно запрограммировать какой-то загрузчик или что-то подобное?
На моей плате не будет Mega16U2, который обычно используется для программирования.
@gjt211, 👍0
Обсуждение2 ответа
Микрочипам нужен какой-то загрузчик, чтобы их можно было программировать через USB. Платы Arduino поставляются с загруженным загрузчиком по умолчанию (по крайней мере, от компании Arduino, нет необходимости из Китая, возможно, без него, если вы покупаете только чип у производителя), поэтому на официальных платах все сделано для того, чтобы вам было легко работать.
Наладить надлежащую связь через USB — не самая простая задача, и существует множество различных протоколов для отправки программы загрузчику, который затем отвечает за размещение программы во флэш-памяти в нужном месте и последующее управление ею.
Также имейте в виду, что существуют и другие способы, как поместить программу в память, и что не все устройства, использующие какой-либо микроконтроллер, даже предназначены для программирования пользователем через него. (Например, они могут идентифицировать себя как клавиатуры, мыши, джойстики и т. п. для компьютера и быть закрытыми для перепрограммирования производителем такого устройства. Сообщество Arduino — это лишь малая часть отрасли, которая использует одни и те же чипы для совершенно разных задач).
SAM3X8E поставляется с загрузчиком в ПЗУ.
- Воспоминания
- 256–512 Кбайт встроенной флэш-памяти, 128-битный доступ, ускоритель памяти, двойной банк
- 32–100 Кбайт встроенной SRAM с двумя банками
- 16 Кбайт ПЗУ со встроенными процедурами загрузчика (UART, USB) и процедурами IAP
- Контроллер статической памяти (SMC): поддержка SRAM, NOR, NAND. NFC с буфером RAM объемом 4 Кбайт и ECC
Поскольку этот загрузчик делает все, что от него требует Arduino IDE, и имеет свободно доступный кроссплатформенный инструмент командной строки загрузки (bossac
), IDE просто использует его. Не нужно изобретать колесо, когда колесо делает все, что вам нужно, и даже идет с банкой смазки Axel.
Хотя технически возможно использовать свой собственный загрузчик в сочетании с существующим (используйте существующий для установки своего, а затем используйте свой для загрузки эскизов), это требует глубоких знаний как чипа, так и скриптов компоновщика GCC («ld»), чтобы выделить блок памяти для вашего загрузчика и правильно переместить скомпилированный код вокруг него. Слишком много работы, когда уже существующий загрузчик делает то, что вам нужно.
Однако другие чипы либо не имеют загрузчика (например, M0 в Feather), либо не имеют загрузчика, который работает так, как нужно (например, загрузчик DFU в ATMega32U4), поэтому в них используется специальный загрузчик.
Сама IDE довольно глупая. У нее просто есть файл конфигурации, в котором написано «Выполнить эту команду с этими параметрами для загрузки HEX-файла». Она не знает и не заботится о том, какой загрузчик на другом конце соединения, и как он работает. Пока есть исполняемый файл командной строки для выполнения работы, она просто передает ему эту работу.
- Можем ли мы записать загрузчик Arduino в любой чип микроконтроллера?
- Самодельный Arduino с использованием ATMEGA328P, ISP или ICSP?
- Использование выводов ICSP в качестве SPI в Arduino Due
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
- Как записать загрузчик?
- Arduino Due vs Mega 2560
- Не удается снова загрузиться после смены платы
- Разница в загрузчике Arduino Nano ATmega328P
Независимо от ответа на этот вопрос, было бы крайне неразумно проектировать плату серии ARM Cortex-M, которая не сделала бы выводы SWD доступными хотя бы на крошечных тестовых площадках; они просто слишком полезны на ранних этапах разработки и являются ключом к отладке точек останова с аппаратной поддержкой (особенно если ваша плата когда-либо будет использоваться для целей, не связанных с Arduino). Около 4 сквозных отверстий размером с переходную щель позволят вам зацепить их с помощью провода для накрутки или чего-то подобного., @Chris Stratton
Я решил пойти по пути SAMD21 и установил на своей плате разъем SWD. Я использую свой Segger, чтобы поместить загрузчик Arduino в чип, и все готово., @gjt211