Usb stc isp что это такое
USB - UART преобразователь на чипе CH340 для программирования микроконтроллеров STC.
Микроконтроллер STC использует для программирования последовательный интерфейс ISP. Это очень удобно, потому что для программирования не нужно никакое специальное оборудование, кроме простого переходника USB - COM TTL (наподобие дешевых, продающихся на AliExpress адаптеров на чипе CH340T). Однако в зависимости от квалификации и опыта пользователя при загрузке программ могут возникать разные проблемы.
При возникновении каких-либо проблем с прошивкой через последовательный порт обычно используют метод последовательной замены отдельных составляющих системы программирования, пока не будет получен положительный результат. Т. е. сначала пробуют заменить программируемый микроконтроллер, затем если ничего не поменялось, то проверяют питание микроконтроллера, сигналы RXD и TXD, пробуют заменить переходник USB - COM TTL, пробуют другой шнур USB, пробуют другой порт USB компьютера и т. п. После того, как после замены проблема исчезла, становится ясна причина ошибки.
Для тестирования рекомендуется использовать следующую стандартную платформу: стандартный последовательный COM-порт (это обычный 9-пиновый разъем папа на задней стенке компьютера), 32-битная Windows XP (64-битная версия может быть недостаточно совместимой), оригинальный чип MAX232 (SP232) и самая простая платка с установленным микроконтроллером STC, на который подано питание.
Примечание: для программируемого устройства, которое использует питание 3.3V, вместо MAX232 нужно применить MAX3232. Имейте в виду, что некоторые облегченные версии Windows XP могут работать неправильно с утилитой программирования STC-ISP, поэтому используйте полные версии Windows.
1. Сначала проверьте минимально необходимые соединения, отсутствие коротких замыканий, висящих проводов и плохих контактов. Специальное замечание: при клике на кнопку "programming" микроконтроллер должен сократить время холодного старта.
2. Проверьте напряжение питания программируемого микроконтроллера STC, оно должно быть стабильным, без помех, не слишком низким и не слишком высоким. Серия F использует напряжение питания 5.0V, серия L 3.3V, серия W использует широкий диапазон напряжений 3.3-5.0V).
3. Попробуйте загрузить прошивку, снизив скорость подключения STC-ISP (baud rate), и настройте минимальную и максимальную скорости на одинаковое значение (например, выберите 4800 bps).
4. Проверьте перемычки выбора загрузки (last download option), обычно это выводы P1.0/P1.1 (для серии 15F это выводы P3.2/P3.3).
5. Проверьте, что в последний раз в STC-ISP не была выбрана опция загрузки с расчетом на внешний кварцевый резонатор. Если это было сделано, но кварцевый резонатор не подключен, то схема не будет работать.
6. Проверьте, не влияют ли внешние цепи на сигналы загрузки. Например последовательный порт RS485 может пересекаться сигналами с другими схемами.
7. Проверьте правильность установки задержки загрузки в STC-ISP (download delay), рекомендуется выбрать "use a longer power-on reset delay".
8. Проверьте работу схемы преобразователя уровней RS232. Например, система с питанием 3.3V требует конвертера MAX3232, пожалуйста используйте для этого качественные чипы. Самодельные схемы преобразователя уровней, например [4], могут работать нестабильно. Если Вы используете переходничок USB - COM TTL на чипе наподобие CH340T, то преобразователь уровней RS232 не нужен.
9. Если Вы используете кабель с переходником USB - COM TTL, то убедитесь в его качестве. Рекомендуется использовать переходник на чипе CH340T, с возможностью переключения уровней TTL 3.3V/5V. Чипы PL2302 могут быть контрафактными, или для него может понадобится найти правильный драйвер, так как последняя версия драйвера может работать не лучшим образом.
10. Иногда через кабель USB и сигналы RxD/TxD на микроконтроллер подается паразитное питание, не позволяющее полностью его выключить (это требуется для правильного входа в режим загрузки). В этом случае попробуйте последовательно с сигналами RxD, TxD подключить по резистору 1 кОм, чтобы гарантировать полное выключение SCM и выполнение холодного старта. Имейте в виду, что если будет выключено питание не у микроконтроллера STC, а у чипа USB, то подключение к последовательному виртуальному COM-порту USB будет потеряно, что потребует повторного подключения кабеля USB с перезапуском утилиты.
11. Для чипов STC15F104E/204E старого выпуска (до даты 18.10.2010) используйте STC-ISP V1.06, последующие версии чипов рекомендуется использовать с STC-ISP V6.53 и более высокой версии. STCISP V4.83/V4.88 рекомендуется использовать только для ранних оценочных плат. Т. е. если ничего не получается, есть смысл поиграться с версией утилиты STC-ISP.
13. В случае, когда подстраиваемая частота STC 15 Series MCU слишком высокая, превышающая номинальное значение (например 40 МГц), может произойти ошибка таймаута. При программировании выберите модель чипа с самой высокой регулируемой тактовой частотой 25 МГц и 35 МГц, и т. д. Не применяйте в своих устройствах чрезмерно повышенную частоту (overclocking).
14. Чип может быть поврежден, или он может быть бракованный. Повреждение чипа может произойти из-за перегрузки по току (overcurrent), перегрузки по напряжению (overvoltage), из-за ошибки потери кода (ISP CODE loss) и по другим разным причинам. В этом случае поможет замена чипа и повторное программирование.
[Устранение типовых проблем с программированием через ISP]
Ниже описаны различные случаи возникновения проблем с программированием микроконтроллеров STC через последовательный интерфейс ISP и способы их устранения.
1. Не работает STC-ISP V4.83 для программирования ATMEL AT89S52. Решение: STC-ISP может использоваться только для программирования STC, для программирования микроконтроллеров других производителей используйте соответствующие программаторы.
3. STC-ISP V4.83 + STC official download board (V3.0). При загрузке STC12C5A60S2 ничего не происходит. Решение: пользователь ошибочно установил перемычку переключения питания в положение 3.3V, в результате чего на микроконтроллер подавалось недостаточное для загрузки напряжение питания. После переустановки перемычки в положение 5V загрузка прошла успешно.
4. Некоторые пользователи STC12C5A60S2 смогли записать программу однократно, и повторные попытки перепрограммировать чип заканчивались неудачей. Решение: минимальная пользовательская система не использовала кварцевый резонатор для тактирования, но в утилите STC-ISP при программировании была выбрана опция "использовать при следующем включении питания кварцевый резонатор" (next time you use an external crystal). Из-за этой ошибки микроконтроллер не мог получать тактирование, и поэтому не только программа не работала, но и невозможно было перепрограммировать микроконтроллер. Чтобы решить проблему, подключите кварцевый резонатор (или подайте частоту тактов от внешнего генератора) к ошибочно сконфигурированному микроконтроллеру, после чего его снова можно будет перепрограммировать.
5. Такой же случай, STC12C5A60S2 программируются однократно. Это выглядит так, как будто чипы OTP, либо их память FLASH некачественная. Решение: при загрузке в утилите STC-ISP выберите опцию "next cold start P1.0/P1.1 0/0 before downloading" (при следующем холодном старте загрузке проверять P1.0/P1.1 перед загрузкой кода), но не подтягивайте к лог. 0 эти выводы. Замечание: аккуратно выбирайте в утилите STC-ISP опции загрузки, нужно понимать назначение каждого параметра, чтобы сделать правильный выбор.
7. STC12C5A32S2 на некоторых 51-платах разработки загружаются нестабильно. Для надежной загрузки приходится выбирать очень низкую скорость работы последовательного порта. Иногда снижение скорости приводит к невозможности загрузки, утилита сообщает о невозможности найти микроконтроллер (unable to find microcontroller), хотя последняя записанная в микроконтроллер программа автоматически успешно запускается. Решение: SCM может работать в самой минимальной системе без всяких проблем. Проведите исследования методом замены, и найдите конфигурацию оборудования, при которой загрузка проходит успешно. Чаще всего проблема заключается в некачественной работе, преобразователя уровня сигналов RS232. Старые чипы MAX232 (в корпусе DIP, иногда устанавливаемые в сокет) могут работать некачественно, замените их на SP3232. Еще одна причина - слишком маленькие конденсаторы в схеме чипа MAX232, что приводит к подобным отказам. Рекомендуется использовать оригинальные, официальные платы разработки от STC в качестве оценки минимальной рабочей системной платформы, а также качественные переходники USB - COM TTL для организации связи с портом UART микроконтроллера в целях его программирования.
8. Стандартная плата разработки STC с микроконтроллером IAP15F2K61S2 не отвечала на попытки программирования. Решение: при проверке оказалось, что допущена глупая ошибка - перепутаны между собой сигналы RXD, TXD (P3.0/P3.1). После исправления соединений загрузка прошла успешно.
9. Пользователь STC15F104E успешно их программировал до определенного момента, пока не появилась новая партия чипов. После этого скорость загрузки резко упала. Решение: исследования показали, что параметры чипов оставались в пределах допустимых по даташиту, но некоторые отличия требовали изменения опций загрузки (Download Options) утилиты STC-ISP. После выбора в "Download Options" галочки "to use a longer power-on reset delay" загрузка начала работать нормально.
11. После программирования STC12C5A60S2 он перестал отвечать на попытки перепрограммирования, однако если загрузить в STC12C5A60S2 простой легкий тест, то перепрограммирование работает. Решение: причина проблемы была в том, что пользователь применял для прошивки программатор SP300 стороннего производителя вместо загрузки с помощью утилиты STC-ISP. После исследования оказалось, что программатор стирал STC chip ISPCODE (уничтожался из памяти код загрузчика), в результате чего становилась невозможной загрузка через порт UART. Совет: используйте для прошивки микроконтроллера STC стандартное решение на основе утилиты STCISP, не рекомендуется использовать другие программаторы.
12. STC12C5A08S2 не загружается. Решение: исследование показало, что пользователь в утилите STC-ISP выбрал вариант "next cold start using an external crystal" (следующий холодный старт будет использовать кварц), но реальное рабочее окружение использовало сокет для кварца, неаккуратно смонтированный на печатной плате. В результате кварцевый генератор не работал. После перепайки сокета проблема исчезла.
13. Плата собственного изготовления с минимальной конфигурацией (без кварца) на микроконтроллере STC89C52RD+ не давала выполнить загрузку кода. Решение: после проверки оказалось, что используется маломощный, нестабильный источник питания с некачественной фильтрацией. Замена источника питания на источник большей мощности устранила проблему.
14. Загрузка IAP15F2K61S2 останавливается на стадии "are adjusting Frequency". Решение: пользователь применял чип IAP15F2K61S2-25I-PDIP40, максимальная рабочая частота у которого 25 МГц, однако вручную была установлена рабочая частота 40 МГц (OC). Чтобы добиться стабильной работы, используйте номинальную рабочую частоту тактов меньше максимально допустимой.
15. У чипа IAP15F2K61S2 (2013, Package C edition) при загрузке была установлена частота 15 МГц, однако реальная частота оказалась 14.2 МГц (смещение около 10%!). Решение: после консультации с производителем выяснилось, что корректировать ошибку частоты можно только в пределах 0.3%, и некоторые обычно не используемые тактовые частоты могут давать большую погрешность установки частоты. Для нормальной работы используйте общие ряды частот.
16. IAP15F2K61S2 загружается, если тактовая частота превышает 30 МГц, но в будущем при загрузке могут происходить отказы - зависание при отсутствии ответа на стадии "frequency regulation". На следующий день загрузка может нормально пройти на обычной тактовой частоте (меньше 30 МГц). Решение: поздние модели SCM изменили принцип загрузки (positive "BATEA" words) на более стабильный. Семплы версии A, поступившие в продажу, могли работать нестабильно. В последующих семплах версий B, C ошибка была скорректирована.
17. Пользователю нужно запрограммировать чип STC15F104E, но в утилите STC-ISP выпадающее меню SCM Model с кнопкой "Open file" серое, модель зафиксирована на "IAP15F2K61S2", и невозможно прочитать программируемый HEX-файл. Это происходит на некоторых компьютерах, на которых работают Windows XP и Windows 7. Решение: после консультации с клиентом выяснилось, что он использует STC-ISP V6.31 (номер версии отображается в левом верхнем углу окна утилиты). Фактически это специальный релиз утилиты, жестко скомпилированный на "IAP15F2K61S2", со встроенным HEX-кодом. Причина в том, что это была ошибочно выпущенная версия. Переход на STC-ISP последней версии (на тот момент это была V6.57) позволил решить проблему.
20. Плата разработки позволяет загрузить код в STC89C52RC, но при переключении на IAP15F2K61S2 загрузка невозможна. Решение: после проверки оказалось, что использовался не стабильно работающий кабель USB. Замена на качественный кабель с чипом FT232 и загрузкой последних драйверов позволило решить проблему. Примечание: из-за того, что требования к интервалам времени сигналов последовательного порта со стороны STC-ISP очень жесткие, некоторые дешевые кабели USB-serial не удовлетворяют этим требованиям, что приводит к отказам при загрузке.
21. В чип STC15F204EA (корпус SKDIP28) не получается загрузить код (чип не отвечает). Решение: причина была в том, что использовался чип ранней версии (18.10.2010) для загрузки которого нужна утилита STC-ISP V1.06. Скачайте её с официального сайта [2]. Примечание: со старыми и новыми версиями кристаллов могут быть несовместимости с версией STC-ISP, поэтому нужно уделять специальное внимание для применения корректной версии STC-ISP.
24. Пользователи последовательного порта Bluetooth испытывают проблемы с загрузкой кода в STC12C5A60S2. Решение: причина проблем в том, что утилита STC-ISP требует динамического изменения параметров последовательного порта, что не поддерживается модулем последовательного порта Bluetooth. Используйте стандартные решения последовательного порта для загрузки.
25. Пользователи Linux не могут загрузить код в STC12C5630AD. Решение: в настоящий момент STC пока что для утилиты программирования поддерживают только операционную систему Windows. Вы можете попробовать применить на Linux виртуальную машину Windows XP.
26. При использовании STC-ISP V6.57 не работает загрузка на официальной плате разработчика STC offline download board (V3.0). Решение: STC-ISP V6.XX не поддерживают старые версии плат разработки, используйте STC-ISP V4.83.
27. Не работает загрузка кода в STC12C5630AD (PDIP28). Решение: после проверки оказалось, что используется STC official download download PDIP40 board в качестве стандартной платы, которая не совместима по выводам с PDIP28. Используйте для загрузки другую плату или специальный переходник.
28. При использовании кабеля USB с чипом CP2102 микроконтроллер не отвечает. Решение: проверьте сигналы последовательного порта с помощью осциллографа. Вероятнее всего неправильные интервалы времени или уровни сигналов. Замена кабеля USB на кабель с чипом CH340 приведет к решению проблемы.
В этом уроке мы рассмотрим загрузку прошивки в ардуино через внешние “программаторы”. Давайте вспомним, о чем уже говорили в одном из первых уроков: загрузка прошивки в Arduino возможна двумя способами:
- “Напрямую” во flash память микроконтроллера при помощи ISP (In System Programming) внутрисистемного программатора.
- При помощи загрузчика (bootloader), который живёт в конце Flash памяти МК, принимает программный код по протоколу TTL (UART) и записывает его во Flash память.
ISP программатор
Характеристики
- Чип CP2102 от Silicon Labs
- Скорость обмена данными по UART 300Бит/сек — 1Мбит/сек
- Буфер чтения 576 байт, записи 640 байт
- Поддержка USB 2.0 12Мбит/сек
- Поддержка режима SUSPENDED USB
- Встроенный стабилизатор питания 3.3В 100мА
- EEPROM с конфигурационными параметрами 1024 байт
- Поддерживаемые ОС Windows 8/7/Vista/Server 2003/XP/2000, Windows CE, Mac OS-X/OS-9, Linux, Android
- Возможность настройки параметров платы и драйверов под свои проекты
- Размеры платы 26.5 x 15.6 мм
Типовая схема подключения CP2102
Загрузчик (bootloader)
Загрузчик живёт в самом конце Flash памяти МК и позволяет записывать прошивку, отправляемую через UART. Загрузчик стартует при подаче питания на МК, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки по UART), затем передаёт управление основной программе. И так происходит каждый каждый раз при старте МК.
- Загрузчик позволяет прошивать МК через UART;
- Загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки;
- Загрузчик занимает место во Flash памяти. Стандартный старый для Arduino NANO занимает около 2 кБ, что весьма существенно!
- Именно загрузчик мигает светодиодом на 13 пине при включении, как индикация работы.
Фьюзы (Pro)
Фьюзы (фьюз-биты) являются низкоуровневыми настройками микроконтроллера, которые хранятся в специальном месте в памяти и могут быть изменены только при помощи ISP программатора. Это такие настройки как выбор источника тактирования, размер области памяти под загрузчик, настройка отсечки по напряжению и прочее. Фьюз-биты собраны по 8 штук в байты (т.н. байты конфигурации), как типичный регистр микроконтроллера AVR. Таких байтов может быть несколько, они называются low fuses, high fuses, extended fuses. Для конфигурации байтов рекомендуется использовать калькулятор фьюзов (например, вот такой), в котором просто ставятся галочки на нужных битах, и на выходе получается готовый байт в hex виде. Рассмотрим на примере ATmega328p:
Важный момент: в AVR биты у нас инверсные, то есть 1 это выкл, 0 это вкл. Расставляя галочки в калькуляторе, мы формируем байт, галочка стоит – бит включен, но в результирующем байте включенные биты являются нулями. Об этом стоит задумываться при ручном составлении фьюз-байта, при использовании калькулятора можете об этом даже не вспоминать. Что позволяют настроить биты?
- CKSEL0–CKSEL3 – выбор источника и частоты тактирования (уточняй в даташите на свой МК, какая конфигурация за что отвечает)
- SUT0–SUT1 – задержка старта МК после перезагрузки
- CKOUT – дублирование тактирования на один из пинов (см. в даташите на какой)
- CKDIV8 – делит тактовую частоту на 8
- BOOTRST – если включен, МК запускается с загрузчика
- BOOTSZ0–BOOTSZ1 – задаёт размер сектора загрузчика
- EESAVE – защита EEPROM от стирания во время выполнения полной очистки чипа
- WDTON – если включить, то Watchdog будет принудительно включен без возможности отключения
- SPIEN – опасный бит , при его отключении пропадает возможность прошивки через ISP, и возможность выключить этот бит в том числе*
- DWEN – вкл/выкл отладочный интерфейс DebugWire. На других моделях бывает и JTAG, и его бит – JTAGEN
- RSTDISBL – опасный бит , при его включении можно использовать ногу RST как обычный цифровой пин, но пропадает возможность прошивки через ISP и выключить этот бит как следствие*
- BODLEVEL0–BODLEVEL3 – настройка контроля напряжения (МК сбросится при падении ниже установленного напряжения)
* – прошивка возможна при помощи высоковольтного программатора
Установка драйвера CP210x на Windows
- Скачайте драйвер для вашей операционной системы по ссылкам выше;
- Распакуйте архив;
- Запустите исполнительный файл CP210xVCPInstaller_x64.exe или CP210xVCPInstaller_x86.exe;
- В открывшемся окне нажмите кнопку Next, а после — Finish;
- На этом установка завершена.
Avrdudeprog
- Чтение/запись/очистка flash памяти
- Чтение/запись/очистка eeprom памяти
- Полная очистка чипа
- Калькулятор фьюзов и локбитов (чтение/запись)
Более подробный обзор на avrdudeprog можно посмотреть здесь . Давайте посмотрим на калькулятор фьюзов. Выбираем свой микроконтроллер и программатор (можно добавить другие модели микроконтроллеров и программаторов, читай тут). Переходим во вкладку Fuses, нажимаем прочитать. При успешном чтении увидим текущий набор настроек своего чипа. Можно их поменять и загрузить. Важно! Галку инверсные биты не трогаем! Лок-биты и отключение RST заблокирует микроконтроллер, не трогайте их, если такой цели нет! Можно загружать прошивку или загрузчик из .hex файла, указав путь к ней на первой вкладке в окне Flash. Очень удобная утилита для низкоуровневой работы с МК.
Удаление драйвера для PL2303HX
Для начала отключите преобразователь PL2302HX от компьютера и, если на компьютере установили последнюю версию драйвера, удалите его. Перейдите в Панель управления Start->Control pane->Programs and Feaetures.
Загрузчик (bootloader)
Загрузчик живёт в самом конце Flash памяти МК и позволяет записывать прошивку, отправляемую через UART. Загрузчик стартует при подаче питания на МК, ждёт некоторое время (вдруг кто-то начнёт слать код прошивки по UART), затем передаёт управление основной программе. И так происходит каждый каждый раз при старте МК.
- Загрузчик позволяет прошивать МК через UART;
- Загрузчик замедляет запуск МК, т.к. при каждом запуске ждёт некоторое время для потенциальной загрузки прошивки;
- Загрузчик занимает место во Flash памяти. Стандартный старый для Arduino NANO занимает около 2 кБ, что весьма существенно!
- Именно загрузчик мигает светодиодом на 13 пине при включении, как индикация работы.
Купить CP2102 на AliExpress
Фьюзы
Конфигуратор платы в Arduino IDE устроен следующим образом: каждой плате в Инструменты > Плата соответствует свой набор настроек, включая фьюзы, которые прошиваются вместе с загрузчиком . Некоторые из них:
- Загрузчик (путь к файлу)
- Скорость загрузки (через загрузчик)
- Объем доступной flash и sram памяти
- Весь набор фьюзов и лок-биты
Файл конфигурации называется boards.txt и найти его можно в папке с ядром Arduino: C:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt. Документацию на boards.txt можно почитать здесь. При желании можно вывести нужные фьюзы через калькулятор (читайте выше), изменить их в boards.txt (главное не запутаться, для какой выбранной конфигурации платы делается изменение) и прошить в МК, нажав Инструменты > Записать загрузчик.
- Фьюзы подписаны как low/high/extended fuses, можно вставлять полученное в калькуляторе значение.
- Локбиты работают следующим образом: unlock_bits это локбиты, которые прошьются до записи загрузчика (при нажатии на кнопку Записать загрузчик). А вот после прошивки загрузчика будут автоматически прошиты lock_bits, которые и определят доступ к памяти контроллера во время его работы. Чтобы защитить прошивку от чтения – ставим lock_bits 0x3C.
Такая работа с фьюзами максимально неудобна, но есть и другие варианты:
- Ядро GyverCore для atmega328, в нем мы сделали кучу готовых настроек фьюзов прямо в настройках платы, читайте в уроке про GyverCore. Несколько загрузчиков, включая вариант без загрузчика, выбор источника тактирования и другие настройки в один клик мышкой.
- Программа AVRdudeprog, про нее поговорим ниже
Распиновка модуля
Вывод | Описание |
---|---|
3V3 | Питание 3.3В (выход) |
GND | Земля |
5V | Питание 5В (выход) |
TXD | Передача данных (Transmit Data) |
RXD | Прием данных (Receive Data) |
DTR | Готовность приемника данных (Data Terminal Ready) |
DCD | Наличие несущей (Carrier Detect) |
DSR | Готовность источника данных (Data Set Ready) |
RTS | Запрос на передачу (Request to Send) |
CTS | Готовность передачи (Clear to Send) |
RTS | Запрос на передачу (Request to Send) |
RI | Сигнал вызова (Ring Indicator) |
SUS | Приводится в высокий уровень, когда CP2102/9 входит в режим IDLE. |
!SUS | Приводится в низкий уровень, когда CP2102/9 входит в режим IDLE. |
Похожие записи
Материалы
Установка драйвера для PL2303
Теперь надо установить старый драйвер. Скачайте архив PL2303_Prolific_DriverInstaller_1025.7z, распакуйте из него файл PL2303_Prolific_DriverInstaller_1025.exe. Кликнете мышкой два раза по нему и установите драйвер.
Подключите преобразователь к компьютеру и перейдите в Диспетчер устройств Start->Control pane->Device Manager. Тут мы видим, что наше устройство с желтым знаком и показывает ошибку: Запуск этого устройства невозможен. (Код 10) или This device cannot start. (Code 10).
Для отката драйвера, нажмите правой кнопки мыши на Prolific USB-to-Serial Comm Port и выберите Обновить драйвер/Update device driver.
Нажмите Выполнить поиск драйверов на этом компьютере/Browse my computer for driver software.
Так как уже установлен старый драйвер, просто нажмите на опцию Выбрать драйвер из списка уже установленных драйверов/Let me pick from a list of available drivers on my computer.
Из списка установленных драйверов, выберите драйвер Prolific USB-to-Serial Comm Port Version 3.3.3.114(14-Jan-09) и нажмите кнопку Далее/Next для продолжения.
Windows будут затем установить старый драйвер обратно в систему.
Если драйвер установлен правильно, вы увидите ваше устройство Prolific USB-to-Serial Comm Port без жёлтого знака.
Щелкните два раза по устройству, чтобы подтвердить версию драйвера.
Программатор
Помимо записи прошивки во flash память, программатор позволяет:
- Считывать содержимое Flash памяти (скачать прошивку на компьютер)
- Полностью очищать чип от всех данных и настроек
- Записывать и читать загрузчик
- Считывать/записывать EEPROM память
- Читать и настраивать фьюзы (fuses, fuse-bits) и лок биты.
Программатор – ваш единственный друг при работе с “голым” микроконтроллером, то есть для его низкоуровневой настройки и загрузки прошивки.
Прошивка загрузчика
Из Arduino IDE при помощи ISP программатора мы можем записать другой загрузчик (по факту загрузчик + фьюзы) и загрузить скетч, а также настроить/прошить фьюзы и лок-биты, но не очень удобным способом. Когда мы выбираем плату в Инструменты > Плата и загрузчик в Инструменты > Плата (загрузчик, bootloader), Arduino IDE автоматически делает “активным” нужный загрузчик. Нажимая Инструменты > Записать загрузчик мы прошиваем загрузчик, соответствующий выбранной плате и её настройкам. Также одновременно с загрузчиком прошиваются фьюзы и лок-биты, соответствующие выбранной плате в Arduino IDE. Как и где их поменять, смотрите чуть ниже. Рассмотрим на примере записи загрузчика для atmega328, стоящей на китайской плате Arduino NANO. На данный момент китайцы прошивают в МК старую версию загрузчика, которая называется old bootloader в меню платы. Оригинальные платы идут с более современным загрузчиком, поэтому при работе с китайскими платами нам приходится выбирать old bootloader для загрузки прошивки через бортовой usb порт. Подключим usbasp по схеме выше, выберем его как программатор в Инструменты > Программатор, выберем плату Arduino NANO, загрузчик для atmega328 (первый в списке). Нажмём записать загрузчик. Всё! Теперь плату можно шить через бортовой usb порт, выбирая первый загрузчик. Он кстати легче, быстрее “прошивает” и сама прошивка быстрее “запускается”.
USB-TTL (UART)
Этот способ реализован прямо на платах Arduino при помощи USB-TTL (USB-UART) преобразователя, именно поэтому мы можем подключить плату к компьютеру и загрузить код. USB-TTL позволяет только загрузку данных во flash, остальные возможности (как у ISP программатора) ему недоступны. В то же время он ограничен только возможностями загрузчика, но в этом уроке мы рассматриваем только стандартные. Также USB-TTL мост позволяет микроконтроллеру общаться с компьютером по последовательному соединению (тот самый Serial и монитор com порта). Есть платы без бортового USB-TTL, например Arduino Pro Mini. Для работы с ними нужно купить внешний USB-TTL преобразователь. Также загрузка прошивки через UART возможна и в “голый” микроконтроллер при условии наличия там загрузчика, который запишет принятый код во flash. Про запись загрузчика мы поговорим ниже. UART “загружатор” подключается к пинам RX и TX Ардуино (или микроконтроллера), RX->TX и TX->RX, также обязательно подключается земля GND. Если у прошиваемой платы нет своего питания, то подключается и питание. Загрузчик отрабатывает при запуске МК, поэтому непосредственно перед загрузкой прошивки МК должен быть сброшен (перезагружен), и для этого на платах USB-UART есть вывод DTR (Data Terminal Ready), который подключается к пину RST Reset и собственно выполняет сброс перед перед загрузкой прошивки. На платах Pro Mini есть отдельный пин DTR.
USB-TTL | Arduino |
DTR | DTR |
RX | TX |
TX | RX |
GND | GND |
VCC/5V/3.3V | VCC |
Китайцы выпускают USB-TTL модули в широком ассортименте, но в целом они все одинаковые по своей сути. Ссылка на результат поиска на aliexpress, и ссылка на все USB-TTL в моём любимом магазине WAVGAT. Что использую я? В основном платку на CP2102. Перед заказом модуля обязательно убедитесь в том, что у него есть выход DTR, иначе этот модуль можно будет использовать только для “общения” с контроллером через COM порт. Для работы с таким преобразователем нужно установить драйвер для чипа, на базе которого собран модуль, это может быть CP2102, CH340/341, FT232, PL2303 и другие. Прошивка загружается как обычно: выбираем порт, на котором сидит преобразователь, версию загрузчика и жмём загрузить, всё! Важный момент: на некоторых китайских версиях плат Arduino Pro Mini не распаян пин DTR, т.е. он не идёт на RST и автоматический сброс перед загрузкой прошивки не выполняется. В этом случае сброс нужно производить вручную, кнопкой RST, непосредственно перед загрузкой прошивки… Загрузка прошивки посредством загрузчика (bootloader) возможна с любого UART устройства, даже через Bluetooth. Но об этом мы поговорим в отдельном уроке.
Лок-биты (Pro)
Лок-биты (lock-bits) позволяют управлять доступом к памяти микроконтроллера, что обычно используется для защиты устройства от копирования. Лок-биты собраны опять же в конфигурационный лок-байт, который содержит: BOOTLOCK01, BOOTLOCK02, BOOTLOCK11, BOOTLOCK12, LOCKBIT1, LOCKBIT2 (для ATmega328). Калькулятор лок-битов можно использовать этот. BOOTLOCK биты позволяют запретить самому МК запись (самопрограммирование) во flash память (область программы и область загрузчика)
А вот локбиты LOCKBIT позволяют запретить запись и чтение flash и EEPROM памяти извне, при помощи программатора, т.е. полностью защитить прошивку от скачивания и копирования:
Таким образом включив LOCKBIT1 (лок-байт будет 0x3E) мы запретим внешнюю запись во Flash и EEPROM память, т.е. при помощи ISP программатора, а включив LOCKBIT1 и LOCKBIT2 (лок-байт: 0x3C) полностью заблокируем заодно и чтение данных из памяти микроконтроллера. Повторюсь, всё описанное выше относится к ATmega328p, для других моделей МК читайте в соответствующих даташитах.
Arduino as ISP
Почти любая другая плата Arduino может стать ISP программатором, для этого нужно просто загрузить в неё скетч ArduinoISP:
- Открыть скетч Файл > Примеры > 11. ArduinoISP > ArduinoISP
- Всё! Ваша Arduino теперь стала ISP программатором
- Подключаем к ней другую Arduino или голый чип по схеме ниже
- Выбираем Arduino as ISP в Инструменты > Программатор
- И можем писать загрузчики, фьюзы или загружать прошивку напрямую во Flash
ISP программатор подключается к четырем пинам микроконтроллера, не считая питания: один из пинов передает сброс, остальные – для передачи данных. Чтобы плата-программатор не сбрасывалась при загрузке, на неё нужно:
- Либо поставить поставить конденсатор ёмкостью ~10 мкФ между RST и GND (рекомендуется)
- Либо просто закоротить пины RST и 5V проводом
По использованию других плат Arduino в качестве программатора читай на официальном сайте.
Комментарии 1
Если вам не хочется разбираться с драйверами для разных USB-TTL преобразователей, то просто возьмите оригинальный Arduino USB 2 SERIAL CONVERTER. Для его работы не нужно устанавливать никаких драйверов. Конвертер на чипе PL2303 также способен работать с Ардуино. Этот программатор купить можно для микроконтроллеров, которые поддерживают сигналы уровня TTL.
Преобразователь USB-TTL PL2303 — это небольшой USB модуль, который эмулирует последовательный интерфейс UART (RS-232). То есть подключая этот преобразователь в USB порт компьютера, виртуально создается COM порт.
В октябре года 2012 Фирма Prolific прекратили производство и поддержку микросхем UART PL2303X (Chip Rev A) и PL2303X HX (Chip Rev A), а начала производить микросхем PL2303TA. Но и сейчас, можно купить преобразователь на микросхеме PL2303HX (с поддельным чипом). При использовании ОС Windows 8 или Windows 10, система автоматически устанавливает последнюю версию драйверов, в которой нет поддержки этих чипов, а в диспетчере устройств будет показан желтый знак с кодом ошибки 10 (Запуск этого устройства невозможен. (Код 10) или This device cannot start. (Code 10)).
Видео
Микроконтроллеры фирмы ATMEL успели завоевать широкую популярность. Их программирование перед применением можно выполнить непосредственно в плате готового устройства через несложный ISP кабель, подключаемый к LPT порту персонального компьютера или кабель чуть посложнее, подключаемый к COM порту. Но в настоящее время всё больше материнских плат выпускается без того и другого, а в ноутбуках LPT исчез уже давно, сменившись интерфейсом USB. Впрочем, под этот интерфейс программаторы тоже существуют и доступны.
Для масштаба рядом лежит обычный 5 мм светодиод.
Этот программатор USBASP поддерживает следующие микроконтроллеры:
ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny2313, ATtiny24, ATtiny25, ATtiny26, ATtiny261, ATtiny28, ATtiny44, ATtiny45, ATtiny461, ATtiny84, ATtiny85, ATtiny861
AT90S1200, AT90S2313, AT90S2323, AT90S2343, AT90S4414, T90S4433, AT90S4434, AT90S8515, AT90S8535
ATmega8, ATmega48, ATmega88, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164, ATmega165, ATmega168,ATmega169, ATmega32, ATmega323,ATmega324, ATmega325,
ATmega3250, ATmega329, ATmega64, ATmega640, ATmega644, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega128, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega103, ATmega406, ATmega8515, ATmega8535
AT90CAN32, AT90CAN64, AT90CAN128
AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B
AT90USB1286, AT90USB1287, AT90USB162, AT90USB646, AT90USB647
AT89S51, AT89S52
AT86RF401
Вместе с программатором поставляется 10-жильный летночный кабель с разъёмами.
Питание программатора берется с USB порта компьютера.
На плате программатора имеется место для распайки LDO стабилизатора напряжения на 3,3В, но сам он не распаян.
Программатор поддерживается программой AVRDUDE. Сама программа консольная, но под неё есть графические оболочки. Утилиту avrdude можно найти в папке /hardware/tools/ в дистрибутиве Arduino IDE или скачать в интернете.
Перед началом работы с программатором потребуется скачать драйвер со страницы разработчика.
Также программатор поддерживается средой разработки Arduino.
Для программатора существует прошивка под названием AVR-Doper, превращающая его в STK500-совместимый и воспринимаемый фирменной средой разработки ATMEL AVR Studio, но в силу высокой вариативности китайского железа пользоваться ею можно только на свой страх и риск.
CP2102 — это USB-UART преобразователь (USB to UART Bridge), можно использовать, чтобы программировать Arduino или других Arduino-подобных контроллеров, получать информацию на компьютер со всего, что имеет последовательный интерфейс с TTL логикой. Также можно использовать для отладки одноплатных компьютеров, особенно те, что не имеют видеовыход: NanoPi NEO, Orange Pi Zero, Orange Pi R1 и т.п..
CP2102 может похвастаться наличием дополнительным выводом DTR, который можно напрямую подключить к входу RESET на контроллерах не имеющих USB на плате. После этого при программировании давить кнопку RESET не нужно. Поддержкой производителя, совместимостью с оригинальными драйверами и ПО, в отличие от поддельных FTDI, у которых проблемы с родными драйверами. Дополнительными выводами (отверстиями под контакты) на плате, например, позволяющими уводить USB в энергосберегающий режим. Интересной возможностью менять VID (Идентификатор производителя), PID (Идентификатор продукта) и текст, с которым опознается плата, собирать свой драйвер со требуемыми параметрами, что довольно интересно в коммерческих проектах.
Адаптер представляет из себя плату без корпуса на которой распаян чип CP2102 с небольшой обвязкой.
С одной стороны находиться разъём USB, с другой 6 pin выводов:+3.3v, GND, +5v, TXD (TX), RXD (RX), DTR, на платке имеются монтажные отверстия с функциями DCD, D3R, RTS, CTS, SUS, SUS, R1, RST. Помимо этого на платке есть 3 светодиода, красный – POWER и два для RX и TX мигающих во время приема-передачи данных.
Как убрать загрузчик?
Основные ошибки в логе Arduino IDE
- Проверить и сменить USB порт
- Попытаться переустановить драйвер
- Проверить пайку USB разъема на плате программатора
- Проверить наличие и целостность элементов вблизи usb разъема программатора, кварцевый резонатор
- Возможно программатор криво прошит – при возможности попытаться перепрошить
- Возможно микроконтроллер на плате программатора – брак или же мертв, попытаться заменить и прошить
avrdude: error: program enable: target doesn't answer. Причина – usbasp не видит подключаемый микроконтроллер
- Проверить правильность и целостность соединения с МК
- Попытаться снизить частоту прошивки, джампером или же указав более низкую скорость в среде программирования
- Проверить пайку разъема 10 pin и переходника 10 pin – 6 pin
- Возможно прошиваемый микроконтроллер попался с браком, или же мертв.
Работа в Arduino IDE
Решение проблем
Решение большинства проблем с загрузкой через программатор (независимо от того, что написано в логе ошибки):
- Вытащить и обратно вставить usbasp в usb порт
- Вставить в другой usb порт
- Переустановить драйвер на usbasp
- Проверить качество соединения USBasp с МК
- Перепаять переходник и отмыть флюс
Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):
- USBasp: на плате есть перемычка JP3, которая включает режим низкой скорости загрузки. В новых версиях прошивки для USBasp скорость выбирается автоматически, но китайцы продают старую версию. Как прошить новую – ищите в интернете.
Решение проблем
Для прошивки микроконтроллера, тактирующегося низкой частотой (менее 1 МГц внутренний клок):
- Arduino ISP: нужно изменить частоту загрузки прошивки в скетче Arduino ISP и снова прошить его в ардуино-программатор (см. строку в скетче 45 и ниже);
Драйвер CP2102
Драйвер CP210x может потребоваться вам при подключении к компьютеру устройств с чипом от Silicon Labs CP2102. Такой преобразователь устанавливается на множество устройств. Например на платы NodeMCU, программаторы и некоторые платы Arduino. Без данного драйвера эти устройства при подключении к вашему компьютеру будут определяться как неопознанное устройство.
USBasp
Дешёвые ISP программаторы также есть в ассортименте у китайцев, рекомендую брать USBasp как самый распространенный. Поискать на алиэкспресс, мне нравится версия в корпусе. USBasp имеет не очень удобный выход 10-пин на шлейфе, поэтому рекомендуется купить также переходник 10-пин на 6-пин, который позволяет сразу подключаться к ISP header’у, который есть на большинстве плат Arduino. Внимание! Очень часто встречается брак в виде непропая контактов, поэтому во избежание проблем рекомендуется пропаять переходник и отмыть флюс (зубная щётка + бензин калоша).
Загрузка скетча
В Arduino IDE можно зашить скетч через программатор, для этого надо нажать Скетч > Загрузить через программатор. Это очень удобно в том случае, когда МК используется без загрузчика, или просто голый МК.
Читайте также: