STM32G4. Интерфейсы и их возможности

17 августа

управление питаниемпотребительская электроникалабораторные приборыуниверсальное применениеST Microelectronicsстатьяинтегральные микросхемыARMCortex-M4МикроконтроллерSTM32USB type-cUCPDSTM32G4CAN-FDQuad-SPI

Вячеслав Гавриков (г. Смоленск)

Цикл статей о новом семействе микроконтроллеров STM32G4 производства компании STMicroelectronics продолжает обзор интерфейсных модулей этих микроконтроллеров.

Основные разделы статьи

Другие статьи из цикла

Quad-SPI

Встроенный интерфейс Quad-SPI позволяет микроконтроллерам STM32G4 взаимодействовать со внешними микросхемами SPI/QSPI-памяти (рисунок 1). Quad-SPI может работать с одной или двумя параллельными микросхемами QSPI-памяти. То есть, возможна передача данных по четырехбитной или восьмибитной шине. Такой подход обеспечивает максимальную гибкость физического подключения: использование 6 сигнальных линий для четырехбитного обмена или 10 сигнальных линий для восьмибитного. При восьмибитном обмене микросхемы памяти работают параллельно и используют общий сигнал CS. Однако они также могут работать независимо за счет использования индивидуальных линий CS.

Рис. 1. Подключение внешних микросхем Flash-памяти с помощью Quad-SPI

Рис. 1. Подключение внешних микросхем Flash-памяти с помощью Quad-SPI

Интерфейс Quad-SPI предлагает три рабочих режима:

  • Indirect mode, при котором выполняется непрямой обмен посредством регистров Quad-SPI;
  • Status Polingmode, при котором выполняется обмен по прерыванию с полингом статусного регистра внешней Flash;
  • Memory-mappedmode, при котором внешняя Flash-память отображается на адресное пространство контроллера.

Quad-SPI поддерживает работу с однократной скоростью обмена (Single Data Rate, SDR) и с удвоенной скоростью обмена (Double Data Rate, DDR). При удвоенной скорости обмена защелкивание данных выполняется по фронту и по срезу тактовых импульсов CLK.

Quad-SPI обеспечивает высокую гибкость настройки формата кадра (рисунок 2):

  • активация и деактивация каждой из пяти стандартных фаз кадра;
  • выбор длины каждой из фаз;
  • настройка числа линий данных, активных в каждой из фаз.

Рис. 2. Формат кадра Quad-SPI

Рис. 2. Формат кадра Quad-SPI

Все это гарантирует возможность обмена со всеми типами SPI-памяти, в том числе со стандартной одноканальной SPI-памятью, а также с dual/quad SPI-памятью.

В режиме Indirect mode работа интерфейса Quad-SPI оказывается идентичной работе классического SPI-интерфейса. Обмен данными производится с помощью обычного регистра данных и FIFO-буфера. Запись и чтение из регистра данных выполняет пользовательская программа с привлечением прерываний или опроса статусного регистра. Возможен автоматический обмен данными с помощью DMA.

В режиме Status Poling mode производится опрос статусного регистра внешней Flash длиной 8/16/32 бита. Quad-SPI может быть настроен для периодического чтения этого регистра. При необходимости результат чтения дополнительно маскируется для выделения интересующих статусных битов. Маскирование производится с помощью регистра PSMKR. Статусные биты сравниваются со значениями, хранящимися в регистре PSMAR. Сравнение выполняется по схеме И/ИЛИ. В первом случае прерывание генерируется, когда все биты совпадают с соответствующими битами PSMAR. Во втором случае прерывание генерируется, если есть хотя бы одно совпадение. И в первом, и во втором случае работа Quad-SPI автоматически останавливается.

В режиме Memory-mapped mode внешняя Flash рассматривается микроконтроллером как внутренняя. При этом возможно только чтение данных из памяти, а ее объем ограничивается 256 Мбайт. При обмене со внешней памятью число циклов ожидания больше чем со внутренней из-за относительно низкой скорости передачи данных. Благодаря встроенному буферу предвыборки выполнение кода из Flash может выполняться напрямую без копирования в SRAM.

Quad-SPI позволяет компенсировать задержки сигналов, связанные с индивидуальными особенностями печатных плат. Для этого момент защелкивания данных может быть сдвинут на ½ периода в режиме SDR или на ¼ периода в режиме DDR.

Quad-SPI u генерирует пять прерываний: Timeout, Status Match, FIFO Threshold, Transfer Complete и Transfer Error. Кроме того, при заполнении FIFO-буфера в режиме Indirect mode может генерироваться запрос DMA.

Интерфейс Quad-SPI может оставаться активным в режимах Run и Sleep. Он также позволяет пробуждать контроллер из режима Sleep. В режиме Stop работа Quad-SPI прекращается, но содержимое регистров сохраняется. При выходе из режима Standby пользователь должен повторно инициализировать Quad-SPI.

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

Рис. 3. Пример использования Quad-SPI

Рис. 3. Пример использования Quad-SPI

Модуль Quad-SPI также реализован в семействах STM32F4 и STM32L4. Однако именно в семействах STM32G4 этот модуль обеспечивает максимальную частоту обмена.

Контроллер внешней памяти FMC

У микроконтроллеров STM32G4 присутствует модуль FMC, который позволяет работать со внешними микросхемами памяти. В составе FMC реализованы сразу два контроллера: NOR/PSRAM и NAND (рисунок 4). Благодаря FMC память микроконтроллеров STM32G4 может быть расширена за счет внешних микросхем Flash (NOR и NAND) и ОЗУ (PSRAM и SRAM). Кроме того, гибкая настройка FMC обеспечивает взаимодействие STM32G4 с различными параллельными интерфейсами. Например, микроконтроллеры STM32G4 подходят для создания графических приложений с TFT- и LCD-дисплеями, использующими интерфейсы Intel 8080 и Motorola 6800.

Рис. 4. Блок-схема FMC

Рис. 4. Блок-схема FMC

Под нужды FMC выделены два независимых банка памяти. Каждый из этих банков имеет свои собственные конфигурацию и сигнал выбора CS. Настройка банков оказывается максимально гибкой: возможны программируемые тайминги, программируемая ширина шины данных 8/16 бит, выбор синхронного или асинхронного обмена и так далее.

FMC-контроллер поддерживает широкий спектр памяти и устройств: SRAM; ROM; NOR/OneNAND; PSRAM. FMC также может работать с NAND Flash с ECC объемом до 8 кбайт. Для работы с NAND Flash выделены три источника прерывания: по фронту, срезу или высокому уровню сигнала NAND Flash Ready/Busy. Кроме того, благодаря возможности гибкой настройки FMC позволяет взаимодействовать с различными TFT- и LCD-дисплеями, использующими интерфейсы Intel 8080 и Motorola 6800.

Внешняя память отображается в адресном пространстве STM32G4 в виде двух фиксированных банков объемом 256 Мбайт. Bank 1 используется NOR/PSRAM-контроллером, Bank 3 используется NAND-контроллером. Bank 2 и Bank 4 зарезервированы и не используются (рисунок 5).

Рис. 5. Отображение внешней памяти в адресном пространстве STM32G4

Рис. 5. Отображение внешней памяти в адресном пространстве STM32G4

FMC поддерживает мультиплексный и немультиплексный режимы работы с PSRAM- и NOR-памятью (рисунок 6). В немультиплексированных интерфейсах линии памяти и данных разделены физически. В мультиплексированных интерфейсах сигналы адреса и данных делят общую 16-битную шину. По этой причине при работе с мультиплексированными интерфейсами требуется дополнительный внешний регистр для хранения адреса. Многие микросхемы с PSRAM и NOR имеют в своем составе такой регистр. Для разрешения работы этого регистра выделен сигнал FMC_NL (в микросхемах памяти он обычно называется NADV).

Рис. 6. Мультиплексируемые и не мультиплексируемые интерфейсы с PSRAM- и NOR-памятью

Рис. 6. Мультиплексируемые и не мультиплексируемые интерфейсы с PSRAM- и NOR-памятью

Линии FMC_NEx заняты сигналами выбора для четырех внешних микросхем 8-/16-битной памяти. Что касается PSRAM, то для доступа к нужным данным используются линии FMC_NBL[1:0]. Каждой микросхеме при этом выделяется 64 Мбайт в адресном пространстве Bank 1.

FMC позволяет гибко настраивать тайминги интерфейса с PSRAM- и NOR-памятью:

  • Address setup phase – длительность первой фазы доступа;
  • Address hold phase – длительность средней фазы цикла доступа;
  • Data setup phase – длительность второй фазы доступа;
  • Bus turnaround phase – длительность изменения направления передачи;
  • Clock divide ratio – число тактов AHB (или HCLK) в одном такте работы с памятью (или CLK);
  • Data latency – число циклов ожидания перед подачей данных.

Bank 3 используется для отображения внешней NAND-памяти. В свою очередь он делится на две части: область общей памяти (Common memory) и область памяти атрибутов (Attribute memory). Обе области идентичны и состоят из трех секций (рисунок 7):

  • Data section (64 кбайт) используется для чтения и записи данных в NAND Flash;
  • Command section (64 кбайт) используется для передачи команд в NAND Flash;
  • Address section (128 кбайт) используется для определения адреса в NAND Flash.

Рис. 7. Организация банка памяти Bank 3 для NAND

Рис. 7. Организация банка памяти Bank 3 для NAND

FMC формирует все необходимые сигналы для взаимодействия с NAND Flash (рисунок 8). Для передачи сигналов данных, адреса и управления используются те же линии, что и при работе с PSRAM- и NOR-памятью. Сигналы-защелки CLE и ALE передаются по адресным линиям 16 и 17. Сигнал CLE активен при записи в секцию Command section, а сигнал ALE активен при записи в секцию Address section.

Рис. 8. Интерфейс с NAND Flash

Рис. 8. Интерфейс с NAND Flash

FMC поддерживает следующие функции при работе с NAND Flash:

  • коррекция ошибок (Error code correction, ECC), которая подразумевает обнаружение и исправление одного ошибочного бита или обнаружение двух ошибочных битов. Для этого используется код Хемминга;
  • формирование прерываний по фронту, срезу, уровню сигнала Ready/Busy;
  • контроль занятости памяти. FMC проверяет, готова ли память к обмену, прежде чем начать новый цикл передачи.

FMC позволяет индивидуально настраивать тайминги для каждой секции NAND Flash. Если требуется использовать разные тайминги в рамках одного цикла передачи, то можно выполнять обмен с привлечением разных секций.

FMC может находится в активном состоянии в режимах Run, Low power Run, Sleep и Low power sleep. В режимах Stop 1 и Stop 0 содержимое регистров FMC сохраняется.

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

Универсальный синхронный/асинхронный приемопередатчик USART

У микроконтроллеров STM32G4 может быть до трех модулей USART и до двух UART. Модуль USART является чрезвычайно гибким и поддерживает различные режимы работы:

  • синхронный и асинхронный обмены (UART/USART);
  • обмен по SPI в режиме ведущего и ведомого;
  • обмен по SmartCard ISO 7816;
  • обмен по ИК-интерфейсу irDA;
  • обмен по LIN (local interconnect network).

Кроме того, USART поддерживает ряд функций, которые могут быть полезны при реализации протокола Modbus.

UART имеет те же возможности, что и USART, за исключением синхронного обмена (нет поддержки SPI и SmartCard).

Большим плюсом USART являются бюджетная стоимость реализации и минимальное количество задействованных выводов микроконтроллера. Еще одним преимуществом USART становится возможность работы во всех режимах пониженного потребления, до Stop включительно, благодаря наличию двухдоменной системы тактирования.

USART обеспечивает гибкую настройку целого ряда параметров, таких как:

  • длина данных (7/8/9 бит);
  • контроль четности (проверка на четность и нечетность по биту четности);
  • число стоп-битов (0,5/1/1,5/2 бита);
  • порядок передачи данных (младшим или старшим битом вперед);
  • скорость передачи;
  • уровень передискретизации (8 или 16).

USART может работать в режиме FIFO с привлечением двух буферов — приемного и передающего.

Пользователю также доступен контроль потока данных RS-232 с использованием сигналов CTS (Clear to Send) и RTS (Request to Send). Кроме того, при работе с RS-485 модуль USART предлагает аппаратную поддержку сигнала DE (Driver Enable).

USART поддерживает различные режимы обмена: полнодуплексный, однопроводной полудуплексный, мультипроцессорный, а также целый ряд функций, например, автоматическое определение скорости передачи.

В таблице 1 представлены основные особенности USART, реализованные в STM32G4. Из таблицы видно, что возможности UART и LPUART ограничены по сравнению с USART.

Таблица 1. Возможности встроенных приемопередатчиков USART и UART в STM32G4

Особенность USART1/2/3 UART4/5 LPUART
Аппаратный контроль потока данных (RS-232 и RS-485) + + +
Мультипроцессорный режим обмена данными + + +
Синхронный режим (мастер/ведомый) +
Режим Smartcard +
Однопроводной полудуплексный режим обмена + + +
IrDA SIR ENDEC + +
Режим LIN + +
Два домена тактирования и пробуждение из режимов пониженного потребления + + +
Прерывание по таймауту при отсутствии принимаемых данных + +
Modbus + +
Автоматическое определение скорости передачи + +
Поддержка сигнала Driver Enable для RS-485 + + +
Длина данных, бит 7, 8,9
Tx/Rx FIFO + + +
Размер Tx/Rx FIFO 8

Блок-схема USART представлена на рисунке 9. Тактирование модуля может производиться от нескольких источников: PCK (тактового сигнала шины APB), SYSCLK, 16 МГц от HSI16, сигнала от внешнего резонатора LSE. Входной тактовый сигнал дополнительно делится с программируемым коэффициентом деления, задаваемым в регистре USART_PSC (1…256). Линии Tx и Rx используются для передачи и приема данных соответственно. При этом пользователи могут в любой момент поменять эти выводы местами. Линии nCTS и nRTS необходимы для аппаратного контроля за потоком данных в RS-232. Линия DE необходима для контроля за активностью передатчика при работе с интерфейсом RS-485. Линия CK используется в двух случаях: при работе USART в синхронном режиме (это тактовый сигнал для ведомого) и при работе USART в режиме SmartCard (это выходной тактовый сигнал для смарт-карты). Сигналы NSS и nCTS делят общий вывод микроконтроллера. NSS является сигналом выбора ведомого при синхронном обмене.

Рис. 9. Блок-схема USART

Рис. 9. Блок-схема USART

В USART используется гибкая двухдоменная система тактирования (рисунок 10). Тактирование регистров осуществляется от сигнала PCLK шины APB, в то время как ядро тактируется от независимого сигнала usart_ker_ck. Для обмена данными между доменами используются буферы. USART является ведомым на шине APB и может запрашивать доступ DMA.

Рис. 10. Организация тактирования в USART

Рис. 10. Организация тактирования в USART

USART позволяет выбирать уровень передискретизации с учетом компромисса между целостностью данных и скоростью обмена. При коэффициенте передискретизации, равном 8, обеспечивается максимальная скорость обмена (до usart_ker_ck/8), но помехоустойчивость уменьшается. При увеличении коэффициента передискретизации до 16 устойчивость к помехам возрастает, но максимальная частота обмена падает в два раза. Максимальная частота передачи данных USART составляет 21,25 Мбод/с при тактировании модуля 170 МГц.

Формат сообщений, используемых при асинхронном обмене, представлен на рисунке 11. Сообщение может содержать до девяти бит данных, бит синхронизации и бит контроля четности. Сообщение начинается со старт-бита, который имеет длительность 1 бит и активный низкий уровень. Далее следуют 7/8/9 бит данных. Если разрешен контроль четности, то последним битом данных передается бит четности. Последним передается стоп-бит длительностью 0,5/1/1,5/2 бита с активным высоким уровнем. Передача данных может осуществляться как старшим битом вперед, так и младшим битом вперед. Существуют два особых сообщения: «Idle» и «Break». Сообщение «Idle» состоит из «1», а сообщение «Break» – из «0».

Рис. 11. Формат сообщения при асинхронной передаче

Рис. 11. Формат сообщения при асинхронной передаче

Асинхронный обмен может быть дуплексным и полудуплексным (рисунок 12). При дуплексном обмене используются выводы Tx и Rx.

Рис. 12. Асинхронный обмен: а) дуплексный; б) полудуплексный

Рис. 12. Асинхронный обмен: а) дуплексный; б) полудуплексный

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

При реализации асинхронного полудуплексного интерфейса RS-232 для управления потоком данных и предотвращения коллизий используются два дополнительных сигнала. Сигнал RTS (Request to Send) сообщает о том, что приемник готов к приему данных, а сигнал CTS (Clear to Send) говорит о том, что передатчик готов к передаче.

Для работы с RS-485 необходимо использовать сигнал DE (Driver Enable), который сообщает внешней микросхеме-трансмиттеру о режиме передачи (приеме или передаче)

При мультипроцессорном режиме обмена желательно, чтобы активным оставался только тот приемник, которому направляется сообщение. Остальные приемники должны находится в режиме Mute. Вход/выход из режима Mute может осуществляться по обнаружению сообщения «Idle» и по обнаружению совпадения адреса (Address mark detection).

В отличие от UART модуль USART поддерживает синхронный обмен. На рисунке 13 поясняется работа USART в режиме SPI. Микроконтроллер может работать в режиме ведущего или ведомого. Пользователь самостоятельно настраивает активный уровень и фазу защелкивания данных для сигналов тактирования, а также направление передачи данных (старшим или младшим битом вперед). В режиме ведомого линия CK является входом, а в режиме ведущего – выходом. При передаче стоп- и старт-битов сигналы тактирования CK не формируются. В режиме SPI возможно программное или аппаратное управление линией NSS.

Рис. 13. Синхронный обмен

Рис. 13. Синхронный обмен

Обмен данными со смарт-картами происходит с помощью двухпроводного полудуплексного интерфейса (рисунок 14). Линия CK является выходом для микроконтроллера. Линия Tx используется для передачи данных в обоих направлениях поочередно. Модуль USART поддерживает протоколы как Т = 0, так и Т = 1.

Рис. 14. Обмен со смарт-картами ISO 7816

Рис. 14. Обмен со смарт-картами ISO 7816

USART поддерживает полудуплексный протокол IrDA. Данные USART передаются в формате NRZ (Non Return to Zero). IrDA требует формата RZI (Return to Zero Inverted). Для кодировки, кодировки и модуляции либо демодуляции данных в составе USART используется модуль SIR. Скорость передачи данных достигает 115,2 кбит/с.

Приемник USART имеет функцию автоматического определения скорости передачи. Для этого приемнику достаточно принять один из определенных символов. Выбор таких символов ограничен: это может быть любой символ, начинающийся с «1», любой символ, начинающийся с «10xx», символ «0x7F», символ «0x55».

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

USART может работать в режиме FIFO mode с привлечением приемного и передающего FIFO-буферов. Размер буферов составляет 8 сообщений. Так как буферы тактируются от независимого APB-сигнала usart_ker_ck, то они могут использоваться в режимах пониженного потребления вплоть до Stop. Чтобы избежать переполнения буферов в режиме сна, пользователь должен самостоятельно настроить пороги заполнения, при которых будет формироваться пробуждение микроконтроллера.

USART имеет возможность пробуждения микроконтроллера из режима Stop при тактировании от HSI или LSE. Пробуждение происходит в следующих случаях:

  • при возникновении определенных событий, таких как приход старт-бита, совпадение адреса или прием сообщения;
  • при стандартном прерывании в процессе приема;
  • при событиях, связанных с буферами, таких как очистка передающего буфера, заполнение приемного буфера, частичное заполнение приемного или передающего буферов.

USART предлагает пользователям 23 источника прерываний, часть из которых может использоваться для пробуждения микроконтроллера из спящего режима. Шесть из данных прерываний предназначены для предупреждения о возникновении ошибок, например, ошибки четности.

USART сохраняет работоспособность до режимов Stop 0 и Stop1 включительно. После выхода из режимов Standby и Shutdown необходимо заново инициализировать USART.

Малопотребляющий приемопередатчик LPUART

В предыдущем разделе были рассмотрены основные возможности модулей USART/UART микроконтроллеров STM32G4. В таблице 1 также были указаны особенности малопотребляющих модулей LPUART.

Модуль LPUART имеет ограниченный функционал и не поддерживает синхронный обмен, обмен со смарт-картами, IrDA и LIN. Вместе с тем во всех остальных режимах LPUART способен решать все те же задачи, что и обычные модули UART. При тактировании от внешнего резонатора LSE 32768 кГц скорость обмена по LPUART может достигать 9600 бод/с, а максимальная скорость обмена составляет 33,3 Мбод/с при тактировании от сигнала 100 МГц.

Еще одним важным преимуществом LPUART является малое потребление (таблица 2).

Таблица 2. Сравнение потребления приемопередатчиков USART, UART и LPUART

Блок Потребление, мкА/МГц
Range 1 Boost Range 1 Normal Range 2 Low-Power Run
и Sleep
LPUART1 1,91 1,78 1,47 2,03
USART1 2,49 2,31 1,91 2,49
USART2 2,75 2,56 2,12 3,11
USART3 2,71 2,52 2,08 2,47
UART4 2,51 2,33 1,92 3,14
UART5 2,79 2,6 2,14 3,34

Последовательный интерфейс SPI

Последовательный SPI-интерфейс (Serial Peripheral Interface) является простым и надежным интерфейсом, позволяющим микроконтроллерам STM32G4 взаимодействовать с другими устройствами. Этот интерфейс оказывается чрезвычайно гибким и может использоваться для поддержки различных протоколов. У SPI есть несколько важных преимуществ, среди которых в первую очередь стоит отметить простоту подключения и минимальное число занимаемых выводов микроконтроллера (рисунок 15).

Рис. 15. SPI отличается максимальной простотой реализации

Рис. 15. SPI отличается максимальной простотой реализации

Модуль SPI микроконтроллеров STM32G4 способен работать в различных режимах, таких как:

  • ведущий (Master) или ведомый (Slave), в том числе при работе нескольких ведущих или нескольких ведомых;
  • дуплекс, полудуплекс, симплекс;
  • режим c поддержкой стандартов Motorola, TI.

Скорость обмена по SPI может достигать fPCLK /2 (половины частоты тактирования периферийной шины). При этом для однонаправленной передачи данных требуются всего две сигнальные линии: линия данных и линия тактирования. В более сложных случаях для обмена может потребоваться еще одна линия данных, а также один или несколько сигналов выбора ведомого.

Параметры SPI могут гибко настраиваться с учетом требований конкретного приложения. Речь идет о настройке длины данных, полярности тактовых сигналов, таймингов и прочего.

SPI позволяет работать с буферами, DMA, прерываниями и CRC-контролем целостности данных.

На рисунке 16 представлена упрощенная блок-схема, поясняющая работу и функции модуля SPI. Для взаимодействия со внешними устройствами SPI задействует до четырех внешних входов-выходов. Все данные проходят через приемный Rx-буфер или передающий Tx-буфер. Оба буфера имеют длину 4 байта и могут взаимодействовать c контроллером DMA. Сигнал выбора ведомого может управляться аппаратно или программно, что позволяет динамически менять роли устройств (мастер/ведомый) в процессе обмена.

Рис. 16. Блок-схема модуля SPI

Рис. 16. Блок-схема модуля SPI

Модуль SPI поддерживает CRC-контроль целостности данных. При необходимости CRC-код автоматически рассчитывается и передается последним байтом при отправке данных. При приеме данных CRC-код также автоматически рассчитывается и проверяется.

При обмене по SPI ведущий контролирует процесс передачи данных и формирует тактовый сигнал, передаваемый по линии SCK (рисунок 17). К одному ведущему может быть подключено множество ведомых. Выбор ведомого выполняется с помощью линий SS (Slave Select). Передача данных происходит по линиям MOSI (от ведущего к ведомому) и MISO (от ведомого к ведущему). Причем возможна синхронная передача данных в дуплексном режиме – одновременно в двух направлениях.

Рис. 17. Взаимодействие ведущего и ведомого в дуплексном режиме

Рис. 17. Взаимодействие ведущего и ведомого в дуплексном режиме

В более простом случае при симплексном обмене данные передаются только одним из устройств – ведущим или ведомым. При этом один из выводов MOSI или MISO остается свободным и может использоваться для других целей (рисунок 18).

Рис. 18. Взаимодействие ведущего и ведомого в симплексном режиме

Рис. 18. Взаимодействие ведущего и ведомого в симплексном режиме

В полудуплексном режиме общая линия данных используется обоими устройствами для поочередной передачи информации (рисунок 19). В данном случае линии MOSI и MISO устройств объединяются. Для защиты от коллизий и коротких замыканий, например, когда одно из устройств пытается передать «1», а второе в тот же момент выставляет на линии данных «0», обычно используют последовательный ограничительный резистор.

Рис. 19. Взаимодействие ведущего и ведомого в полудуплексном режиме

Рис. 19. Взаимодействие ведущего и ведомого в полудуплексном режиме

Обычно при работе с несколькими ведомыми используется топология «звезда» (рисунок 20). В каждый момент времени ведущий взаимодействует только с одним ведомым, который выбирается с помощью индивидуального сигнала SS. Таким образом, для каждого ведомого необходимо иметь дополнительную линию SS. Стоит отметить, что каждый ведомый может использовать уникальный формат обмена, так как SPI-модуль позволяет выполнять гибкую настройку формата кадров.

Рис. 20. Взаимодействие ведущего и нескольких ведомых, подключенных по схеме «звезда»

Рис. 20. Взаимодействие ведущего и нескольких ведомых, подключенных по схеме «звезда»

Иногда SPI-устройства подключаются последовательно (рисунок 21). При этом выход MOSI каждого из ведомых подключен ко входу MISO следующего ведомого. Выход MOSI последнего ведомого подключается ко входу MISO ведущего. В такой схеме требуется всего один общий сигнал выбора SS. Очевидно, что для корректной работы необходимо, чтобы у всех ведомых был общий формат обмена данными.

Рис. 21. Взаимодействие ведущего и нескольких ведомых, подключенных последовательно

Рис. 21. Взаимодействие ведущего и нескольких ведомых, подключенных последовательно

SPI может использоваться для двунаправленного обмена между двумя ведущими (рисунок 22). Когда оба устройства пребывают в неактивном состоянии, они переходят в режим ведомых. Когда один из узлов хочет передать данные, он переключается в режим ведущего и формирует сигнал выбора SS для второго устройства. Пара линий SS позволяет обеспечить аппаратную защиту от коллизий. После того как передача данных завершена, оба устройства опять переходят в режим ведомых.

Рис. 22. Взаимодействие двух ведущих устройств (Multi-master mode)

Рис. 22. Взаимодействие двух ведущих устройств (Multi-master mode)

Параметры SPI-сообщения могут быть гибко настроены. В частности, пользователь определяет длину данных 4…16 бит и порядок передачи данных – младшим или старшим битом вперед. Параметры тактового сигнала также могут быть настроены в соответствии с одним из четырех вариантов, определенных в стандарте Motorola (рисунок 23). Для этого используются конфигурационные биты CPOL, определяющие полярность сигнала SCK, и CPAH, определяющие фазу защелкивания сигнала SCK по переднему и заднему фронтам.

Рис. 23. Гибкая настройка формата SPI-сообщений

Рис. 23. Гибкая настройка формата SPI-сообщений

Передача большого количества коротких сообщения является проблемой для многих устройств, особенно при использовании высокой частоты обмена. С одной стороны, устройства должны соблюдать все тайминги, а с другой – успевать обрабатывать сообщения, чтобы не допустить переполнения внутренних буферов и потери информации. SPI-модуль позволяет решить эту задачу с помощью функции упаковывания данных (рисунок 24). Вместо передачи множества коротких сообщений данные автоматически упаковываются в общий фрейм на стороне передатчика и также автоматически распаковываются на стороне приемника. При использовании DMA такая техника обеспечивает минимальную нагрузку на процессорное ядро. В примере на рисунке 24 ведущее устройство упаковывает два 8-битных сообщения в одно 16-битное и отправляет ведомому, который распаковывает его и вновь получает два 8-битных числа.

Рис. 24. Пример упаковки данных с помощью буферов

Рис. 24. Пример упаковки данных с помощью буферов

Для хранения данных в SPI используются два независимых 32-битных буфера Rx и Tx, которые способны работать в 8-битном или 16-битном формате. Для контроля заполнения/освобождения буферов используются статусные биты RxNE и TxE или прерывания. Генерация прерывания возможна по заданному уровню заполнения, определяемого содержимым регистров FxLVL (рисунок 25).

Рис. 25. Формирование событий (прерываний) по заполнению/освобождению буферов

Рис. 25. Формирование событий (прерываний) по заполнению/освобождению буферов

Для поддержания различных протоколов полезен DMA-контроллер. Он позволяет обеспечить пересылку не только принимаемых/передаваемых данных, но и расчетых значений CRC, а также – установление порогов заполнения FIFO-буферов. Расчет CRC выполняется автоматически и независмо для передаваемых и принимаемых данных.

Модуль SPI позволяет гибко управлять работой сигнала NSS (рисунок 26). Этот сигнал может использоваться как выход в режиме ведущего или как вход в режиме ведомого. Управление этим выводом осуществляется либо вручную (программно), либо аппаратно, в зависимости от состояния конфигурационных битов SSI и SSM. Существуют и специальные режимы работы сигнала NSS:

  • импульсный режим NSSP, при котором сигнал NSS переходит в высокое состояние на один такт между двумя фреймами данных;
  • режим TI mode с синхронизацией данных по сигналу SS.

При работе с SPI возможна генерация прерываний:

  • по готовности FIFO-буфера Tx к приему новых данных;
  • по наличию данных в FIFO-буфере Rx;
  • при возникновении конфликта в режиме multi-master;
  • при потере данных во время переполнения FIFO-буфера Rx;
  • при неверном формате фрейма в режиме TI mode, когда NSS не соответствует формату фрейма;
  • при ошибке при приеме данных, когда происходит несовпадение CRC.

Частота передачи данных по SPI зависит от частоты тактового сигнала SCK. В случае с модулями SPI микроконтроллеров STM32G4 она может достигать 75 МГц в режиме ведущего и 27 МГц в режиме ведомого.

SPI модуль может оставаться активным в режимах Run/low Power Run и Sleep/low Power Sleep.

В STM32G4 могут быть реализованы до четырех модулей SPI. Они имеют некоторые различия в функционале (таблица 3).

Таблица 3. Особенности реализации модулей SPI

Функция SPI1 SPI2S2 SPI2S3 SPI4
Поддержка режимов NSSP и TI + + + +
Аппаратный расчет CRC + + + +
Поддержка I2S + +
Формат данных, бит 4…16 4…16 4…16 4…16
Размер Rx/Tx FIFO, бит 32 32 32 32
Возможность пробуждение ядра из режима сна (Sleep) + + + +

Интерфейс I2C (Inter-Integrated Circuit)

Интерфейс I2C широко используется для подключения к микроконтроллерам различных устройств, например, датчиков или микросхем памяти (рисунок 26).

Рис. 26. I2C широко используется для подключения различных устройств

Рис. 26. I2C широко используется для подключения различных устройств

Модуль I2C, реализованный в STM32G4, совместим со спецификацией NXP Revision 5, спецификацией SMBus System Management Bus Specification Revision 3 и протоколом PMBus Power System Management Protocol Specification Revision 1.3. Это позволяет максимально просто организовывать подключение устройств и гибко настраивать параметры передачи. Кроме того, I2C может работать даже в режимах глубокого сна до STOP включительно.

Модуль I2C поддерживает работу микроконтроллера в режимах и ведущего, и ведомого. Для подключения используются два вывода, которые необходимо настроить для работы в режиме с открытым стоком (рисунок 27). Порты микроконтроллера, подключенные к выводам SCL и SDA, способны обеспечивать выходной ток до 20 мА, что позволяет модулю работать в режиме Fast mode Plus. Модуль I2C автоматически контролирует обмен данными: следит за соблюдением арбитража, отвечает за последовательность вывода полей кадра, формирует тайминги. Поддерживаются 7-битная и 10-битная адресации, причем в одном и том же приложении возможно использовать несколько 7-битных адресов. Модуль также способен выполнять стретчинг тактового сигнала.

Рис. 27. Подключение и формат кадра в I2C

Рис. 27. Подключение и формат кадра в I2C

Тайминги установки (Setup time) и удержания (Hold time) могут быть настроены программно. Пользователи также могут настраивать цифровые и аналоговые фильтры для линии данных и тактирования.

Стоит отметить, что модуль I2C имеет независимое тактирование. С одной стороны, это позволяет ему работать в режимах пониженного потребления (до Stop включительно) и пробуждать процессор, а с другой стороны – устанавливать частоту передачи независимо от системной тактовой частоты.

На рисунке 28 представлена блок-схема модуля I2C. Обмен системы с регистрами I2C происходит посредством периферийной шины APB, в то время как остальное ядро может использовать независимое тактирование. В качестве источников тактирования ядра модуля I2C могут выступать системный тактовый сигнал (Sysclk), встроенный высокочастотный резонатор 16 МГц (HSI16) и тактовый сигнал периферийной шины (pclk1). Для борьбы с шумами на каждой из линий I2C реализованы аналоговые и цифровые фильтры. Выходные порты способны обеспечить выходной ток до 20 мА, для этого необходимо установить биты конфигурации I2CxFMP в регистре системного контроллера SYS_CFGR. Для поддержки протокола SMB в модуле есть дополнительная линия SMBA.

Рис. 28. Блок-схема модуля I2C

Рис. 28. Блок-схема модуля I2C

Настройка временных параметров кадра выполняется с помощью полей PRESC, SDADEL и SCLDEL регистра I2C_TIMINGR. Счетчики SDADEL и SCLDEL используются при передаче, чтобы гарантировать минимальное значение времени выставления (Data Setup time) и удержания данных на линии (Data Hold time). После обнаружения среза на линии тактирования модуль I2C выдерживает паузу в соответствии со значением поля SDADEL, прежде чем начать передавать данные в шину. После того как данные отправлены, сигнал на линии тактирования растягивается для обеспечения минимального времени согласно полю SCLDEL.

Длительность низкого и высокого уровней сигнала тактирования также программируется с помощью полей регистра I2C_TIMINGR. Контроль времени выполняется с помощью двух счетчиков, которые попеременно запускаются при изменении состояния сигнала SCK. Такая техника позволяет ведомым синхронизироваться с ведущими, даже если ведущие используют различные тайминги. Стоит отметить, что длительность периода зависит не только от значений счетчиков, но и от дополнительных задержек (tSYNC1 и tSYNC2), которые вносят другие элементы, такие как фильтры и порты ввода-вывода. Эти задержки также необходимо рассчитывать. Помочь в этом может STM32CubeMX.

При работе в режиме ведомого модуль I2C позволяет откликаться на два адреса, которые хранятся в регистрах I2C_OAR1 и I2C_OAR2. Регистр I2C_OAR1 может хранить 10-битный или 7-битный адрес. Регистр I2C_OAR2 хранит только 7-битный адрес, но при этом его младшие биты могут быть дополнительно маскированы (0…7 бит) для работы со множеством адресов. Стоит отметить, что модуль I2C допускает одновременное использование регистров I2C_OAR1 и I2C_OAR2.

При тактировании от встроенного высокочастотного генератора HSI16 модуль I2C способен пробуждать процессор из режима сна при совпадении адреса. Когда микроконтроллер находится в режиме Stop, генератор HSI16 выключен. Однако при обнаружении начала кадра I2C активирует HSI16 для принятия данных. Если адрес совпал с адресом, заданным в регистрах I2C_OAR1 и I2C_OAR2, генерируется прерывание, пробуждающее процессор. Если совпадения адреса не обнаружено, то генератор HSI16 выключается. Для работы с этой функцией необходимо разрешить стретчинг, чтобы модуль I2C успел активировать HSI16.

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

Для запуска передачи необходимо записать в регистр I2C_CR2 следующие данные:

  • запрос на передачу (бит START);
  • адрес ведомого (поле SADD);
  • направление передачи (бит RD_WRN);
  • число передаваемых байтов (поле NBYTES);
  • режим окончания передачи (поле AUTOEND).

Если бит AUTOEND установлен, то модуль автоматически сформирует окончание транзакции. В противном случае программа должна самостоятельно управлять окончанием передачи данных. Об окончании передачи данных можно узнать по флагу Transfer Complete (TC) или по прерыванию. Большим плюсом также является возможность использования DMA.

Если объем передаваемых данных превышает 255 байт, то в регистре I2C_CR2 необходимо установить бит RELOAD. В таком случае после передачи заданной порции данных будет установлен флаг Transfer Complete Reload (TCR). После этого программа должна еще раз записать количество передаваемых данных, пока установлен TCR. Далее передача данных продолжится. При работе с битом RELOAD значение AUTOEND игнорируется.

В режиме ведомого по умолчанию используется стретчинг. Эту функцию можно отключить программно. При приеме ведомый может формировать подтверждение по заданному количеству байт. Для этого используется режим Slave Byte Control (бит SBC) и бит RELOAD. Если биты SBC и RELOAD установлены, модуль I2C принимает заданное количество байт. Если количество данных равно 1, то флаг Transfer Complete Reload (TCR) будет взводиться после каждого принятого байта.

Модуль I2C имеет аппаратную поддержку SMBus и сопутствующих протоколов: ARP (Address resolution protocol), Host Notify protocol и Alert protocol. Кроме того, модуль I2C автоматически рассчитывает байт Packet Error Code (PEC). Этот контрольный байт по умолчанию передается и проверяется при приеме.

Модуль I2C может генерировать следующие штатные прерывания:

  • по приему данных (приемный буфер не пуст и готов к чтению данных);
  • по готовности к передаче (передающий буфер пуст и готов к приему данных);
  • по обнаружению состояния STOP;
  • по окончанию передачи блока данных в режиме RELOAD = 1;
  • по окончанию передачи данных в режиме RELOAD = 0;
  • по совпадению адреса;
  • по приему NACK.

Кроме того, I2C может генерировать прерывания при возникновении ошибок:

  • ошибка шины (обнаружение незапланированного состояния Stop или Start);
  • ошибка потери арбитража;
  • ошибка из-за переполнения приемного буфера или из-за отсутствия данных в передающем буфере;
  • ошибка PEC (SMBUs);
  • ошибка таймаута в SMBUs;
  • обнаружение ошибки на выводе Alert (SMBUs).

В микроконтроллерах STM32G4 могут быть реализованы до четырех модулей I2C. Функционал модулей представлен в таблице 4.

Таблица 4. Характеристики модулей I2C микроконтроллеров STM32G4

Характеристика I2C1 I2C2 I2C3 I2C4
Поддержка 7-битной адресации + + + +
Поддержка 10-битной адресации + + + +
Режим Standard-mode (до 100 кбит/с) + + + +
Режим Fast-mode (до 400 кбит/с) + + + +
Режим Fast-mode Plus с токовой нагрузкой до 20 мА (до 1 Мбит/с) + + + +
Независимое тактирование + + + +
Пробуждение системы из режима Stop + + + +
SMBus/PMBus + + + +

ИК-интерфейс IRTIM

Встроенный модуль IRTIM позволяет генерировать сигналы для беспроводного инфракрасного канала. Такой канал управления используется в пультах многих бытовых устройств, например, телевизоров, аудиосистем, кондиционеров и прочего.

Модуль IRTIM обеспечивает модуляцию и генерацию сигналов управления с привлечением таймеров TIM16 и TIM17. При этом пользователю доступен широкий выбор модулирующих частот и типов модуляции, что позволяет реализовывать самые различные протоколы.

Схема генерации и модуляции сигналов изображена на рисунке 29. Генерация несущей и модулирующей частот выполняется таймерами, а за модулирование отвечает IRTIM. Параметры модулирующего и несущего сигналов определяются пользователем программно, что гарантирует высокую гибкость при реализации любого протокола, например, RC5/RC6/SIRC. Выходной сигнал с IRTIM может быть выведен на порты PA13 или PB9 и напрямую подаваться на внешний ИК-диод, причем дополнительный внешний транзистор не требуется.

Рис. 29. Схема генерации и модуляции ИК-сигналов управления

Рис. 29. Схема генерации и модуляции ИК-сигналов управления

При генерации сигналов управления таймер TIM17 отвечает за несущую частоту. Обычно частота несущей составляет 34…40 кГц. Для формирования такого сигнала необходимо перевести TIM17 в режим генерации ШИМ с коэффициентом заполнения 50%. После запуска таймера он не нуждается в каком-либо дополнительном контроле.

За модулирующий сигнал отвечает таймер TIM16 в соответствии с выбранным протоколом. Таймер настраивается на работу в режиме сравнения. При возникновении прерываний в моменты совпадения происходят переключения модулирующего сигнала.

Модуль IRTIM, по сути, выступает как простой логический вентиль «И». Однако для предотвращения глитчей он синхронизирован с таймером TIM17.

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

IRTIM может использоваться в режимах Run/LP Run и Sleep/LP Sleep.

USB 2.0 FS

В микроконтроллерах STM32G4 реализован интерфейс USB 2.0 FS, который обычно используется для связи с ПК. USB 2.0 FS имеет 16 конечных точек (Endpoint), которые могут быть организованы в качестве восьми двунаправленных конечных точек. USB 2.0 FS поддерживает Battery Charging Detection версии v1.2.

Схема подключения микроконтроллера STM32G4 к USB представлена на рисунке 30. К основным преимуществам реализации USB 2.0 FS на STM32G4 можно отнести:

  • простоту схемной реализации;
  • отсутствие внешнего резонатора;
  • малое потребление;
  • возможность быстрой зарядки аккумулятора за счет функции обнаружения зарядного устройства.

Рис. 30. Схема подключения микроконтроллера STM32G4 к USB

Рис. 30. Схема подключения микроконтроллера STM32G4 к USB

Основные отличительные особенности USB 2.0 FS:

  • скорость обмена до 12 Мбит/с;
  • возможность реализации USB FS-устройств;
  • наличие встроенного резонатора;
  • поддержка до 16 конечных точек;
  • поддержка Link Power Management, позволяющая расширить рамки режимов потребления;
  • поддержка BCD версии v1.2, обеспечивающая возможность работы с зарядными устройствами с выходным током до 1,5 А.

Блок-схема модуля USB FS показана на рисунке 31. Аналоговый трансивер отвечает за формирование физических сигналов. Существует несколько типов прерываний от USB, которые поступают на контроллер прерываний. Интерфейс с APB позволяет обмениваться данными с USB-модулем. Вспомогательный таймер и буфер пакетов необходимы для работы в режимах пониженного потребления.

Рис. 31. Блок-схема модуля USB FS

Рис. 31. Блок-схема модуля USB FS

Система восстановления тактового сигнала CRS позволяет работать без внешнего резонатора и обходится встроенным высокочастотным резонатором HSI48. Прерывания от USB FS поступают на одну из линий NVIC. USB FS способен пробуждать микроконтроллер из спящего режима (из режима Stop) при выходе из режима USB Suspend mode.

Стоит отметить, что модуль USB FS может быть активным в режиме Run. В режимах Sleep и Stop модуль должен находиться в состоянии ожидания (USB Suspend mode). В режимах Low Power Run и Low Power Sleep работа модуля невозможна.

Подробную информацию о работе с USB можно получить на сайте usb.org и из сопутствующих руководств, например, AN4879 и AN4775.

USB Type-C Power Delivery (UCPD)

Модуль UCPD (USB Type C/Power Delivery) позволяет микроконтроллеру напрямую подключаться к выводам СС1 и СС2 разъема USB Type C. UCPD может быть настроен в качестве DFP-порта (Downstream Facing Port) и в качестве UFP-порта (Upstream Facing Port). Кроме того, возможно переключение между DFP и UFP благодаря поддержке протокола FRS (Fast Role Swap). UCPD обеспечивает прием и передачу данных, в том числе с привлечением DMA.

На рисунке 32 показана упрощенная схема UCPD, которая содержит два наиболее важных блока:

  • блок регистров, который тактируется от PCLK и используется программой для конфигурации и управления модулем UCPD;
  • UCPD-контроллер, который отвечает за кодирование и декодирование данных, контроль CRC и управление передачей данных.

Рис. 32. Блок-схема модуля UCPD

Рис. 32. Блок-схема модуля UCPD

Преимуществами UCPD являются:

  • встроенный PHY-контроллер с резисторами подтяжки;
  • поддержка режима обнаружения «мертвой батареи»;
  • аппаратное управление кадрами при приеме и передаче (программа отвечает только за непосредственную работу с данными).

Встроенный UCPD-модуль совместим со спецификациями USB Type-C Rev. 1.2 и USB Power Delivery Rev. 3.0. PHY-контроллер поддерживает только режим СС. Таким образом, для работы может использоваться только кабель USB Type‑C.

Модуль сброса и тактирования (RCC) использует для сброса модуля UCPD сигнал nPREeset. Тактирование UCPD осуществляется от следующих источников:

  • PCLK для обмена данными между периферийной шиной APB и регистрами управления;
  • UsbPdCLK для тактирования ядра UCPD.

На рисунке 33 поясняется назначение выводов модуля UCPD. От разъема USB Type-C к контроллеру подключаются только выводы UCPD_CC1 и UCPD_CC2. Вывод UCPD_FRSTX используется для управления внешним транзистором, который выполняет подтяжку выводов СС1 или СС2 к земле, обеспечивая тем самым смену ролей этих выводов. Выводы UCPD_DBCC1 и UCPD_DBCC2 необходимы для поддержки функции обнаружения неисправных аккумуляторов. С их помощью модуль UCPD сообщает о неисправности, подтягивая UCPD_DBCC1 к UCPD_CC1, а UCPD_DBCC2 – к UCPD_CC2.

Рис. 33. Выводы модуля UCPD

Рис. 33. Выводы модуля UCPD

UCPD-модуль имеет встроенные подтягивающие резисторы Rp и Rd на обоих выводах СС1 и СС2. Эти резисторы, согласно спецификации USB PD, необходимы для обнаружения подключения, распознавания ориентации подключения разъема, индикации мощности, доступной по умолчанию (передаваемый ток зависит от номинала Rp).

Выводы СС1 и/или СС2 необходимы для передачи данных. Неиспользуемый вывод СС может использоваться для подачи питания для микросхем, интегрированных в USB-кабель, который подключается к VCONN. Его также можно отключить с помощью поля CCENABLE регистра UCPD_CR.

Подключение подтягивающих резисторов поясняется на рисунке 34. UCPD может работать в режимах как DFP, так и UFP. В режиме DFP (если кабель не перевернут) вывод СС1 подключается к 3,3 В через резистор Rp, причем сопротивление резистора определяет мощность, которую по умолчанию может обеспечивать источник на линии VBUS. Вывод СС2 в режиме DFP (если кабель не перевернут) подключается к VCONN. VCONN представляет собой источник 5 В с мощностью 1 Вт. Он необходим для питания маломощных устройств или микросхем, интегрированных в USB-кабель. В режиме UFP (если кабель не перевернут) выводы СС1 и СС2 подключаются к земле через резистор Rd, сопротивление которого составляет 5,1 кОм.

Рис. 34. Подключение подтягивающих резисторов

Рис. 34. Подключение подтягивающих резисторов

Протокол FRS (Fast Role Swap) позволяет переключаться между режимами DFP и UFP. То есть устройство, которое по умолчанию было источником энергии, становится приемником, и наоборот. При необходимости смены режима требуется подключить соответствующий вывод СС к земле. Для этого нужны внешние NMOS-транзисторы. Один из транзисторов будет управляться выводом UCPD_FRSTX, а второй – обычным GPIO, как показано на рисунке 35. Наличие FRS можно контролировать с помощью бита FRSRXEN регистра UCPD_CR.

Рис. 35. Переключение между режимами источника и приемника

Рис. 35. Переключение между режимами источника и приемника

Цифровая часть модуля UCPD выполняет следующие функции:

  • мониторинг напряжения и защиту от дребезга;
  • обнаружение Fast Role Swap (FRS);
  • расчет и проверку CRC;
  • кодирование/декодирование 4b5b;
  • кодирование/декодирование BMC (Bi-phased Mark);
  • прием и передачу наборов команд;
  • восстановление тактовой частоты при приеме преамбулы;
  • работу с данными в байтовом режиме и генерацию запросов DMA;
  • деление тактовой частоты для получения необходимой частоты сигналов на линии СС.

UCPD может пробуждать процессор из режима Stop ( при этом должен быть установлен бит WUPEN в регистре UCPD_CFG2) в следующих случаях:

  • при обнаружении изменения напряжения на выводах СС;
  • при приеме набора команд, совпадающего со значением, указанным в фильтре RXORDSETEN[8:0].

Для получения подробной информации по работе UCPD следует обратиться к документу AN5225 Application note USB Type-C™ Power Delivery using STM32xx Series MCUs and STM32xxx Series MPUs.

CAN FD

Интерфейс FD CAN (Flexible Data-rate Controller Area Network) позволяет микроконтроллерам STM32G4 обмениваться данными с различными устройствами, подключенными к общей дифференциальной двухпроводной шине CAN (рисунок 36). Среди важнейших преимуществ FD CAN в первую очередь следует отметить:

  • простоту организации шины (двухпроводная шина),
  • возможность одновременного подключения множества ведущих устройств,
  • объектно-ориентированную концепцию обмена данными, при которой отсутствуют адреса и используются идентификаторы;
  • минимальную задержку распространения сообщений;
  • широкие возможности по обнаружению ошибок и управлению потоком сообщений.

Рис. 36. Организация передачи данных по шине FD CAN

Рис. 36. Организация передачи данных по шине FD CAN

В составе микроконтроллеров STM32G4 может быть до трех встроенных модулей FD-CAN (FD-CAN1, FD-CAN2 и FD-CAN3), каждый из которых позволяет гибко настраивать параметры передачи.

Блок-схема модулей FD-CAN на примере FD-CAN1 представлена на рисунке 37. Модуль FD-CAN состоит из двух доменов с независимым тактированием, поэтому для взаимодействия между ними необходимы дополнительные блоки синхронизации. Обработчик принимаемых сообщений (обработчик Tx) отвечает за пересылку сообщений из RAM в ядро FD-CAN. Обработчик Rx контролирует трансфер сообщений из ядра FD-CAN в память сообщений RAM. Память сообщений объемом 0,8 кбайт содержит не только данные, но и фильтры, буферы и FIFO.

На схеме также отображены основные входные и выходные сигналы FD-CAN:

  • fdcan_ck – сигнал тактирования ядра, который определяет частоту передачи по шине FD-CAN;
  • fdcan_apb – сигнал тактирования шины APB, необходимый для обмена между APB и регистрами FD-CAN, а также между APB и памятью сообщений RAM;
  • fdcan_intr0_it – сигнал прерывания 0;
  • fdcan_intr1_it – сигнал прерывания 1;
  • fdcan_ts[0:15] – регистр временной метки, которую формирует встроенный таймер модуля FD-CAN. Временная метка может использоваться как при приеме, так и при отправке сообщений;
  • fdcan_rx – вход приемника;
  • fdcan_tx – выход передатчика;
  • APB bus – 32-битный интерфейс с APB.

Рис. 37. Блок-схема модулей FD CAN

Рис. 37. Блок-схема модулей FD CAN

Встроенные контроллеры FD-CAN поддерживают базовые протоколы CAN 2.0 A и B со скоростями передачи данных до 1 Мбит/с, а также протокол CAN FD версии 1, который позволяет передавать в одном фрейме до 64 байт со скоростью до 8 Мбит/с. Контроллеры FD-CAN поддерживают функции протокола 11898-1: 2015, а также 11-битные и 29-битные идентификаторы. Каждый модуль FD-CAN имеет два выхода прерывания и 24 флага прерываний.

Для каждого модуля FD-CAN выделено 0,8 кбайт RAM, в которых размещены:

  • блок для хранения 11-битных идентификаторов (28 элементов);
  • блок для хранения 29-битных идентификаторов (8 элементов);
  • два приемных FIFO-буфера объемом по пятьдесят четыре 32-битных слова. Каждый буфер может хранить до трех сообщений;
  • FIFO-буфер передатчика объемом пятьдесят четыре 32-битных слова (три сообщения);
  • FIFO-буфер событий для передатчика, который хранит временные метки сообщений и их ID.

FD-CAN поддерживает стандартный формат кадра (CAN 2.0 A и B) и два дополнительных формата FD CAN (рисунок 37). Формат LFM (Long Frame Mode) позволяет передавать до 64 байт данных в одном кадре. Формат FFM (Fast Frame Mode) предполагает передачу контрольного поля, данных, CRC на повышенной скорости по сравнению с началом и концом кадра. Обычно это 8 Мбит/с. Форматы LFM и FFM могут комбинироваться, как показано на нижней диаграмме рисунка 38.

Рис. 38. Форматы кадров, поддерживаемые FD CAN

Рис. 38. Форматы кадров, поддерживаемые FD CAN

В составе модуля FD CAN есть блок битовых таймингов. Как и в других семействах STM32, время передачи каждого бита делится на три фазы. Длительность каждой фазы может быть настроена пользователем.

Для компенсации времени задержки, вносимой внешней микросхемой трансивера, в составе FD CAN реализована цепь компенсации. Для ее активизации используется бит TDC в регистре DBTP.

Модуль FD CAN может находится в трех состояниях:

  • инициализация;
  • нормальный режим;
  • режим сна.

После сброса микроконтроллера FD CAN находится в режиме инициализации. Прежде чем начать обмен, программа должна настроить битовые тайминги, определить размещение RAM. После этого CAN-контроллер выполняет синхронизацию и ожидает появления на шине 11 последовательных рецессивных битов.

В нормальном режиме пользователь самостоятельно определяет режим работы FD CAN. Это:

  • классический CAN CAN 2.0 A и B;
  • формат FD CAN: LFM (Long Frame Mode) и/или FFM (Fast Frame Mode);
  • Restricted mode. В этом режиме CAN-контроллер только принимает сообщения и посылает подтверждение ACK, но сам ничего не передает;
  • Bus Monitoring mode. В этом режиме CAN-контроллер только принимает сообщения, но не посылает подтверждение ACK и сам ничего не передает;
  • тестовые режимы.

Для работы в тестовых режимах используется регистр FDCAN_TESR. Для разрешения доступа к нему необходимо установить бит Test в регистре CCCR. В тестовом режиме пользовательская программа может управлять выводом FDCAN_TX и считывать актуальное состояние вывода FDCAN_RX. Пользователь может принудительно выставить на линии FDCAN_TX рецессивное или доминантное состояния.

Кроме того, FD CAN поддерживает два специальных тестовых режима:

  • передача со внешней петлей (External loopback mode), когда CAN-контроллер передает сообщения стандартным образом (на вывод FDCAN_TX) и сам же их принимает, помещая в приемный буфер. Вход FDCAN_RX отключен от внешнего вывода микроконтроллера;
  • передача со внутренней петлей (Internal loopback mode), при которой выход FDCAN_TX и вход FDCAN_RX объединены между собой и отключены от внешних выводов микроконтроллера. CAN-контроллер передает сообщения и сам же их принимает, помещая в приемный буфер.

Модуль FD CAN позволяет автоматически отфильтровывать сообщения по их идентификатору. Для этого используются два многоэлементных фильтра: для 11-битных идентификаторов (до 28 элементов) и для 29-битных идентификаторов (до 8 элементов). Фильтры настраиваются независимо друг от друга и могут работать совместно с приемными буферами. При приеме сообщения его ID последовательно сравнивается с элементами фильтра. При совпадении процесс сравнения останавливается и сообщение копируется в приемный буфер.

Каждый элемент фильтра может быть индивидуально настроен для работы в одном из режимов, таких как:

  • диапазонный режим – прием сообщений с идентификаторами из заданного диапазона;
  • списочный режим – прием сообщений по точному совпадению идентификатора и фильтра;
  • масочный режим – прием сообщений по заданным маскирующим битам фильтра.

Каждый из приемных FIFO-буферов Rx FIFO 0 и Rx FIFO 1 может хранить до трех сообщений. Сообщения попадают в буферы после прохождения фильтра. Регистры FDCAN_RXF0S и FDCAN_RXF1S доступны только для чтения и содержат следующую информацию:

  • позицию считанного сообщения;
  • позицию записанного в буфер сообщения;
  • число хранящихся сообщений;
  • флаг потери сообщения;
  • флаг заполнения буфера.

Существуют два варианта работы приемных буферов при переполнении (рисунок 39). Режим блокирования новых сообщений (Rx FIFO Blocking mode) установлен по умолчанию. Если буфер настроен для работы в этом режиме, то при полном его заполнении новые сообщения отбрасываются. И наоборот, в режиме перезаписи старых сообщений (Rx FIFO Overwrite mode) происходит запись нового сообщения поверх самого старого.

Рис. 39. Варианты работы приемных буферов Rx FIFO при переполнении

Рис. 39. Варианты работы приемных буферов Rx FIFO при переполнении

У каждого модуля FD CAN есть собственный Tx-буфер передатчика размером три элемента (сообщения). Этот буфер может работать в двух режимах:

  • в режиме FIFO-буфера (Tx FIFO mode) сообщения передаются в том же порядке, в котором они помещаются программой в передающий буфер;
  • в режиме очереди (Tx Queue mode) каждый из трех элементов буфера становится независимым от других, а передача сообщений ведется в соответствии с их приоритетами. В случае неудачной попытки передачи сообщения в режиме Tx Queue mode устанавливается бит TXBCR.

Для обработки событий при передаче (Tx event handling) у каждого модуля FD CAN есть собственный буфер событий Tx Event FIFO. В этом буфере хранится информация о статусе передачи. Разделение самого передаваемого сообщения и информации о статусе передачи оказывается очень удобным, так как пользователь может сразу записывать новое сообщение в буфер передатчика и не тратить время на копирование информации о статусе передачи. Если же буфер Tx Event FIFO переполняется, то генерируется соответствующее прерывание.

FD CAN имеет две линии прерывания и 24 источника прерываний. Подробнее о видах прерываний можно прочитать в руководствах по STM32G4.

Модуль FD CAN может работать в режимах Run/Low Power Run и Sleep/Low Power Sleep. В режиме Stop работа модуля невозможна. При переходе в режим Stop или Standby необходимо убедиться, что FD CAN закончил передачу сообщений.

Стоит отметить, что в режиме отладки микроконтроллера FD CAN не останавливается (например, в точках останова), что может привести к переполнению приемного буфера. Кроме того, запись и чтение регистров с типом доступа «Reset on read» или «Set on read» заблокирована.

