Программирование микроконтроллеров: JTAG, SPI, USB oh my !?

Я заметил, что в отношении микроконтроллеров есть несколько способов их программирования. Я знакомы с USB, так как мой Arduino может быть запрограммирован через USB.

Что такое интерфейс JTAG или SPI?

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

49 голосов | спросил jdiaz 14 62009vEurope/Moscow11bEurope/MoscowSat, 14 Nov 2009 06:51:47 +0300 2009, 06:51:47

5 ответов


39

Микроконтроллеры ATMEGA, подобные тем, которые находятся в ардуине, которые поступают прямо с завода, могут быть запрограммированы только с использованием интерфейса SPI или JTAG.

SPI означает последовательный периферийный интерфейс и способ общения микроконтроллеров друг с другом или с внешним миром. Его иногда называют 3-проводным, потому что он использует три провода для связи. Для программирования чипа вам понадобится специальный программист, который считывает команды с USB для управления линиями SPI для программирования чипа. Популярным кажется, что USBTinyISP от Adafruit . Очень хорошее введение в программирование SPI находится в SparkFun . Наиболее популярными приложениями для программирования чипов Atmel AVR являются avrdude (cmd line), ponyprog (не работает с более новыми программистами), а в некоторых случаях AVR Studio (если ваш программист поддерживает его). Преимущество программирования SPI заключается в том, что вы можете запрограммировать любой чип Atmel прямо с завода, чтобы вам не всегда нужен Arduino в ваших проектах.

Где SPI - это «просто другой» последовательный протокол, JTAG - это протокол, который особенно предназначенный для программирования и отладки микроконтроллеров. Не все поддерживающие Atmel micro поддерживают JTAG, но те, которые используются в Arduino. Протокол JTAG можно использовать для охлаждения таких вещей, как «в эмуляции схемы» и отладки, что означает, что он позволяет вам видеть состояние программы в вашем микроконтроллере, пока оно действительно работает. Для этого вам понадобится специальный программист. Посмотрите мой ответ на другой вопрос .

Для программирования чипа с использованием USB вам сначала нужно запрограммировать его с помощью «загрузчика» с помощью SPI или JTAG. После загрузки с загрузчиком система будет программироваться с любого ПК с помощью USB-последовательного преобразователя. Недостатком является то, что загрузчик занимает некоторое пространство памяти, и этот метод не позволяет вам видеть состояние чипа во время его работы.

ответил bpijls 14 62009vEurope/Moscow11bEurope/MoscowSat, 14 Nov 2009 12:49:23 +0300 2009, 12:49:23
27

Хотя я хотел бы погрузиться в различные доступные методы программирования, у кого-то еще есть. Ниже приведено Dean Camera учебное пособие по AVRFreaks, Методы программирования AVR :

  

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

     

МЕТОД 1: В системном программировании (ISP)

     

Поддерживается: Подавляющее большинство AVR (см. ниже) - Поддерживаемые программисты: AVRISP MKI /II, JTAG MKII, STK500, STK600,   Dragon, AVRISP, AVR910, AVRONE

     

В системе   Программирование, пожалуй, наиболее распространенное   метод программирования вспышки,   EEPROM, предохранители и шлюзы   целая линия AVR. Интернет-провайдер может программировать AVR   при очень высоких тактовых частотах   (при условии, что целевой AVR работает на   высокая частота и программист   поддерживает его) и является методом   выбор для почти всех любителей AVR.   Существует много, много AVRISP-клонов и   Программисты AVR910 на рынке в   дополнение к простому себе   ключи, которые подключаются к вашему   параллельный порт компьютера.

     

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

     

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

     

МЕТОД 2: JTAG

     

Поддерживается: См. справку AVRStudio Tools для поддержки устройств MKI и MKII
Поддерживаемые программисты: JTAG-ICE, JTAG-ICE MKII, Dragon, JTAG-ICE   клоны, AVRONE, STK600 (только для программирования)

     

Технически JTAG - это   система отладки, а не программирование   метод. Тем не менее, интерфейс JTAG   позволяет программировать AVR   который его поддерживает.

     

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

     

Официальные подразделения JTAG-ICE от ATMEL   были заменены JTAG-ICE   MKII, который поддерживает более новые и   более широко поддерживается в AVR   протокол отладки DebugWire как   а также программирование через метод ISP   (см. выше).

     

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

     

МЕТОД 3: DebugWire

     

Поддерживается: Много меньших AVRs Поддерживаемые программисты: JTAG-ICE MKII, Dragon, AVRONE

     

Снова DebugWire   является отладкой, а не   программирования, но может быть использован   загружать в программы в поддерживаемые   AVRs. Интерфейс dW использует один   Вывод AVR (линия /RESET) для всех   коммуникации, что делает его идеальным для   устройства AVR с низким выводом.

     

