Используете ли вы собственный 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-файла». Она не знает и не заботится о том, какой загрузчик на другом конце соединения, и как он работает. Пока есть исполняемый файл командной строки для выполнения работы, она просто передает ему эту работу.
Привет @Majenko, я не уверен, что это полностью отвечает на вопрос. Совместим ли этот загрузчик с Arduino IDE?, @gjt211
@gjt211 Это загрузчик "bossac", который использует Due. Вопрос "совместим ли он с IDE" не имеет смысла. В IDE нет концепции загрузчиков, есть только файлы конфигурации, которые указывают исполняемые файлы для запуска, чтобы установить скомпилированный файл в целевой объект. Если есть двоичный файл, который вы можете выполнить для взаимодействия с загрузчиком, вы можете заставить IDE запустить этот исполняемый файл. Независимо от этого: это то, что использует Due, так что "да"., @Majenko
Может быть, для вас это бессмысленно, но для тысяч (миллионов) пользователей Arduino, у которых очень мало опыта, этот вопрос имеет большой смысл. Для тех пользователей (включая меня), которые понятия не имеют, что такое bossac, или файлы конфигурации, которые определяют исполняемые файлы, не говоря уже о том, где они находятся или как их получить, куда их положить, если мы все это проработали. Все, что мы знаем, выбрать последовательный порт, затем нажать «загрузить»., @gjt211
@gjt211 Ожидается, что если вы достаточно технически подкованы, чтобы рассмотреть возможность создания собственной платы на базе SAMD, то, по крайней мере, вы понимаете основы спецификации. Без этого базового уровня знаний, что вы делаете, даже рассматривая создание чего-то столь нетривиального, как система на базе DUE? ARM значительно сложнее маленьких чипов AVR. Вы не можете просто влепить один в макетную плату и ожидать, что он заработает., @Majenko
Я ценю ваши комментарии, но я профессиональный инженер-проектировщик оборудования с более чем 25-летним опытом многослойного, высокоскоростного и радиочастотного проектирования. Создание чего-либо с процессором SAMD было бы одним из самых простых проектов, которые я когда-либо делал. Проект предназначен для клиента, он парень Arduino. Он хочет знать, будет ли плата, которую я для него разработал, работать так же, как оригинальный Arduino DUE с точки зрения Arduino IDE., @gjt211
Хорошо, тогда это недостаток знаний Arduino, а не недостаток знаний в области электронного проектирования. Хорошо. Arduino IDE глупая (во многих отношениях). Она просто запускает исполняемые файлы для выполнения задач, включая загрузку через загрузчик. Микросхемы SAMD поставляются с загрузчиком в ПЗУ и свободно распространяемым кроссплатформенным инструментом командной строки bossac
для загрузки в него. Так что IDE просто использует это. Зачем изобретать велосипед, если колесо делает то, что вам нужно? Другие микросхемы на базе ARM (например, M0, используемый в Feather) не имеют загрузчика и требуют его установки., @Majenko
Я конкретизировал свой ответ, показав, как IDE взаимодействует с загрузчиком., @Majenko
Большинство пользователей, которые сюда заходят, имеют определенные знания об Arduino, но почти нулевые знания об электронике. Вы как бы на противоположном конце шкалы, так что, пожалуйста, простите за путаницу., @Majenko
- Можем ли мы записать загрузчик 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