Аудиоинтерфейс SAI

Интерфейс SAI позволяет микроконтроллерам STM32G4 взаимодействовать со внешними элементами аудиосистем, такими как операционные усилители, АЦП, ЦАП, микрофоны или аудиопроцессоры. Данный интерфейс отличается возможностью чрезвычайно гибкой настройки и поддерживает большое количество аудиостандартов.

SAI может быть запрограммирован для работы в четырех режимах:

  • режим Free protocol позволяет гибко настраивать параметры для работы со стандартами I2S, PCM, TDM;
  • режим SPDIF protocol позволяет передавать аудиосемплы в соответствии со стандартом IEC 60958;
  • режим PDM Interface позволяет подключать до шести цифровых микрофонов, которые могут быть использованы для создания микрофонного массива с изменяемой диаграммой направленности или для простого захвата речи;
  • режим AC97 protocol позволяет работать в режиме AC97-контроллера.

Модуль SAI состоит из двух блоков (рисунок 40) и имеет такие ключевые особенности как:

  • поддержка всех стандартных частот дискретизации аудиопотока: 44,1/16/48/96/128 кГц;
  • работа в качестве ведомого или ведущего в последовательных полудуплексных и дуплексных интерфейсах;
  • собственные входы и выходы, в том числе DMA и прерывания, а также встроенный генератор у каждого блока SAI;
  • возможность синхронизации блоков внутри одного модуля SAI или синхронизации SAI-интерфейсов между собой;
  • наличие двух FIFO-буферов объемом восемь слов.

Рис. 40. Модуль SAI состоит из двух блоков

Рис. 40. Модуль SAI состоит из двух блоков

Блок-схема модуля SAI представлена на рисунке 41. Она состоит из двух независимых блоков: A и B. Каждый блок имеет свой собственный интерфейс с шиной APB, канал прерывания и DMA, встроенный генератор тактового сигнала и FIFO-буфер. Блоки настраиваются независимо, но могут синхронизироваться между собой. Внешний последовательный интерфейс состоит из четырех линий:

  • FS – сигнал кадровой синхронизации;
  • SCK – сигнал тактирования;
  • SD – линия данных;
  • МCLK – тактовый сигнал ведущего.

PDM-интерфейс позволяет подключать до шести цифровых микрофонов: D – линии данных, поступающих  от микрофонов, CK – тактовый сигнал, формируемый модулем SAI.

Рис. 41. Блок-схема модуля SAI, состоящего из двух блоков

Рис. 41. Блок-схема модуля SAI, состоящего из двух блоков

Тактирование модуля SAI может выполняться от системного тактового сигнала (ck_sys), от выхода DIVQ модуля PLLSYS, от HSI и от вывода I2SCKIN.

Работа в режиме Free protocol предполагает поддержку различных протоколов (I2S, PCM, TDM) и возможность гибкой настройки параметров интерфейса: размера и положения данных, порядка передачи (LSB/MSB), размера кадров, периода кадров, полярности, числа слотов и так далее.

SAI поддерживает до 16 слотов, активность которых настраивается индивидуально. При необходимости на время неиспользуемого слота линия данных может переводиться в высокоимпедансное состояние. SAI также позволяет управлять положением данных в слоте и переходить в высокоимпедансное состояние в неиспользуемой части слота. Это полезно, когда линия данных разделяется между несколькими устройствами.

SAI позволяет работать в режимах ведущего или ведомого. В режиме ведущего SAI формирует сигнал тактирования (MCLK) для внешних устройств, а также сигналы FS и SCK. При этом линия данных может быть двунаправленной. В режиме ведомого сигнал MCLK не используется. Модуль принимает сигналы FS и SCK, а линия данных может быть двунаправленной.

Тайминги в режиме ведомого генерирует внешнее устройство. В режиме ведущего тайминги могут быть гибко настроены пользователем. Стоит отметить, что генерация сигнала MCLK возможна даже в том случае, когда сам модуль SAI неактивен.

По умолчанию блоки A и B независимы, однако при необходимости получения двух линий данных они могут быть синхронизированы. При этом блоки будут использовать общие сигналы кадровой синхронизации FS и тактирования SCK. Кроме того, они должны иметь одинаковые настройки таймингов и параметров передачи. В то же время роли блоков могут отличаться: они могут быть одновременно ведомыми, или один будет ведомым, а второй ведущим.

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

Модуль SAI поддерживает функцию обнаружения ложных кадров (Anticipated/Late Frame Error), которая позволяет генерировать прерывание при обнаружении глитчей на линиях SCK/FS. После появления такой ошибки программа должна перезапустить интерфейс SAI.

По желанию пользователя модуль SAI может генерировать прерывания при переполнении приемного буфера или при опустошении передающего буфера.

Работа в режиме SPDIF protocol. SAI поддерживает стандарт IEC 60958 и может генерировать аудиосемплы с привлечением протокола SPDIF. Модуль SAI автоматически генерирует преамбулы и бит паритета, а программа должна обрабатывать биты CS, U и V. Разрядность данных имеет фиксированное значение 24 бита. Кодирование выполняется с помощью манчестерского кода.

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

SAI автоматически генерирует следующие преамбулы:

  • преамбула B сообщает о старте нового блока и запуске канала A;
  • преамбула M сообщает о старте канала A в тех случаях, когда не совпадает с началом блока;
  • преамбула W сообщает о старте канала B.

Подфреймы имеют длину 32 бита и поделены на три поля:

  • преамбула;
  • полезные данные (24 бита);
  • биты статуса V, U, CS, P.

Работа в режиме PDM Interface. В этом режиме PDM-интерфейс преобразует поток данных, принимаемый от микрофонов, в поток TDM-фреймов. PDM ожидает приема 8 бит от микрофона перед тем как сформировать TDM-фрейм. Кроме того, PDM позволяет добавлять восьмибитную задержку для каждого микрофона. Эти задержки важны в приложениях, где используется микрофонная матрица с изменяемой направленностью, так как они помогают преодолеть ограничения, связанные с размещением микрофонов.

При активации PDM-интерфейса подблок A не может быть использован. Он используется для приема сообщений PDM и должен быть настроен как TDM RX MASTER.

Работа в режиме AC97 protocol. В этом режиме SAI выполняет функции AC97-контроллера. Количество слотов имеет фиксированное значение, равное 13, а длина фрейма составляет 256 бит. Нулевой слот выступает в качестве метки (Tag slot) и имеет длину 16 бит. Остальные слоты имеют длину 20 бит и используются для данных.

SAI позволяет генерировать 7 типов прерываний и запросы DMA.

Модуль SAI сохраняет активность в режимах Run/Low Power Run и Sleep/Low Power Sleep.

Литература

  1. STM32G4 – QUADSPI. Quad-SPI memory interface. Revision 1.0.
  2. STM32G4 – FMCI. Flexible memory controller. Revision 1.0.
  3. STM32G4 – USART. Universal Synchronous/Asynchronous Reseiver/Transmitter Interface. Revision 1.0.
  4. STM32G4 – SPI. Serial Perepherial Interface. Revision 1.0.
  5. STM32G4 – I2C. Inter-Integrated Circuit. Revision 1.0.
  6. STM32G4 – IRTIM. Infrared Interface. Revision 1.0.
  7. STM32G4 – USB device. USB 2.0 Full Speed interface. Revision 1.0.
  8. STM32G4 – UCPD. USB Type C/Power Delivery interface. Revision 1.0.
  9. STM32G4 – FD-CAN. Flexible Data rate Controller Area Network interface. Revision 1.0.
  10. STM32G4 – SAI. Serial Audio Interface. Revision 1.0.
•••

Наши информационные каналы

О компании ST Microelectronics

Компания STMicroelectronics является №1 производителем электроники в Европе. Компоненты ST широко представлены в окружающих нас потребительских товарах – от iPhone до автомобилей разных марок. Лидеры индустриального рынка выбирают компоненты ST за их надежность и выдающиеся технические параметры. В компании ST работает 48 000 сотрудников в 35 странах. Производственные мощности расположены в 12 странах мира. Более 11 тысяч сотрудников заняты исследованиями и разработками – инновационное лидерство ...читать далее

Товары
Наименование
NUCLEO-G474RE (ST)
NUCLEO-G431RB (ST)
B-G474E-DPOW1 (ST)
STM32G431C8T6 (ST)
STM32G431K8T6 (ST)
STM32G441KBU6 (ST)
STM32G473CBU6 (ST)
STM32G473CET6 (ST)
STM32G483VET6 (ST)
STM32G474CBT6 (ST)
STM32G484CEU6 (ST)