
Ключевая особенность портов Nuvoton – низкое энергопотребление при высокой производительности. В режиме Deep Power Down микроконтроллеры серии MSP430 (производства Nuvoton) потребляют менее 1 мкА, сохраняя при этом возможность пробуждения по прерыванию от UART или I²C. Это критично для устройств с батарейным питанием, таких как датчики IoT или носимые гаджеты.
Для настройки портов используются регистры конфигурации, доступные через шину APB. Например, в микроконтроллере NUC140 регистр UART_FCR управляет буфером FIFO, а UART_LCR задает формат данных (5–8 бит, стоп-биты, проверка четности). Рекомендуется использовать библиотеки Nuvoton, такие как NuMicro SDK, для упрощения инициализации: они содержат готовые функции для настройки скорости, прерываний и DMA.
При работе с SPI важно учитывать ограничения по тактовой частоте. В микросхемах N76E003 максимальная частота SPI достигает 16 МГц, но при использовании длинных линий (>30 см) рекомендуется снижать её до 4–8 МГц для предотвращения искажений сигнала. Для повышения надежности обмена данными по I²C в зашумленных средах Nuvoton предлагает аппаратный фильтр помех с регулируемым временем подавления (регистр I2C_FLT).
Отладка портов связи требует осциллографа или логического анализатора. При проблемах с UART проверяйте соответствие скоростей на обоих концах линии (допустимое отклонение – не более 2%), а для SPI – фазу и полярность тактового сигнала (регистр SPI_CTL). В случае сбоев I²C рекомендуется анализировать сигналы SDA/SCL на предмет «залипания» линий в низком состоянии, что часто вызвано неправильной инициализацией подтягивающих резисторов.
Назначение портов связи в микроконтроллерах Nuvoton

Микроконтроллеры Nuvoton поддерживают разнообразные порты связи, оптимизированные для задач встраиваемых систем. Основные интерфейсы включают UART, SPI, I²C, CAN и USB, каждый из которых решает специфические задачи передачи данных. Например, UART применяется для асинхронной последовательной связи с внешними устройствами, такими как датчики или модули беспроводной передачи, обеспечивая скорость до 1 Мбит/с в сериях M0/M4.
SPI в микроконтроллерах Nuvoton реализован с поддержкой режимов Master/Slave и тактовых частот до 30 МГц (в зависимости от модели). Этот интерфейс критичен для взаимодействия с периферией, требующей высокой скорости обмена: флэш-памятью, дисплеями или АЦП. В сериях NuMicro M23/M25 добавлена аппаратная поддержка DMA для SPI, что снижает нагрузку на ядро при передаче больших объемов данных.
I²C в Nuvoton работает на частотах до 1 МГц (Fast-mode Plus) и поддерживает до 127 устройств на шине. Этот интерфейс незаменим для подключения маломощных датчиков, EEPROM или RTC, где требуется минимизация количества линий. В микроконтроллерах серии M480 реализована аппаратная фильтрация помех на линиях SDA/SCL, что повышает надежность в промышленных условиях.
CAN-интерфейс в Nuvoton соответствует стандарту ISO 11898-1 и поддерживает скорости до 1 Мбит/с. Он используется в автомобильной электронике и системах автоматизации, где необходима устойчивость к помехам и детерминированная передача. В сериях M451/M480 добавлена поддержка CAN FD (Flexible Data-Rate), позволяющая передавать данные со скоростью до 5 Мбит/с в фазе данных.
USB-порты в микроконтроллерах Nuvoton представлены в вариантах Full-Speed (12 Мбит/с) и High-Speed (480 Мбит/с). Например, серия M487 поддерживает USB 2.0 с функциональностью OTG, что позволяет устройству работать как хост или периферия. Для задач, требующих низкого энергопотребления, доступен режим USB Device с поддержкой Suspend/Resume.
Для повышения надежности передачи данных в Nuvoton реализованы аппаратные механизмы: контроль четности в UART, CRC-проверка в SPI и I²C, а также буферизация FIFO (до 16 байт в некоторых моделях). В CAN-контроллере предусмотрены фильтры сообщений и механизм повторной передачи при ошибках. Эти функции снижают необходимость в программной обработке ошибок, освобождая ресурсы процессора.
При выборе порта связи для проекта на базе Nuvoton учитывайте требования к скорости, количеству подключаемых устройств и энергопотреблению. Для высокоскоростных задач (например, обмен с SD-картой) предпочтителен SPI с DMA. Для подключения нескольких маломощных датчиков – I²C. В автомобильных приложениях CAN FD обеспечит необходимую пропускную способность и надежность. Документация Nuvoton содержит примеры кода для инициализации каждого интерфейса, что ускоряет разработку.
Основные типы портов: UART, SPI, I2C и их различия в чипах Nuvoton

Nuvoton интегрирует в свои микроконтроллеры три ключевых типа последовательных интерфейсов: UART, SPI и I2C. Каждый из них оптимизирован под разные сценарии применения, отличаясь скоростью, топологией и аппаратными требованиями. В чипах серии M480, например, UART поддерживает скорости до 10 Мбит/с с аппаратным управлением потоком (RTS/CTS), что критично для высокоскоростной отладки или связи с GSM-модулями. SPI в тех же чипах работает на частотах до 40 МГц, обеспечивая полнодуплексную передачу данных с минимальными задержками – идеально для подключения внешней памяти или дисплеев.
UART в Nuvoton реализован с поддержкой нескольких режимов: стандартный асинхронный, синхронный (с тактовым сигналом) и IrDA для инфракрасной связи. В отличие от SPI и I2C, UART не требует тактового сигнала от ведущего устройства, что упрощает подключение к периферии без синхронизации. Однако отсутствие встроенного механизма обнаружения ошибок (кроме бита четности) делает его уязвимым к помехам на длинных линиях. Для компенсации Nuvoton добавляет аппаратные FIFO-буферы глубиной до 16 байт, снижая нагрузку на процессор при обработке прерываний.
SPI в чипах Nuvoton выделяется гибкостью конфигурации: пользователь может выбрать режим работы (0–3), полярность и фазу тактового сигнала (CPOL/CPHA), а также настроить количество бит данных (от 4 до 32). В микроконтроллерах серии NUC123 реализована поддержка до 4 независимых SPI-интерфейсов, каждый из которых может работать в режиме ведущего или ведомого. Ключевое преимущество SPI – отсутствие ограничений на количество ведомых устройств при использовании отдельных линий выбора (CS), но это требует дополнительных GPIO-пинов. Для экономии ресурсов Nuvoton предлагает мультиплексирование CS-сигналов через регистры управления.
I2C в Nuvoton поддерживает стандартный (100 кГц) и быстрый (400 кГц) режимы, а в некоторых моделях (например, M2351) – высокоскоростной режим до 3,4 МГц. В отличие от SPI, I2C использует всего две линии (SDA и SCL) и адресацию устройств, что упрощает разводку плат. Однако ограничение на количество устройств (до 127 при 7-битной адресации) и необходимость арбитража при конфликтах делают его менее подходящим для систем с высокой плотностью периферии. Nuvoton решает проблему арбитража аппаратным контролем состояния шины, автоматически освобождая SDA при обнаружении коллизий.
Сравнение скоростей и топологий наглядно демонстрирует различия в применении:
| Интерфейс | Макс. скорость (Nuvoton) | Топология | Кол-во устройств | Типичное применение |
|---|---|---|---|---|
| UART | 10 Мбит/с (M480) | Точка-точка | 2 | Отладка, связь с модулями GSM/Bluetooth |
| SPI | 40 МГц (M480) | Ведущий-ведомый (звезда) | Ограничено GPIO | Flash-память, дисплеи, датчики |
| I2C | 3,4 МГц (M2351) | Шина (мультимастер) | До 127 | EEPROM, RTC, датчики температуры |
Выбор интерфейса в Nuvoton зависит от требований к скорости и количеству устройств. Для систем с одним-двумя периферийными модулями (например, датчик + EEPROM) I2C предпочтительнее из-за минимального числа линий. Если критична скорость и полнодуплексная передача, SPI – оптимальный выбор, особенно при работе с внешней памятью или высокоскоростными АЦП. UART остается незаменимым для асинхронной связи с устройствами, где тактовый сигнал недоступен, например, с GPS-модулями или радиомодемами.
В чипах Nuvoton реализованы дополнительные функции для повышения надежности: аппаратное обнаружение обрыва линии в UART, защита от зависания шины в I2C (тайм-аут 25 мс) и контроль четности в SPI. Для оптимизации энергопотребления все интерфейсы поддерживают работу в режиме низкого потребления с динамическим отключением тактирования. При проектировании важно учитывать, что SPI и I2C в Nuvoton могут использовать одни и те же GPIO-пины через мультиплексирование, что требует внимательной настройки регистров альтернативных функций (например, в серии NUC121).
Как настроить порт UART на микроконтроллере Nuvoton для передачи данных

Скорость передачи задается через регистр UARTx->BAUD. Формула расчета значения для стандартных скоростей: BAUD = (SystemCoreClock / (16 * BaudRate)) - 1. Для 115200 бод при тактовой частоте 48 МГц значение будет 0x13. В некоторых моделях (например, M451) используется альтернативный режим с дробным делителем, где регистр UARTx->BAUD содержит поля DIVIDER и FRACTION.
Конфигурация формата данных настраивается в регистре UARTx->LINE. Биты WLS (0-1) определяют длину слова: 0x3 для 8 бит, 0x2 для 7 бит. Бит PBE включает проверку четности, а NSB задает количество стоп-битов (0 – 1 бит, 1 – 2 бита). Для стандартного режима 8N1 установите 0x03.
Прерывания UART настраиваются через регистр UARTx->INTEN. Для разрешения прерывания по приему данных установите бит RDA_IEN (0x01), для передачи – THRE_IEN (0x02). Вектор прерывания для UART0 в NUC123 – UART0_IRQn, для M451 – UART0_IRQHandler. Обработчик должен сбрасывать флаг прерывания чтением регистра UARTx->INTSTS.
Передача данных осуществляется записью байта в регистр UARTx->DAT. Перед записью проверьте бит THRE в регистре UARTx->FIFOSTS – он указывает на готовность FIFO к приему нового байта. Для непрерывной передачи используйте цикл с проверкой этого бита или прерывания. Пример для отправки строки:
void UART_SendString(UART_T *uart, char *str) {
while (*str) {
while (!(uart->FIFOSTS & UART_FIFOSTS_THRE_Msk));
uart->DAT = *str++;
}
}
Прием данных реализуется через регистр UARTx->DAT с проверкой бита RDA_IF в UARTx->INTSTS или флага RX_EMPTY в UARTx->FIFOSTS. Для буферизации используйте кольцевой буфер с обработкой в прерывании. Пример обработчика:
void UART0_IRQHandler(void) {
if (UART0->INTSTS & UART_INTSTS_RDAIF_Msk) {
while (!(UART0->FIFOSTS & UART_FIFOSTS_RX_EMPTY_Msk)) {
rx_buffer[rx_index++] = UART0->DAT;
}
}
}
Особенности работы порта SPI в Nuvoton: скорость, режимы и подключение периферии

Микроконтроллеры Nuvoton поддерживают интерфейс SPI с тактовой частотой до 32 МГц в режиме ведущего (Master) и до 16 МГц в режиме ведомого (Slave). Предельные значения зависят от конкретной модели: например, в серии M451 максимальная скорость достигает 24 МГц, а в NUC123 – 12 МГц. Для точной настройки частоты используется регистр SPIx_CLKDIV, где делитель задаётся формулой F_SPI = F_HCLK / (2 × (CLKDIV + 1)). При работе с высокоскоростной периферией рекомендуется снижать тактовую частоту на 10–15% от максимальной для компенсации помех.
Nuvoton реализует четыре стандартных режима SPI (0–3), отличающихся полярностью (CPOL) и фазой (CPHA) тактового сигнала. Режим 0 (CPOL=0, CPHA=0) и режим 3 (CPOL=1, CPHA=1) чаще всего используются для подключения датчиков и флэш-памяти, так как обеспечивают стабильную синхронизацию. Регистр SPIx_CTL позволяет переключать режимы через биты CPOL и CPHA. При смене режима необходимо сбрасывать FIFO-буфер, чтобы избежать ошибок передачи.
Встроенный контроллер SPI в Nuvoton поддерживает передачу данных разрядностью от 4 до 32 бит. Настройка осуществляется через регистр SPIx_CTL (биты DWIDTH), где значение 0x0 соответствует 8 битам, а 0xF – 32 битам. Для передачи данных с нестандартной разрядностью (например, 12 бит) требуется программная обработка: старшие биты заполняются нулями или игнорируются. При работе с 32-битными пакетами рекомендуется использовать DMA для снижения нагрузки на ядро.
Подключение периферии через SPI в Nuvoton требует учёта топологии шины. В режиме Master поддерживается работа с несколькими ведомыми устройствами через отдельные линии выбора (SS). Для этого используется регистр SPIx_SSCTL, где бит AUTOSS позволяет автоматически управлять сигналом SS. При ручном управлении необходимо удерживать SS в низком уровне на протяжении всей транзакции. Для устройств с высоким потреблением тока (например, SD-карты) рекомендуется использовать буферные микросхемы для усиления сигнала.
Контроллер SPI в Nuvoton оснащён аппаратным FIFO-буфером глубиной 8 слов (по 32 бита каждое). Буфер работает в режиме двойной буферизации: пока данные записываются в передающий FIFO, принятые данные считываются из приёмного. Для проверки состояния используются регистры SPIx_STATUS (биты TX_FULL, RX_EMPTY). При переполнении FIFO генерируется прерывание, которое можно обработать через вектор SPIx_IRQn. Для оптимизации производительности рекомендуется заполнять FIFO полностью перед началом передачи.
Для диагностики ошибок SPI в Nuvoton предусмотрены флаги в регистре SPIx_STATUS: MODF (конфликт режимов), RX_OV (переполнение приёмника), TX_UNF (недозаполнение передатчика). При возникновении ошибки контроллер автоматически сбрасывает шину, но для восстановления работы требуется программный сброс через бит SWRST в регистре SPIx_CTL. Для предотвращения зависаний рекомендуется использовать сторожевой таймер (WDT) при работе с критически важной периферией.
При подключении периферии с разными требованиями к питанию (например, 3.3 В и 5 В) необходимо использовать преобразователи уровней. Nuvoton работает на напряжении 3.3 В, поэтому для 5-вольтовых устройств подходят микросхемы TXB0104 или SN74LVC1T45. Также важно учитывать временные характеристики сигналов: минимальная длительность импульса SS должна составлять не менее 50 нс, а время установления данных (setup time) – не менее 10 нс. Нарушение этих параметров приводит к ошибкам синхронизации.
Использование I2C в Nuvoton: адресация устройств и обработка ошибок

Микроконтроллеры Nuvoton, такие как серии M480 или NUC123, поддерживают интерфейс I2C с аппаратной реализацией, что упрощает взаимодействие с периферийными устройствами. Адресация устройств на шине I2C в Nuvoton осуществляется через 7-битный формат, где старшие 7 бит регистра I2C_ADDR определяют адрес ведомого устройства. Например, для датчика температуры LM75 с адресом 0x48 в регистр записывается значение 0x90 (сдвиг влево на 1 бит). Важно учитывать, что младший бит адреса (R/W) управляется контроллером автоматически при отправке или приёме данных.
При инициализации I2C в Nuvoton необходимо задать тактовую частоту шины через регистр I2C_CLKDIV. Для стандартного режима (100 кГц) значение делителя рассчитывается по формуле: CLKDIV = (PCLK / (4 * 100000)) — 1, где PCLK – частота периферийного тактового сигнала. В быстром режиме (400 кГц) формула аналогична, но делитель уменьшается. Ошибка в расчётах приведёт к некорректной работе шины, поэтому рекомендуется использовать встроенные функции библиотек Nuvoton, такие как I2C_Open(), которые автоматически настраивают делитель.
Обработка ошибок на шине I2C в Nuvoton реализуется через флаги прерываний и регистры состояния. Основные ошибки: NACK (отсутствие подтверждения от ведомого), Arbitration Lost (конфликт на шине) и Bus Error (нарушение протокола). Для их обнаружения используются флаги I2C_STATUS, где бит 0x04 указывает на NACK, а 0x08 – на потерю арбитража. При возникновении ошибки контроллер генерирует прерывание, если оно разрешено в регистре I2C_INTEN. В обработчике прерывания необходимо сбросить флаги ошибок записью 1 в соответствующие биты I2C_STATUS и перезапустить транзакцию.
Для повышения надёжности передачи данных рекомендуется использовать тайм-ауты. В Nuvoton нет встроенного механизма тайм-аута для I2C, поэтому его реализуют программно с помощью таймера. Например, при отправке данных можно запустить таймер на 10 мс и ожидать флага I2C_STATUS_TX_EMPTY. Если флаг не установлен до срабатывания таймера, транзакция прерывается, а шина сбрасывается через переинициализацию контроллера. Это предотвращает зависание системы при неисправности ведомого устройства.
При работе с несколькими ведомыми устройствами на одной шине I2C важно учитывать их адресное пространство. Некоторые устройства, например EEPROM 24LCxx, имеют фиксированные адреса, а другие, как датчики BME280, позволяют настраивать младшие биты адреса аппаратно (перемычками). В случае конфликта адресов используют мультиплексоры I2C, такие как TCA9548A, которые позволяют разделять шину на несколько каналов. Для Nuvoton это требует дополнительной логики управления мультиплексором через GPIO, но снижает риск коллизий и упрощает отладку.