Макетная плата N76E003 и ее программирование

  Обзор и схема неофициальной макетной платы для тестирования/разработки микроконтроллера N76E003. По системе команд этот микроконтроллер относится к семейству MCS-51. Контроллер однотактный (1Т) в отличии от 12-тактного прародителя (i8051, 12T), кол-во тактов исполнения команды равно числу байт этой команды.




  В плате 40 мм x 30 мм ничего неожиданного нет, все на виду и аккуратно, однако наличие принципиальной схемы рядом с платой является большим преимуществом. На плате есть два боковых разъема, на которые выведены все контакты GPIO а также шины питания. Напротив USB-порта есть еще два разьема. Один предназначен для подключения интерфейса программирования-отладки Nu-Link (SWD), на второй выведен интерфейс последовательного порта из микроконтроллера. Последовательный порт полезен для быстрой отладки/тестирования программ с помощью терминальной программы. Если вы используете Keil, интерфейс последовательного порта может пригодиться для ISD51 (Internal System Debuger).
  Наличие USB-порта поначалу может сбивать с толку, т.е. предполагать наличие в микроконтроллере USB-интерфейса. К сожалению такого интерфейса в контроллере N76E003 нет, порт используется только для питания макетной платы. В схеме питания также задействованы дополнительный стабилизатор 3,3V и переключатель напряжения 5V <-> 3,3V, оба эти напряжения доступны на разьеме интерфейса последовательного порта. Этот же разьем можно использовать для подачи внешнего напряжения питания 5V если USB не используется. Светодиод сигнализирует о наличии питающего напряжения, кнопка служит для сброса микроконтроллера.



  По схеме видно отличие от микроконтроллеров семейства MCS-51 в подключении кнопки сброса. Большинство контроллеров MCS-51 сбрасываются высоким уровнем, как и «прародитель» i8051. Контроллер N76E003 сбрасывается низким уровнем, это сделано для «pin-to-pin» совместимости с контроллерами серии STM8S003.
  В таблице ниже приводится фактическое сравнение этих чипов.



Посмотрев на функциональную схему контроллера, видно что экземпляр довольно интересный:



  На момент выпуска программирование надо было производить через фирменный Nu-Link адаптер. Т.к. он обычно совмещен с отладчиком, его стоимость весьма негуманна. На данный момент появилась возможность снизить стоимость програмирования контроллера N76E003, т.к. появилась возможность при программировании воспользоваться сторонними средствами.

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

Защита доступа по времени (TA — Timed Access protection)

  N76E003 имеет несколько функциональных блоков, таких как сторожевой таймер (WDT), обнаружение отключения электропитания (BOD) и др., которые имеют решающее значение для правильной работы системы. Если оставить их управляющие регистры незащищенными, ошибочный код может записать в них неопределенное значение, что приведет к неправильной работе и потере управления. Чтобы это предотвратить N76E003 имеет защитную схему, которая ограничивает доступ для записи к критическим SFR. Эта схема защиты реализована с использованием доступа по времени (TA).
  Регистр этой защиты так и называется TA и контролирует доступ к защищенным SFR. Чтобы получить доступ к защищенным регистрам, пользователь должен сначала записать в TA 0xAA, а затем сразу же следующей командой записать в ТА 0x55. После этих двух шагов открывается окно разрешения записи, и в течение 4 тактовых циклов пользователь может записывать в защищенные SFR. Читать регистр SFR, защищенный TA, можно не передавая 0xAA и 0x55 в регистр. Код для открытия окна временного доступа и записи в защищенный регистр показан ниже:

  (CLR EA) ; если какое-либо прерывание разрешено, временно отключить
   MOV TA, #0AAH
   MOV TA, #55H
  (Инструкция, записывающая регистр, защищенный TA)
  (SETB EA) ; возобновление прерываний разрешено

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

В даташите производитель заявляет о поддержке контроллером трех типов программирования флеш памяти программ:
  • IAP — In-Application Programming (программирование в приложении)
  • ISP — In-System Programming (программирование в системе)
  • ICP — In-Circuit Programming (программирование в схеме)
Давайте разберемся, что подразумевается под каждым из типов программирования.

Программирование в приложении (IAP)

  По сравнению с выполнением операций из сегмента кода в реальном времени, обновление данных во флеш памяти часто занимает сравнительно много времени. Кроме того, это довольно сложная процедура синхронизации для стирания, программирования или чтения флэш памяти, при которой необходимо строго выдерживать тайминги между операциями. Контроллер N76E003 включает удобный механизм операций перепрограммирования, помогающий пользователю перепрограммировать содержание флэш памяти с помощью программирования в приложении (IAP). IAP — это метод электрического стирания и программирования с помощью программного обеспечения. По сути это отдельный от схемы контроллера микропрограмный автомат с собственной системой команд и отдельным тактированием от генератора HIRC (High-speed internal RC oscillator 16 MHz). Можно сказать, что это расширение команд микроконтроллера для работы с собственной флеш памятью.
  IAP включается путем установки бита IAPEN (CHPCON.0 с защитой TA) и установки бита включения в регистре IAPUEN (IAP update enable). IAPUEN содержит 3 бита включения — CFUEN, LDUEN, APUEN, соответственно IAP будет работать с CONFIG, LDROM или APROM. Чтобы передать команду, необходимо в регистры IAPAH и IAPAL поместить целевой адрес байта флеш, в регистр IAPFD данные и в регистр IAPCN код команды. После этого IAP готов к запуску и ждет установки бита запуска IAPGO (IAPTRG.0 с защитой TA). В момент запуска ядро контроллера останавливает счетчик программы и встроенный командоаппарат IAP берет на себя управление внутренним чартжером и детальной синхронизацией сигнала. Время стирания и программирования контролируется командоаппаратом, независимо от рабочего напряжения и частоты контроллера. Номинальное время стирания страницы составляет 5 мс, время записи байта — 23,5 мкс. После завершения действия команды IAP программый счетчик опять запускается и контроллер продолжает выполнять следующие инструкции кода программы, бит IAPGO будет автоматически сброшен. Флаг отказа IAP, IAPFF (CHPCON.6), покажет, была ли предыдущая операция IAP успешной или произошла ошибка.
  Коды команд IAP в разных режимах:



  IAP позволяет удобно обновлять содержимое флеш-памяти, однако программист должен предпринять некоторые предосторожности для того, чтобы IAP работал правильно. Не замечая предупреждений (игнорируя флаг отказа), возможно возникновение неопределенного состояния, что может привести даже к серьезным повреждениям устройств контроллера.
  1. Если операции IAP больше не требуются, программист должен очистить IAPEN (CHPCON.0 с защитой TA), это полностью отключит подсистему IAP. Кроме того, IAP требует, чтобы HIRC работал. Если выбран внешний источник синхронизации, отключение IAP остановит HIRC для экономии энергии.
  2. Когда бит LOCK (CONFIG0.1) активирован, чтение, запись или стирание IAP все еще возможны.
  3. Во время выполнения IAP прерывания, если они включены, должны быть временно отключены путем сброса бита EA.
  4. Не пытайтесь стереть или запрограммировать страницу, на которой в данный момент выполняется код (на которую указывает счетчик команд PC). Это вызовет непредсказуемое поведение и может привести к повреждению данных программы.

Программирование в системе (ISP — Internal System Programming)

  Такое программирование возможно через помещенный в область LDROM загрузчик, который позволит выполнить обновление флэш памяти без извлечения микроконтроллера из системы. Это позволяет перепрограммировать устройство под управлением программного обеспечения. Обычно ISP осуществляется посредством связи между ПК и MCU через последовательный порт. Загрузочный код в LDROM получает прошивку и перепрограммирует APROM в код пользователя через IAP команды. Nuvoton предоставляет образец прошивки загрузчика и приложение для ПК для N76E003. В даташите приведен простой демонстрационный пример кода ISP. Нестандартные ISP загрузчики могут реализовать обмен по шинам SPI или I2C.