МЕТОД 4: загрузчик

     

Поддерживается: Большинство новых AVRs Поддерживаемые программисты: N /A

     

Снова технически не метод программирования.   Загрузочный загрузчик - небольшая программа AVR   который находится в настраиваемом пользователем зарезервированном   раздел регулярной вспышки.   Загрузочные устройства используют вспышку   доступны функции самомодификации   в новых AVR, чтобы позволить AVR   сама программа через загруженные программные данные   от внешнего источника. Загрузчики   могут передавать свои данные из любого   местоположение (например, внешний флеш-память или SD   карты), однако, безусловно, наиболее распространенные   тип загрузчика связывается с   ПК через RS-232 (последовательный) порт AVR.

     

Загрузчики ограничены тем, что они   потребляют флэш-пространство (ограничение   размер вспышки, доступной для   AVR), и они не могут   для замены плавких предохранителей AVR.

     

Загрузочные загрузчики широко доступны на   Интернет для скачивания, но они   страдают от "курицы и яйца"   проблема; вам нужен другой тип   программист, указанный здесь для   загрузчик в первую очередь.   Обычно это решается   построение простого параллельного порта   ключ (см. раздел ISP) или   покупка AVR уже предварительно загружена   с загрузчиком (например, AVRButterfly   доска).

     

МЕТОД 5: Параллельное программирование с высоким напряжением(HVPP)

     

Поддерживается: Большинство не-TINY AVR (с исключениями)
Поддерживаемые программисты: STK500, STK600, Dragon, Homebrew Dongles,   AVRONE

     

Высоковольтное параллельное   Программирование - это метод программирования   который редко используется, из-за   это требует установки. Несмотря   это, программирование HVPP обычно   используется для «воскрешения» AVR, чьи   плавкие предохранители были настроены неправильно   другой метод программирования.

     

И STK500, и Dragon   поддерживает HVPP. Во время HVPP   вывод цели /сброса повышается до   необычно высокое значение 12V, которое   включает внутреннюю параллель   программирование. Контакт /сброс   является единственным выводом AVR (на HVPP   поддерживаемые AVR), которые могут быть безопасно   подняты до этого уровня.

     

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

     

МЕТОД 6: Последовательное программирование высокого напряжения (HVSP)

     

Поддерживается: Множество TINY AVR (с исключениями)
Поддерживаемые программисты: STK500, STK600, Dragon, Homebrew Dongles,   AVRONE

     

HVSP похож на HVPP,   кроме передачи данных   а не параллельно. Эта   является альтернативным способом программирования   используется во многих AVR серии TINY, которые не имеют   достаточно контактов для HVPP.

     

МЕТОД 7: PDI

     

Поддерживается: AVRs XMEGA Поддерживаемые программисты: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII

     

PDI - это новый программный интерфейс   основанный на протоколе debugWire, для   XMEGA линии AVR. Это не   в настоящее время используется на любом другом 8-битном AVR   микроконтроллеры.

     

МЕТОД 8: TPI

     

Поддерживается: 6-контактный TINY AVR (ATTINY10 и т. д.)
Поддерживаемые программисты: STK600, Dragon, AVRISP MKII

     

TPI - очень   крошечный программный интерфейс для   более новая линия TINY AVR с ограниченными возможностями   контактов, как 6-контактный ATTINY10. подобно   dW, TPI использует линию /RESET устройства   как часть сообщения   интерфейс, но есть сходство   заканчивается. Поскольку пинты размером TINY AVR   отсутствует встроенная схема отладки,   Протокол TPI использует новое программирование   интерфейс трех контактов в   полудуплексный протокол. Поскольку   /RESET необходимо увеличить до + 12 В   для программирования, когда устройство   Установлен вывод RSTDSB, в настоящее время   поддерживается только новым STK600   панель программирования.

     

Раздел вопросов по бонусам!

     
  1. Каков наилучший метод?
      Нет универсального «лучшего» метода. ISP   программирование прост и чрезвычайно   но все вышеперечисленные методы   будет работать. Два высокого напряжения   режима программирования (в зависимости от того, что   применимые к вашему устройству) являются   большинство функциональных возможностей, поскольку они позволяют   ремонт AVR, который имел   предохранители неправильно сконфигурированы. Однако эти   методы - это боль, которую нужно настроить, следовательно   причина, по которой большинство пользователей   ISP.

  2.   
  3. Я сделал параллельный портальный ключ. Могу ли я использовать его с AVRStudio?
      я   Не боюсь. AVRStudio не может взаимодействовать   с любыми «тупыми» ключами - это требует   умное устройство программирования -   содержащий сам микроконтроллер -   расшифровать протокол связи   он отправляет. Простые ключи без   микроконтроллер должен быть «бит-бит»   (т. е. соответствующие сигналы, имитируемые   через ключ через компьютер)   сам.

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

  6.   
  7. Каковы мои параметры, если я хочу, чтобы мой программист работал с AVRStudio?
      Выберите программиста, который использует   Поддерживаемый AVRStudio протокол. Это может   быть простым протоколом «AVR910»   (устаревший) или пользовательский   реализация протокола, используемого   STK500 /AVRISP. Обратите внимание, что эти   программистам требуется микроконтроллер   в них, что привело к улову-22   ситуация. Это можно решить   с AVR программиста   предварительно запрограммированные в момент покупки   с соответствующей прошивкой или   с AVR, предварительно запрограммированным с   Загрузчик.

  8.   
  9. Хорошо, я хочу использовать загрузчик. Как я могу получить его там в первом   место?!
      Использовать загрузчик в   AVR, вам сначала нужно иметь   загрузчик запрограммирован. Если вы это сделаете   не иметь существующего программиста (даже   простого немого ключа хватит для   начальное программирование), вы можете   альтернативно купить AVR   предварительно запрограммированный загрузчиком   нескольких поставщиков.
      Atmel   также выпускает демо-версию Butterfly   плата, чей MEGA169 AVR   предварительно загруженный AVR-Studio   совместимый загрузчик.

  10.   
  11. Помогите! Я перепутал с предохранителями и измотал свой AVR при использовании ISP!   Самая распространенная ошибкаменяется   синхронизация часов с   неверная настройка. Попробуйте положить   внешние часы на выводе AVR XTAL1   и посмотреть, поможет ли это.
      В противном случае, если возможно, используйте один из   высоковольтные методы. Они будут   исправить любую неправильную конфигурацию, включая   с использованием источника синхронизации в качестве   высоковольтные методы обеспечивают   часы для AVR для программирования.

  12.   
  13. Как мне взаимодействовать с моим программистом?
      Какое программное обеспечение вы используете   для взаимодействия с вашим программистом   зависит от типа программиста, которого вы   используют.
      Простой "тупой"   dongles требуют стороннего программного обеспечения,   таких как PonyProg или AVRDude. Они могут   быть командной строкой или инструментами графического интерфейса - смотреть   в Интернете, и вы будете хорошо   один, чтобы соответствовать вашим потребностям.
      Программисты и загрузчики, основанные на   протокол AVR910 может использоваться в   AVRStudio. В меню «Сервис» выберите   опция «AVRProg» для открытия графического интерфейса пользователя   экрана для взаимодействия с вашим   программист. В качестве альтернативы третий   сторонние инструменты, такие как AVRDude, также   AVR910 совместимый.
      официальный   инструменты тесно интегрированы в   AVRStudio, особенно в случае   варианты отладки   (JTAG /Дракон /и т.д.). Из AVRStudio   Меню «Инструменты», выберите «Программа   AVR ... "и нажмите   «Подключить». Из нового окна,   выберите инструмент и его соединение   интерфейс и нажмите «ОК».   В виде   в случае с немыми ключами и   Программисты AVR910, официальные инструменты   может также использоваться с третьей стороной   программное обеспечение для программирования.

  14.   

(C) Дин Камера, 2009. Все права   зарезервированный. Не для воспроизведения на любом   сайт, отличный от AVRFreaks.net   без предварительного явного   разрешение.

Воспроизводится с предварительным явным разрешением, конечно!

ответил tyblu 29 WedEurope/Moscow2010-12-29T13:57:32+03:00Europe/Moscow12bEurope/MoscowWed, 29 Dec 2010 13:57:32 +0300 2010, 13:57:32
5

Я хотел бы добавить еще одну вещь к обсуждению.

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

I2C является основным конкурентом для интерфейса, поскольку он использует только 2-проводные провода, независимо от количества чипов, в то время как SPI требует другого провода для интерфейса, но медленнее.

При обучении я считаю, что обучение интерфейсам является одной из наиболее важных задач.

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

ответил tyblu 29 WedEurope/Moscow2010-12-29T13:57:32+03:00Europe/Moscow12bEurope/MoscowWed, 29 Dec 2010 13:57:32 +0300 2010, 13:57:32
3

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

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

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

ответил JohnC 14 62009vEurope/Moscow11bEurope/MoscowSat, 14 Nov 2009 12:36:52 +0300 2009, 12:36:52
2

Как вы упоминаете серийный номер, используются spi (2-проводная, 3-проводная?), usb, jtag, swd и т. д.

Да есть плюсы и минусы. Например, Jtag для всех случаев, которые я знаю о встроенных в аппаратное обеспечение, первоначально и в основном используется для чего-то другого, кроме отладки процессора, но они также используют его для этого. если jtag доступен, это, как правило, лучший интерфейс по этой причине, но есть исключения. Например, если булавки не предназначены для jtag, у вас может быть ошибка в коде и /или намеренно использовать один из этих контактов для чего-то другого, что делает невозможным доступ к чипу с помощью jtag (если он загружает программное обеспечение во flash, что переворачивает эти контакты). Другим исключением является то, что ядро ​​процессора можно повредить ошибкой в ​​программном обеспечении во флэш-памяти, а зависающее ядро ​​не отлаживается через jtag. Я бы назвал это ошибкой в ​​аппаратном дизайне, но недавно рассмотрел это в коммерческой части.

На AVR, например, PDI, который, я думаю, люди могут вызвать spi здесь, возможно, нет. по крайней мере, на xmega, что pdi и внешний jtag подаются в общий интерфейс pdi внутри. Таким образом, контакты pdi дают вам прямой доступ к этому, а не накладные расходы jtag. пока этот интерфейс работает, когда программное обеспечение во флэш-памяти повесило ядро, тогда это будет идеальным интерфейсом для этого семейства. Протокол опубликован и относительно прост и встроен в аппаратное обеспечение. у него есть недостаток двунаправленной шины данных, например i2c.

У оружия есть jtag с меньшим количеством проводов, называемых swd, которые они не обязательно хотят публично опубликовать. инструменты open source реализуют его, хотя. это в теории последовательный jtag, различные сигналы jtag отправляются последовательно на один провод каким-то образом, а не параллельно на многих проводах. внутри части я предполагаю, что она снова распараллеливается и подает нормальную логику jtag. У этого недостатка есть ARM, желающий сохранить его полусекретным, а отладчики ARMs jtag - королевская боль, чтобы использовать в любом случае. Так что это большая работа. Если /когда openocd начинает работать, это может быть другая история. Вы также должны по-прежнему беспокоиться о перевернутых штырях и о том, что происходит с висящим ядром.

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

Инструменты Jtag используются, чтобы стоить тысячи долларов, теперь их нет, примерно за 15 долларов вы можете получить плей-офф ftdi и перепрофилировать его с помощью openocd. За 50 долларов плюс или минус некоторые вы можете получить решение usb на основе ftdi, которое работает из коробки с openocd. Вы можете получить некоммерческое j-link за $ 75- $ 80. И тогда есть многотысячные доллары, которые быстры, конечно, но не стоят денег вообще. Вы покупаете их, когда вы являетесь крупной корпорацией с большим количеством наличных денег и хотите заплатить за поддержку. Когда вы платите эти цены, вы получаете нужный вам продукт, и сразу получаете ответы на вопросы технической поддержки. Например, бесплатный linux vs windows или RHEL, поддержка linux бесплатна, но вы получаете то, что получаете. В любом случае, это делает jtag более привлекательным, будучи самым мощным решением в целом, я советую получать эти инструменты, когда и где вы можете (где это возможно).

Вы должны иметь в своих инструментах jgag для арсенала отладки и разработки, когда и где это возможно. sparkfun использует usb на основе usb для последовательных плат, а части ftdi могут быть перегруппированы в большие байкеры, вы можете использовать их для spi или i2c или pdi или jtag или других интерфейсов. В идеале вы получаете платы, которые создаются для интересующего вас автобуса /части и использования бесплатного программного обеспечения с открытым исходным кодом, которое с ним связано. Кроме того, использование этих последовательных плат, в идеале имеющее питание 3,3 В и 5 В (около 15 долларов США каждый, который вы используете для lillypads и arduino minis и т. Д.) Для подключения к последовательным портам для различных микрофонов, которые имеют своего рода последовательный протокол. Мне легче написать собственный загрузчик на основе этих протоколов, например, таких как arduino /avr, где источник загрузчика опубликован и является значительным подмножеством от предполагаемого стандарта, который они поддерживают. YMMV.

Короче говоря, нет ни одного хорошего решения, все они имеют за и против. Будьте готовы поддержать хотя бы два из них. usb и serial или usb и jtag или jtag, а также серийный номер и т. д. Просто сложите прокладки или штыревые отверстия наи не обязательно заполнять. Для вашего личного или лабораторного развития есть полный набор инструментов и быть готовым переключиться с одного на другой, поскольку вы кирпичные чипы и должны восстанавливать доски или при разработке собственного загрузчика, прошивки usb и т. Д.

ответил old_timer 17 Jam1000000amTue, 17 Jan 2012 00:13:27 +040012 2012, 00:13:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132