Здесь уместно рассмотреть особенности устройства памяти программ микроконтроллера N76E003.
  Архитектура памяти программ у микроконтроллера N75E003 разделена на три блока: APROM для кода пользователя, LDROM для кода загрузчика и байты CONFIG(0..4) для аппаратной инициализации. APROM и LDROM блочно организованы одинаково, размер страницы составляет 128 байт, но имеют разный размер. Оба они начинаются с адреса 0х0000 и имеют отдельные таблицы прерываний, выбор блока для выполнения кода определяется битами LDSIZE[2:0] регистра CONFIG1. Кодовый блок с которого начнется выполнение программы (APROM или LDROM) выбирается битом BS регистра CHPCON, доступ к регистрам CONFIG(0..4) поддерживается из обоих блоков кода. Микропрограммный блок управления памятью поддерживает режимы стирания, программирования и чтения. Внешний программатор через этот блок может работать в режимах внутрисхемного (ICP) или внутрисистемного программирования (ISP).
  Для конфигурации памяти программ доступны 5 вариантов:



  По умолчанию с производства все биты LDSIZE установлены в 1, блок основной программной памяти APROM имеет размер 18 Кб, блок загрузчика LDROM отсутствует.

Программирование в схеме (ICE)

  Классическим примером программатора-отладчика от производителя можно считать макетную плату NuTiny-SDK-N76E003 V2.0, которая совмещена с Nu-Link-Me V3.0. Вместе с ICP (внутрисхемное программирование) на основе сигнального интерфейса SWD (Serial Wire Debug), плата отладчика также поддерживает виртуальный СОМ порт для обратной связи. Платы разделены перфорацией, и при необходимости могут использоваться отдельно.



  Для доступа к функции программирования в схеме используется три сигнальных контакта, RST, ICPDA, ICPCK, они в точности совпадают с контактами отладчика RST, OCDDA и OCDCK и часто называются ICE/ICD интерфейсом. RST используется для входа/выхода в режим ICP, ICPDA — ввод/вывод данных, ICPCK — синхронизация данных. Чтобы сделать возможным программирование ICP, доступ к этим контактам, плюс VDD и GND должен оставаться свободным.
  Протокол ICP обмена между программатором и программируемым контроллером фирмой Nuvoton не раскрывается, это затрудняет создание средств прошивки сторонними программистами. Успешные попытки «отреверсить» протокол были предприняты здесь (сайт на китайском).

ICP прошивка N76E003

  Участник нашего форума TTAV134 где-то взял описание этого протокола (может и сам «отреверсил»), и программа-программатор NeoProgrammer начиная с версии 2.2.0.3 поддерживает програмирование микроконтроллеров N76E003.
  Схема соединений программатора на CH341A (на черном текстолите) и описываемой макетной платы приведена ниже. Использована боковая контактная панель программатора.



  В архиве программы NeoProgrammer есть похожая схема подключения, однако там для программирования с программатора подается 3,3V. При этом чип CH341A запитан от 5V (USB) и на контактах программатора напряжение так-же соответствует 5V уровням, поэтому по моему более целесообразно от такого же напряжения запитывать макетную плату. Напряжение питания контроллера при таком подключении берется с программатора, поэтому на время программирования запитывать макетную плату от USB не нужно.



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



  Если вы включили LDROM, после закрытия страницы конфигурирования в окно редактора добавится вторая страница для файла загрузчика.
  • +5
  • 27 февраля 2021, 09:52
  • anakost

Комментарии (10)

RSS свернуть / развернуть
Anakost, спасибо за прекрасную статью. Всё объяснено и приятно читать. Странно только, что нет комментариев, на ютубе все сидят что-ли? Что происходит, не пойму.
0
Все просто. Посещаемость заметно упала, и на то есть причины. Я давно заметил такую тенденцию.
0
А ты, сам не видишь, что твориться в России последние годы!?
0
Cпасибо, действительно хорошая статья. Контроллеры интересны ценой, в районе aTiny, при значительно большей памяти.
0
В каком софте ведется разработка для этих камней?
0
  • avatar
  • Aneg
  • 28 апреля 2021, 17:10
Исторически для меня сложилось что мне роднее Keil, а значит ассемблер А51 и тулчейн для С. Все не доходят руки попробовать Pascal для MCS-51, Турбо51.
0
Пардон, у меня сейчас стоит Keil 5.11.20, но там камня N76E003 нет!!!
0
А вот вы о чем. К Keil есть дополнительный драйвер от Nuvoton.
0
Если работать в Keil, то ULINK2, будет эти камни программировать и дебажить??
0
  • avatar
  • Aneg
  • 29 апреля 2021, 09:46
Может и будет, если сумеет эмулировать через SWD протокол NvLink. Попробуйте и нам расскажите.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.