STM32F407, интерфейс SPI |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь приведен перевод секции 28 Serial peripheral interface (SPI) из даташита RM0090 компании ST, посвященный микроконтроллерам STM32F405xx/07xx, STM32F415xx/17xx, STM32F42xxx и STM32F43xxx (с акцентом на STM32F407xx). Непонятные термины и сокращения см. в Словарике [3]. [SPI: введение] Интерфейс SPI предоставляет 2 главные функции - либо поддержка протокола SPI, либо протокола передачи звука I2S (по умолчанию выбран SPI). Можно программно переключать режим интерфейса с SPI на I2S. Прим. переводчика: в этом переводе описание режима I2S опущено. Последовательный периферийный интерфейс (serial peripheral interface, SPI) позволяет синхронно обмениваться данными с внешними устройствами в режимах полудуплекса и полного дуплекса. Интерфейс может быть сконфигурирован как мастер, и тогда он предоставляет сигнал тактирования данных (SCK) для внешнего подчиненного устройства. Интерфейс также может работать в конфигурации с несколькими мастерами (multimaster). SPI может использоваться для различных целей, включая синхронные симплексные передачи по двум проводам, или надежный обмен данными с использованием проверки CRC. I2S также является синхронным последовательным интерфейсом для обмена данными. Он может адресовать 4 разных аудиостандарта, включая стандарт I2S Philips, стандарты с выравниванием по старшему и младшему битам (MSB, LSB justified), и стандарт PCM. I2S может работать как подчиненное устройство или как главное (slave или master device) в режиме полного дуплекса (задействовано 4 вывода) или в режиме полудуплекса (задействовано 3 вывода). Такты master могут быть предоставлены в интерфейсе для внешнего slave-компонента шины, когда I2S сконфигурирован как master обмена.
Предупреждение: поскольку некоторые выводы SPI1 и SPI3/I2S3 могут быть привязаны (mapped) на выводы, используемые интерфейсом JTAG (SPI1_NSS на JTDI, SPI3_NSS/I2S3_WS на JTDI и SPI3_SCK/I2S3_CK на JTDO), то у Вас есть следующие варианты: За дополнительной информацией по поводу конфигурирования выводов интерфейсов JTAG/SWD обратитесь к секции даташита 8.3.2: I/O pin multiplexer and mapping (даташит RM0090). [SPI в микроконтроллере STM32F407ZGT6 и плата Olimex STM32-P407] На макетной плате Olimex STM32-P407 установлен микроконтроллер STM32F407ZGT6, у которого имеется всего 3 порта SPI: SPI1, SPI2, SPI3. На картинке показана цоколевка выводов корпуса LQFP144 микроконтроллера STM32F407ZGT6, которые могут быть задействованы для SPI1, SPI2, SPI3. 28. PC2/SPI2_MISO/OTG_HS_ULPI_DIR/ETH_MII_TXD2/ADC123_IN12 29. PC3/SPI2_MOSI/I2S2_SD/OTG_HS_ULPI_NXT/ETH_MII_TX_CLK/ADC123_IN13 40. PA4/SPI1_NSS/SPI3_NSS/USART2_CK/DCMI_HSYNC/OTG_HS_SOF/I2S3_WS/ADC12_IN4/DAC1_OUT 41. PA5/SPI1_SCK/OTG_HS_ULPI_CK/TIM2_CH1_ETR/TIM8_CHIN/ADC12_IN5/DAC2_OUT 42. PA6/SPI1_MISO/TIM8_BKIN/TIM13_CH1/DCMI_PIXCLK/TIM3_CH1/TIM1_BKIN/ADC12_IN6 43. PA7/SPI1_MOSI/TIM8_CH1N/TIM14_CH1/TIM3_CH2/ETH_MII_RX_DV/TIM1_CH1N/RMII_CRS_DV/ADC12_IN7 69. PB10/SPI2_SCK/I2S2_CK/I2C2_SCL/USART3_TX/OTG_HS_ULPI_D3/ETH_MII_RX_ER/OTG_HS_SCL/TIM2_CH3 73. PB12/SPI2_NSS/I2S2_WS/I2C2_SMBA/USART3_CK/TIM1_BKIN/CAN2_RX/OTG_HS_ULPI_D5/ETH_RMII_TXD0/ETH_MII_TXD0/OTG_HS_ID 74. PB13/SPI2_SCK/I2S2_CK/USART3_CTS/TIM1_CH1N/CAN2_TX/OTG_HS_ULPI_D6/ETH_RMII_TXD1/ETH_MII_TXD1/OTG_HS_VBUS 75. PB14/SPI2_MISO/TIM1_CH2N/TIM12_CH1/OTG_HS_DM/USART3_RTS/TIM8_CH2N 76. PB15/SPI2_MOSI/I2S2_SD/TIM1_CH3N/TIM8_CH3N/TIM12_CH2/OTG_HS_DP 96. PC6/SPI2_MCK/TIM8_CH1/SDIO_D6/USART6_TX/DCMI_D0/TIM3_CH1 97. PC7/SPI3_MCK/TIM8_CH2/SDIO_D7/USART6_RX/DCMI_D1/TIM3_CH2 110. PA15/JTDI/SPI3_NSS/I2S3_WS/TIM2_CH1_ETR/SPI1_NSS 111. PC10/SPI3_SCK/I2S3_CK/UART4_TX/SDIO_D2/DCMI_D8/USART3_TX 112. PC11/UART4_RX/SPI3_MISO/SDIO_D3/DCMI_D4/USART3_RX 113. PC12/UART5_TX/SDIO_CK/DCMI_D9/SPI3_MOSI/I2S3_SD/USART3_CK 133. PB3/JTDO/TRACESWO/SPI3_SCK/I2S3_CK/TIM2_CH2/SPI1_SCK 134. PB4/NJTRST/SPI3_MISO/TIM3_CH1/SPI1_MISO 135. PB5/I2C1_SMBA/CAN2_RX/OTG_HS_ULPI_D7/ETH_PPS_OUT/TIM3_CH2/SPI1_MOSI/SPI3_MOSI/DCMI_D10/I2S3_SD 140. PB9/SPI2_NSS/I2S2_WS/TIM4_CH4/TIM11_CH1/OTG_FS_SDA/SDIO_D5/DCMI_D7/I2C1_SDA/CAN1_TX Порты SPI могут работать в полудуплексе (поочередно переключаясь с приема на передачу) и на полном дуплексе. SPI1 может работать со скоростью до 42 мегабит/сек, SPI2 и SPI3 до 21 мегабит/сек. Аппаратное вычисление и генерация CRC может поддерживать базовые режимы работы с картами SD/MMC. SPI таке может обслуживаться контроллером DMA. Из-за того, что ножки микроконтроллера STM32F407ZGT6 выполняют каждая множество функций, и на плате STM32-P407 установлена различная периферия, подключенная к выводам SPI, то использовать периферию SPI можно только если от чего-то отказаться. SPI1. У этого интерфейса сигналы NSS, SCK, MISO, подключены к видеокамере, так что для использования SPI1 нужно видеокамеру выключить. Сигналы NSS, SCK, MOSI могут также выходить на чип аудиовывода CS4344-CZZ. Также сигнал MOSI подключен к чипу Ethernet KS8721BLMM, так что при использовании SPI1 работать с сетью не получится. SPI1 подключен к ядру микроконтроллера через шину APB2. SPI2. Сигнал MOSI может приходить на видеокамеру. Также многие сигналы совмещены с сигналами интерфейсов USB, так что в случае использования USB работать с SPI2 не получится. SPI2 подключен к ядру микроконтроллера через шину APB1. SPI3. Этот интерфейс подключен на разъем расширения UEXT Olimex, и его использовать удобнее всего, но только в том случае, если отказаться от слота карт microSD. Также сигналы NSS, SCK, MOSI могут приходить на чип аудиовывода CS4344-CZZ. MISO может быть подключен к видеокамере. Если подключать к SPI внешнее устройство через коннектор UEXT, то его выборку нужно генерировать программно, через порт GPIO PF8. SPI3 подключен к ядру микроконтроллера через шину APB1. [Основные возможности SPI] • Полнодуплексная синхронная передача данных с задействованием 3 сигнальных линий. • Full duplex communication • Half-duplex communication (only transmitter or receiver) • Master or slave operations • 8-bit programmable linear prescaler to reach accurate audio sample frequencies (from 8 kHz to 192 kHz) • Data format may be 16-bit, 24-bit or 32-bit • Packet frame is fixed to 16-bit (16-bit data frame) or 32-bit (16-bit, 24-bit, 32-bit data frame) by audio channel • Programmable clock polarity (steady state) • Underrun flag in slave transmission mode, overrun flag in reception mode (master and slave), and Frame Error flag in reception and transmission mode (slave only) • 16-bit register for transmission and reception with one data register for both channel sides • Supported I2S protocols: – I2S Phillps standard – MSB-justified standard (left-justified) – LSB-justified standard (right-justified) – PCM standard (with short and long frame synchronization on 16-bit channel frame or 16-bit data frame extended to 32-bit channel frame) • Data direction is always MSB first • DMA capability for transmission and reception (16-bit wide) • Master clock may be output to drive an external audio component. Ratio is fixed at 256 ? FS (where FS is the audio sampling frequency) • Both I2S (I2S2 and I2S3) have a dedicated PLL (PLLI2S) to generate an even more accurate clock. • I2S (I2S2 and I2S3) clock can be derived from an external clock mapped on the I2S_CKIN pin. [Основное функциональное описание SPI] На рис. 246 показана блочная диаграмма SPI. Рис. 246. SPI block diagram. Обычно SPI подключается к внешним устройствам 4 сигнальными линиями: • MISO: Master In / Slave Out, сигнал передачи данных от slave к master. Этот вывод может использоваться для передачи данных в режиме slave и для приема данных в режиме master. На рис. 247 показан пример соединения друг с другом одного устройства master с одним устройством slave. Рис. 247. Single master / single slave application. Примечание (1): здесь вывод NSS сконфигурирован как вход. Выводы MOSI соединены друг с другом, как и выводы MISO. При этом данные последовательно передаются между master и slave, первым идет самый старший бит (MSB). Обмен всегда начинает master. Когда устройство master передает данные к устройству slave через вывод MOSI, устройство slave отвечает данными через вывод MISO. Это реализует полнодуплексный двухсторонний обмен данными, которые синхронизированы одним и тем же тактовым сигналом (этот сигнал предоставляет устройство master через вывод SCK). [Управление выводом выборки slave (NSS)] Аппаратное или программное управление выводом NSS может быть установлено битом SSM в регистре SPI_CR1. • Программное управление NSS. когда SSM = 1. Выборка slave select управляется внутри микроконтроллера программно по значению бита SSI в регистре SPI_CR1. Внешний вывод NSS остается свободным, и может использоваться в приложении для других целей. [Фаза и полярность SCK] Можно запрограммировать 4 варианта работы, используя биты CPOL и CPHA в регистре SPI_CR1. Бит CPOL (clock polarity) управляет значением устойчивости (steady state) такта, когда данные не передаются. Этот бит влияет на оба режима - и master, и slave. Если бит CPOL сброшен, то SCK имеет лог. 0 в состоянии ожидания. Если CPOL установлен, то SCK имеет лог. 1 в состоянии ожидания. Если бит CPHA (clock phase, фаза такта) установлен, второй перепад на выводе SCK (это будет спад уровня, если CPOL сброшен, и нарастание уровня, если CPOL установлен) является стробом захвата старшего бита (MSBit). Данные будут захватываться по событию второго перехода состояния тактов. Если бит CPHA сброшен, то первый перепад на выводе SCK (это будет спад уровня, если установлен бит CPOL, и нарастание уровня, если бит CPOL сброшен) будет стробом захвата старшего бита данных (MSBit). Данные будут захватываться по событию первого перепада тактов SCK. Комбинация битов CPOL (clock polarity) и CPHA (clock phase) выбирают перепад сигнала тактов, по которому будет осуществляться захват данных. На рис. 248 показано, как SPI передает данные в 4 вариантах настройки битов CPHA и CPOL. Диаграмма может быть интерпретирована как диаграмма времени master или slave, где выводы SCK, MISO, MOSI напрямую соединены между устройствами master и slave. Примечание: перед тем, как поменять биты CPOL/CPHA, SPI должен быть запрещен сбросом бита SPE. Master и slave должны быть запрограммированы на одинаковые диаграммы управления сигналами. Состояние ожидания (idle state) SCK должно соответствовать выбранной полярности в регистре SPI_CR1 (переводом SCK в лог. 1 при CPOL=1 или переводом SCK в лог. 0 при CPOL=0). Формат фрейма данных (8 или 16 бит), выбираемый битом DFF в регистре SPI_CR1, определяет длину данных во время передачи/приема. Рис. 248. Data clock timing diagram. Примечание (1): эти диаграммы соответствуют сброшенному биту LSBFIRST в регистре SPI_CR1 (бит MSB идет первым в потоке данных). Формат фрейма данных. Данные могут сдвигаться на выход либо MSB битом вперед, либо LSB битом вперед, в зависимости от бита LSBFIRST в регистре SPI_CR1. Длина каждого фрейма данных (8 или 16 бит) зависит от состояния бита DFF в регистре SPI_CR1. Выбранный формат фрейма влияет и на прием, и на передачу. [Конфигурирование SPI в режиме slave] В конфигурации slave тактовый сигнал будет приниматься через вывод SCK от устройства master. Значения, установленные в битах BR[2:0] регистра SPI_CR1 никак не будет влиять на скорость передачи данных. Примечание: рекомендуется разрешить работу SPI до того, как master начнет передавать тактовый сигнал. Если этого не сделать, то может произойти нежелательная передача данных. Регистр данных slave должен быть готов до первого перепада тактового обмена, или до окончания происходящего обмена. Важно установить полярность обмена тактов в состояние steady (устойчивый уровень) до того, как и slave и master будут разрешены. Для конфигурирования SPI в режиме slave следуйте следующей процедуре: 1. Установите бит DFF, чтобы определить 8 или 16 бит для формата фрейма данных. 2. Выберите значение бит CPOL и CPHA, чтобы определить один из 4 видов взаимодействия между передачей бит данных и тактовым сигналом (см. рис. 248). Чтобы передача данных была корректной, настройка бит CPOL и CPHA должна соответствовать друг другу на устройствах slave и master. Этот шаг выполнять не нужно, если выбран режим TI битом FRF в регистре SPI_CR2. 3. Порядок бит фрейма (MSB первый или LSB первый) зависит от значения бита LSBFIRST в регистре SPI_CR1) должен быть одинаковым для устройства slave и устройства master. Этот шаг выполнять не нужно, когда выбран режим TI. 4. В аппаратном режиме управления выборкой (см. описание вывода NSS) вывод NSS должен быть подключен к сигналу низкого уровня во время выполнения последовательности передачи фрейма. В программном режиме NSS установите бит SSM и очистите бит SSI в регистре SPI_CR1. Этот шаг не требуется, когда выбран режим TI. 5. Установите бит FRF в регистре SPI_CR2 для выбора режима протокола TI последовательного обмена данными. 6. Очистите бит MSTR и установите бит SPE (оба бита находятся в регистре SPI_CR1) чтобы активировать у микроконтроллера альтернативную функцию SPI на выводах. В этой конфигурации вывод MOSI работает как вход данных, и вывод MISO работает как выход данных. Передача. Байт данных параллельно загружается в буфер Tx во время цикла записи. Последовательность передачи данных начинается, когда устройство slave принимает сигнал тактов и MSB бит данных переходит на вывод MOSI. Остальные биты (7 в формате фрейма 8 бит и 15 бит в формате фрейма 16 бит) загружаются в регистр сдвига. Флаг TXE регистра SPI_SR устанавливается, когда данные загружены из буфера Tx в регистр сдвига, и генерируется прерывание, если установлен бит TXEIE в регистре SPI_CR2. Прием. Для получателя данных передача данных завершится в следующей ситуации: После последнего перепада тактов установиться бит RXNE, копия принятых данных из регистра сдвига переместится в буфер Rx. Когда читается регистр SPI_DR, периферия SPI возвратит это буферизированное значение. Очистка бита RXNE выполняется при чтении регистра SPI_DR. [Протокол TI для SPI в режиме slave] В режиме slave интерфейс SPI совместим с протоколом TI. Бит FRF регистра SPI_CR2 может использоваться для того, чтобы сконфигурировать обмен slave SPI совместимым с протоколом SPI TI. Полярность и фаза тактов принудительно устанавливаются так, чтобы они удовлетворяли требованиям протокола TI независимо от значений, которые установлены в регистре SPI_CR1. Управление NSS также специфично для протокола TI, что делает конфигурирование управления NSS через регистры SPI_CR1 и SPI_CR2 (биты SSM, SSI, SSOE) прозрачным для пользователя. В режиме Slave (см. рис. 249: режим TI Slave одиночная передача, на рис. 250: режим TI Slave продолжающаяся передача) прескалер скорости SPI (baud rate prescaler) используется для управления моментом, когда вывод MISO переходит в третье состояние (отключено, HI-Z). Таким образом, может использоваться любая скорость передачи, позволяя определить этот момент с максимальной гибкостью. Однако скорость передачи главным образом зависит от частоты тактов внешнего master. Время, когда сигнал MISO переходит в отключенное состояние HI-Z, зависит от внутренних пересинхронизаций, и значение скорости устанавливается битами BR[2:0] регистра SPI_CR1. Их значение можно получить по формуле: Примечание: эта фича не работает для обменов с Motorola SPI (бит FRF установлен в 0). Чтобы детектировать ошибки фрейма TI только в режиме передатчика Slave, путем прерывания по ошибке (ERRIE=1), SPI должен быть сконфигурирован в однонаправленный 2-проводный режим путем установки битов BIDIMODE и BIDIOE в 1 (эти биты находятся в регистре SPI_CR1). Когда BIDIMODE установлен в 0, бит OVR установится в 1, потому что регистр данных никогда не читается, и прерывание ошибки будет генерироваться всегда, в то время как если BIDIMODE установлен в 1, дата не приняты и OVR не будет установлен. Рис. 249. Режим TI Slave, одиночная передача. Рис. 250. Режим TI Slave, непрерывная передача. [Конфигурирование SPI в режиме master] В режиме master такты генерируются на ножке SCK, работающей как выход. Последовательность конфигурирования следующая: 1. Установите значение бит BR[2:0], чтобы определить скорость передачи (частота тактов SCK, см. описание регистра SPI_CR1). 2. Выберите значение битов CPOL и CPHA, чтобы задать один из 4 вариантов взаимодействия между передачей данных и поведением тактового сигнала (см. рис. 248). Этот шаг делать не нужно, когда выбран режим TI. 3. Установите бит DFF для определения 8 или 16 бит во фрейме данных. 4. Сконфигурируйте бит LSBFIRST в регистре SPI_CR1, чтобы задать порядок передачи бит во фрейме. Этот шаг не нужен, когда выбран режим TI. 5. Если в аппаратном режиме NSS должен работать в режиме входа, подайте сигнал высокого уровня на этот вывод для выполнения последовательности передачи фрейма. В режиме программного управления NSS, установите биты SSM и SSI в регистре SPI_CR1. Если нужно, чтобы вывод NSS работал как выход, должен быть установлен только бит SSOE. Этот шаг не нужен, когда выбран режим TI. 6. Установите бит FRF в регистре SPI_CR2, чтобы выбрать протокол TI для обмена данными. 7. Должны быть установлены биты MSTR и SPE (они остаются установленными, только если вывод NSS подключен к сигналу высокого уровня). В этом режиме вывод MOSI работает как выход данных, и вывод MISO работает как вход данных. Передача. Процесс передачи начнется, когда байт записывается в буфер Tx. Параллельно байт данных загружается в регистр сдвига (по внутренней шине) во время передачи первого бита, и затем сдвигается на выход последовательно через вывод MOSI (MSB битом вперед, или LSB битом вперед, в зависимости от состояния бита LSBFIRST в регистре SPI_CR1). Флаг TXE устанавливается после передачи данных из буфера Tx в регистр сдвига, и будет сгенерировано прерывание, если установлен бит TXEIE в регистре SPI_CR2. Прием. Для приема, когда процесс передачи данных завершается: • Данные из регистра сдвига передается в буфер RX, и устанавливается флаг RXNE. На последнем перепаде тактов устанавливается бит RXNE, копия принятого байта данных из регистра сдвига перемещается в буфер Rx. Когда прочитан регистр SPI_DR, периферийное устройство SPI возвратит это забуферизированное значение данных. Бит RXNE очищается, когда происходит чтение регистра SPI_DR. Может быть осуществлена поддержка потока передачи, если следующий фрейм данных для передачи будет помещен в буфер Tx, когда передача была запущена. Имейте в виду, что флаг TXE должен быть в состоянии 1 перед любой попыткой записи в буфер Tx. Примечание: когда master обменивается данными с устройствами SPI slave, которые нуждаются в отключении выборки между передачами, вывод NSS должен быть сконфигурирован как GPIO или должен использоваться другой вывод GPIO, чтобы программно управлять выборкой slave-устройства. [Протокол TI для SPI в режиме master] В режиме master интерфейс SPI совместим с протоколом TI. Бит FRF регистра SPI_CR2 может использоваться для того, чтобы сконфигурировать обмен master SPI совместимым с протоколом SPI TI. Полярность и фаза тактов принудительно устанавливаются так, чтобы они удовлетворяли требованиям протокола TI независимо от значений, которые установлены в регистре SPI_CR1. Управление NSS также специфично для протокола TI, что делает конфигурирование управления NSS через регистры SPI_CR1 и SPI_CR2 (биты SSM, SSI, SSOE) прозрачным для пользователя. На рис. 251 показаны диаграммы обмена режима TI master при одиночной передаче, и на рис. 252 для режима TI master при продолжающейся передаче. Рис. 251. TI mode - master mode, single transfer. Рис. 252. TI mode - master mode, continuous transfer. [Конфигурирование SPI для обмена в полудуплексе] SPI может работать в 2 режимах полудуплекса: • 1 тактовый сигнал и 1 двунаправленная линия данных. 1 тактовая линия и 1 двунаправленная линия данных (BIDIMODE=1). Этот режим разрешается путем установки бита BIDIMODE в регистре SPI_CR1. В этом режиме SCK используется для тактов и для данных используется MOSI в режиме master или MISO в режиме slave. Направление передачи (Input/Output) выбирается битом BIDIOE в регистре SPI_CR1. Когда этот бит установлен в 1, линия данных становится выходом, иначе она работает как вход. 1 тактовая линия и 1 однонаправленная линия данных (BIDIMODE=0). В этом режиме приложение микроконтроллера может использовать SPI либо только для режима передачи, либо только для режима приема. • Режим только для передачи работает так же, как и полный дуплекс (BIDIMODE=0, RXONLY=0): данные передаются через ножку передачи (MOSI в режиме master или MISO в режиме slave). Ножка приема (MISO в режиме master или MOSI в режиме slave) может использоваться как обычный порт ввода вывода GPIO. В этом случае приложение микроконтроллера должно просто игнорировать буфер Rx (если регистр данных будет прочитан, он не будет содержать принятые данные). Чтобы запустить обмен в режиме только приема, сконфигурируйте и разрешите SPI: • В режиме master обмен запустится немедленно, и завершится, когда бит SPE очистится, и текущий прием остановится. В этом режиме здесь не нужно читать флаг BSY. Он всегда устанавливается, когда происходит обмен SPI. [Процедуры передачи и приема данных] Буферы Rx и Tx. Во время приема данные принимаются и сохраняются во внутренний буфер Rx. При передаче данных сначала сохраняются во внутренний буфер Tx перед тем, как они будут переданы. Доступ на чтение регистра SPI_DR возвратит значение из буфера Rx, в то время как доступ на запись в регистр SPI_DR поместит записываемые данные в буфер Tx. Стартовая последовательность в режиме master: • Когда полный дуплекс (BIDIMODE=0 и RXONLY=0). Стартовая последовательность в режиме slave: • Когда полный дуплекс (BIDIMODE=0 и RXONLY=0). [Обработка передачи и приема данных] Флаг TXE (расшифровывается как Tx buffer empty, буфер передачи пуст) устанавливается, когда данные переданы из буфера Tx в регистр сдвига. Это показывает, что внутренний буфер Tx готов к загрузке следующей порции данных. В этот момент может генерироваться прерывание, если установлен бит TXEIE в регистре SPI_CR2. Очистка бита выполняется при записи в регистр SPI_DR (при этом записанные данные попадают в буфер Tx). Примечание: программное обеспечение должно удостовериться, что флаг TXE установлен перед тем, как сделать попытку записи в буфер Tx (в регистр SPI_DR). Иначе запись перезапишет ранее записанные в буфер Tx данные. Флаг RXNE (расшифровывается Rx buffer not empty, буфер приема не пуст) устанавливается, по приходу последнего перепада тактов, когда данные копируются из регистра сдвига в буфер Rx. Это показывает, что есть принятые данные, и их можно прочитать через чтение регистра SPI_DR. В этот момент может быть сгенерировано прерывание, если установлен бит RXNEIE в регистре SPI_CR2. Бит RXNE очищается при чтении регистра SPI_DR (при этом будут прочитаны принятые данные из буфера Rx). Для некоторых конфигураций может использоваться флаг BSY во время последней передачи данных, чтобы ожидать, пока не завершится передача. Далее приведено описание полнодуплексной операции передачи и приема в режиме master или slave (BIDIMODE=0 и RXONLY=0). Программное обеспечение должно следовать следующей процедуре для передачи и приема данных (см. рис. 253 и 254): 1. Разрешить SPI установкой бита SPE в значение 1. Эта процедура может быть также реализована с использованием отдельных выделенных обработчиков прерываний, запускаемых по фронту флагов RXNE или TXE. Рис. 253. Диаграмма поведения сигналов TXE/RXNE/BSY в режиме Master / полный дуплекс (BIDIMODE=0 и RXONLY=0), когда идет непрерывная передача. Рис. 254. Диаграмма поведения сигналов TXE/RXNE/BSY в режиме Slave / полный дуплекс (BIDIMODE=0 и RXONLY=0), когда идет непрерывная передача. [Процедура "только передача" (BIDIMODE=0 RXONLY=0)] В этом режиме процедура может быть уменьшена, как описано ниже, и бит BSY может использоваться для ожидания завершения передачи (см. рис. 255 и 256). 1. Разрешите SPI установкой бита SPE в значение 1. Эта процедура может быть также реализована с использованием отдельного выделенного обработчика прерываний, запускаемого по фронту флага TXE. Примечание: во время прерывистых обменов данными есть задержка на 2 периода тактов APB между операцией записи в SPI_DR и установкой бита BSY. Следовательно, в режиме "только передача" важно ждать сначала, пока не установится TXE, и затем не очистится BSY, после того как будут записаны последние данные. После передачи двух порций данных в режиме "только передача" установится флаг OVR в регистре SPI_SR, поскольку принятые данные никогда не были прочитаны. Рис. 255. Диаграмма поведения сигналов TXE/BSY в режиме Master / только передача (BIDIMODE=0 и RXONLY=0), когда идет непрерывная передача. Рис. 256. Диаграмма поведения сигналов TXE/BSY в режиме Slave / только передача (BIDIMODE=0 и RXONLY=0), когда идет непрерывная передача. [Двунаправленная процедура передачи (BIDIMODE=1 и BIDIOE=1)] В этом режиме процедура такая же, как и процедура "только передача", за исключением того, что оба бита, и BIDIMODE, и BIDIOE должны быть установлены в регистре SPI_CR2 перед тем, как разрешить SPI. [Однонаправленная процедура "только прием" (BIDIMODE=0 и RXONLY=1)] В этом режиме процедура может быть уменьшена, как описано ниже (см. рис. 257): 1. Установите бит RXONLY в регистре SPI_CR2. Эта процедура может быть также реализована с использованием отдельного выделенного обработчика прерываний, запускаемого по фронту флага RXNE. Примечание: если требуется запретить SPI после последней передачи, то следуйте рекомендации, описанной в секции 28.3.8: Disabling the SPI. Рис. 257. Диаграмма поведения RXNE в режиме только чтение (BIDIMODE=0 и RXONLY=1), когда идет непрерывная передача. [Процедура двунаправленного приема (BIDIMODE=1 и BIDIOE=0)] В этом режиме процедура такая же, как и процедура "только прием", за исключением того, что бит BIDIMODE должен быть установлен и BIDIOE очищен в регистре SPI_CR2 перед тем, как разрешить SPI. [Непрерывные и прерывистые передачи] Когда данные передаются в режиме master, если программное обеспечение достаточно быстрое, чтобы детектировать каждый фронт TXE (или отрабатывается прерывание TXE), и немедленно записать регистр SPI_DR перед завершением текущей передачи, то обмен считается непрерывным. В этом случае нет перерыва в генерации тактов SPI между каждым элементом данных, и бит BSY никогда не очищается между каждой порцией данных. И наоборот, если программное обеспечение недостаточно быстрое, то это может привести к прерывистому обмену. В этом случае, бит BSY очищается между каждой передачей данных (см. рис. 258). В режиме Master "только прием" (RXONLY=1), обмен всегда непрерывный и флаг BSY всегда читается как 1. В режиме slave, непрерывность обмена определяется устройством SPI master. В любом случае, даже если обмен непрерывный, флаг BSY переходит в 0 между каждой передачей на минимальное время длительностью в один такт SPI (см. рис. 256). Рис. 258. Диаграмма поведения TXE/BSY при передаче (BIDIMODE=0 и RXONLY=0), в случае прерывистых передач. [Вычисление CRC] CRC было применено для надежности обмена данными. Для передачи и приема данных реализованы отдельные калькуляторы CRC. CRC вычисляется согласно программируемому полиному, последовательно для каждого бита. CRC вычисляется на перепаде тактов выборки, заданном битами CPHA и CPOL в регистре SPI_CR1. Примечание: этот SPI предлагает два вида стандарта вычисления CRC, которые напрямую зависят от формата фрейма, выбранного для передачи и/или приема: 8-битные данные (CRC8) и 16-битные данные (CRC16). Вычисление CRC разрешается установкой бита CRCEN в регистре SPI_CR1. Это действие сбрасывает регистры CRC (SPI_RXCRCR и SPI_TXCRCR). В полном дуплексе или в режиме только передачи, когда передача управляется программно (CPU mode), необходимо записать бит CRCNEXT немедленно после последней передаваемой порции данных, записанной в SPI_DR. По окончании последней передачи данных будет передано значение SPI_TXCRCR. В режиме только приема и когда передачи управляются программно (CPU mode), необходимо записать бит CRCNEXT после второй последней порции принятых данных. Будет принята CRC сразу после приема последней порции данных, и будет произведена проверка CRC. По окончании передач данных и CRC будет установлен флаг CRCERR в регистре SPI_SR, если было повреждение данных в процессе передачи. Если в в буфере TX имеются данные, значение CRC передается после передачи байта данных. Во время передачи CRC калькулятор CRC выключается, и значение регистра остается неизменным. Обмен SPI с использованием CRC возможно с использованием следующей процедуры: 1. Запрограммируйте значения CPOL, CPHA, LSBFirst, BR, SSM, SSI и MSTR. Примечание: когда SPI в режиме slave, будьте внимательны и разрешайте вычисление CRC только когда такты стабильны, т. е. когда такты находятся в состоянии steady (стабильное состояние). Если это не сделать, то может произойти неправильное вычисление CRC. Фактически CRC чувствительна к входным тактам SCK slave, как только установлен CRCEN, и это независимо от того, установлен бит SPE или нет. На высоких частотах передачи данных, будьте осторожны, когда передается CRC. Так как количество используемых циклов CPU должно быть максимально возможным в фазе передачи CRC, то запрещено вызывать программные функции во время последовательности передачи CRC, чтобы избежать ошибок в приеме последних данных и CRC. Фактически бит CRCNEXT должен быть записан перед окончанием передачи/приема последней порции данных. Для высоких частот передачи данных рекомендуется использовать режим DMA, чтобы избежать деградации скорости SPI, так как доступ через CPU ухудшает полосу пропускания SPI. Когда устройства сконфигурированы как slave, и используется режим аппаратного NSS, вывод NSS нужно удерживать в состоянии лог. 0 между фазой данных и фазой CRC. Когда SPI сконфигурирован в режиме slave с разрешенной функцией подсчета CRC, то вычисление CRC производится всякий раз, когда к выводу NSS прикладывается уровень лог. 1. Это может произойти к примеру в случае multislave-окружения, где master обмена адресует устройства slave по своему выбору. Между отключением выборки slave (лог. 1 на выводе NSS) и выборкой нового slave (низкий уровень на NSS), значение CRC должно быть очищено как на стороне master, так и на стороне slave, чтобы заново синхронизировать master и slave для соответствующего вычисления CRC. Чтобы очистить CRC, выполните следующую процедуру: 1. Запретите SPI (SPE = 0). [Флаги статуса SPI] Для приложения предоставлено 4 флага статуса, чтобы полностью отслеживать состояние шины SPI. Tx buffer empty flag (TXE, флаг сигнализации о пустом буфере передачи). Когда этот флаг установлен, то это указывает на опустошение буфера Tx, так что следующая порция данных может быть записана в буфер Tx. Флаг TXE очищается, когда осуществляется запись в регистр SPI_DR. Rx buffer not empty (RXNE, буфер приема содержит данные). Когда установлен, этот флаг говорит о том, что в буфере Rx находятся действительные принятые данные. Флаг очищается, когда читается регистр SPI_DR. BUSY flag (BSY, флаг занятости). Этот флаг BSY устанавливается и очищается аппаратно (запись в этот флаг не дает никакого эффекта). Флаг BSY показывает состояние слоя обмена communication SPI. Когда BSY установлен, то шина SPI занята обменом данными. Есть только одно исключение в режиме master / двунаправленный прием (MSTR=1, BDM=1 и BDOE=0), когда флаг BSY удерживается в состоянии лог. 0 во время приема. Флаг BSY полезен для детектирования окончания передачи, если программное обеспечение хочет запретить SPI и войти в режим останова (Halt mode), или отключить тактирование периферийных устройств. Это позволит избежать порчу данных последней передачи. Для такого случая очень важно соблюдение нижеописанной процедуры. Флаг BSY также полезен для того, чтобы избежать коллизии записи в системе multimaster. Флаг BSY устанавливается, когда стартует передача, за исключением режима master / двунаправленный прием (MSTR=1, BDM=1 и BDOE=0). Флаг BSY очищается в следующих случаях: • Когда передача завершена (за исключением режима master, если обмен продолжается). Когда обмен прерывистый, флаг BSY в лог. 0 между каждым обменом. Когда обмен непрерывный: • В режиме master, флаг BSY сохраняет состояние лог. 1 во время всех передач. Примечание: не используйте флаг BSY для отслеживания каждой передачи данных и каждого приема. Лучше использовать вместо этого флаги TXE и RXNE. [Запрет работы SPI] Когда передача данных завершена, приложение может остановить обмен путем запрета периферии SPI. Это осуществляется путем очистки бита SPE. Для некоторых конфигураций запрет SPI и вход в режим Halt в тот момент, когда происходит передача, может привести к повреждению текущей передачи, и/или флаг BSY может стать ненадежным. Чтобы избежать подобных эффектов, рекомендуется соблюдать следующую процедуру для запрета SPI: В режиме master или slave полный дуплекс (BIDIMODE=0, RXONLY=0) В режиме master или slave, только передача в одном направлении (BIDIMODE=0, RXONLY=0) или двунаправленный режим передачи (BIDIMODE=1, BIDIOE=1). После последней порции данных, записанной в регистр SPI_DR: В режиме master, только прием данных в одном направлении (MSTR=1, BIDIMODE=0, RXONLY=1) или двунаправленный режим приема (MSTR=1, BIDIMODE=1, BIDIOE=0). В этом случае нужно специальным образом убедиться, что SPI не начал новую передачу. Последовательность ниже допустима только для конфигурации SPI Motorola (бит FRF установлен в 0): Когда SPI сконфигурирован в режиме TI (FRF установлен в 1), то нужно соблюдать следующую процедуру, чтобы избежать генерации нежелательного импульса на выводе NSS, когда SPI запрещен: Примечание: в двунаправленном режиме master (MSTR=1, BDM=1, BDOE=0), флаг BSY удерживается в состоянии 0 во время передач. В режиме slave, только прием (MSTR=0, BIDIMODE=0, RXONLY=1) или в двунаправленном режиме приема (MSTR=0, BIDIMODE=1, BIDOE=0): [Обмен через SPI с использованием DMA] Для того, чтобы работать с максимальной скоростью, в SPI нужно поставлять данные для передачи, и также нужно читать буфер приема, чтобы избежать потери данных на приеме (overrun). Для того, чтобы упростить передачи, в SPI реализована возможность использования DMA, здесь применен простой протокол запроса/подтверждения. Доступ через DMA запрашивается, когда разрешены соответствующие биты в регистре SPI_CR2 (TXDMAEN и RXDMAEN). Для буферов Tx и Rx могут быть выставлены отдельные запросы (см. рис. 259 и 260): • При передаче запрос DMA выдается каждый раз, когда флаг TXE установлен в 1. Затем DMA записывает регистр SPI_DR (что очистит флаг TXE). Когда SPI используется только для передачи данных, можно разрешить только канал SPI Tx DMA. В этом случае флаг OVR установится, потому что принятые данные не будут прочитаны. Когда SPI используется только для приема данных, можно разрешить только канал SPI Rx DMA. В режиме передачи, когда DMA записал все данные для передачи (установился флаг TCIF в регистре DMA_ISR), может отслеживаться флаг BSY, чтобы удостовериться в том, что обмен через SPI завершился. Это требуется для того, чтобы предотвратить порчи передачи последней порции данных перед запретом SPI или входом в режим Stop. Программное обеспечение должно ожидать TXE=1 и затем ожидать BSY=0. Примечание: во время прерывистого обмена есть задержка величиной в 2 такта APB между операцией записи в SPI_DR и установкой флага BSY. Как следствие обязательно ждите сначала TXE=1, и затем ждите BSY=0 после записи последней порции данных. Рис. 259. Передача с использованием DMA. Рис. 260. Прием с использованием DMA. DMA вместе с вычислением CRC. Когда разрешен обмен с вычислением CRC, и используется режим DMA, то передача и прием CRC по окончании обмена происходит автоматически, так что не нужно использовать бит CRCNEXT. После приема CRC нужно прочитать значение CRC в регистре SPI_DR, чтобы очистить флаг RXNE. По окончании передачи данных и CRC, будет установлен флаг CRCERR в регистре SPI_SR, если произошло повреждение данных во время передачи. [Флаги ошибок] Master mode fault (MODF), флаг ошибки режима master. Событие этой ошибки происходит, когда у устройства master есть вывод NSS, подтянутый к уровню лог. 0 (NSS в аппаратном режиме), или когда бит SSI равен 0 (когда NSS в программном режиме), это автоматически установит бит MODF. Master mode fault влияет на периферийное устройство SPI следующим образом: • Бит MODF устанавливается, и генерируется прерывание SPI, если установлен бит ERRIE. Используйте следующую программную последовательность, чтобы очистить бит MODF: 1. Сделайте доступ на чтение или запись регистра SPI_SR, пока бит MODF установлен. Чтобы избежать конфликта нескольких устройств slave в системе, которая состоит из нескольких MCU, вывод NSS должен быть подтянут к лог. 1 во время последовательности очистки бита MODF. Биты SPE и MSTR можно восстановить в свое оригинальное состояние после последовательности очистки бита MODF. В целях безопасности аппаратура не разрешает установку битов SPE и MSTR, когда установлен бит MODF. Когда устройство находится в режиме slave, бит MODF не может быть установлен. Однако в конфигурации multimaster устройство может быть в режиме slave с установленным битом MODF. В этом случае бит MODF показывает, что возможно был конфликт multimaster для системы управления. Обработчик прерывания может быть использован, чтобы чисто восстановиться из этого состояния путем выполнения сброса или возврата в состояние по умолчанию. Флаг Overrun (OVR). Событие потери данных (overrun) произойдет, когда устройство master отправило байты данных и устройство slave не очистило бит RXNE, который был установлен после получения предыдущих байт данных. Когда произошла ошибка overrun, установится бит OVR, и будет сгенерировано прерывание, если установлен бит ERRIE. В этом случае буфер приемника не будет обновлен новыми принятыми данными от устройства master. Чтение из регистра SPI_DR возвратит этот байт. Все другие байты, которые были переданы после этого байта, будут потеряны. Очистка бита OVR происходит при чтении из регистра SPI_DR, после которого произойдет доступ на чтение регистра SPI_SR. Ошибка CRC. Этот флаг используется для проверки целостности принятых данных, когда установлен бит CRCEN в регистре SPI_CR1. Флаг CRCERR в регистре SPI_SR устанавливается, если значение, принятое в регистр сдвига, не соответствует значению SPI_RXCRCR приемника. Режим фрейма TI, ошибка формата (FRE). Ошибка формата фрейма TI детектируется, когда случается импульс NSS во время процесса обмена, и когда SPI работает в режиме slave, и сконфигурирован в режиме для поддержки протокола TI. Когда произошла такая ошибка, устанавливается флаг FRE в регистре SPI_SR. При возникновении такой ошибки SPI не запрещается, импульс NSS игнорируется, и SPI ждет следующего импульса NSS перед началом новой передачи. Данные могут быть повреждены, так как в результате детектирования ошибки могут быть потеряны 2 байта данных. Флаг FRE очищается, когда читается регистр SPI_SR. Если бит ERRIE установлен, то при детектировании ошибки NSS генерируется прерывание. В этом случае SPI должен быть запрещен, потому что целостность данных больше не гарантируется, и обмен должен быть заново инициирован устройством master, когда SPI будет снова разрешен. Рис. 261. Детектирование ошибки формата фрейма режима TI. [Прерывания SPI] Таблица 125. SPI interrupt requests.
[Регистры SPI] Прим. переводчика: некоторые регистры используются как для SPI, так и для I2S. Описание регистров I2S опущено. Для наглядности в описании битов регистров используются следующие аббревиатуры и обозначения. read/write (rw) программа может читать и записывать эти биты. Таблица 128. Карта регистров SPI, их значение после сброса. В таблице приведена памятка по регистрам SPI, дальше регистры описываются подробно. Это регистр управления 1, в режиме I2S он не используется. Адрес смещения 0x00, значение после сброса 0x0000.
BIDIMODE: Bidirectional data mode enable, разрешение режима двунаправленного обмена. 0: выбран однонаправленный режим обмена данными по 2 сигнальным линиям, 1: двунаправленный режим обмена по 1 сигнальной линии. BIDIOE: Output enable in bidirectional mode, разрешение работы выхода в двунаправленном режиме. Этот бит в комбинации с битом BIDIMODE выбирает направление передачи в двунаправленном режиме. 0: выход запрещен (только прием), 1: выход разрешен (только передача). Примечание: для двунаправленной передачи режиме master используется вывод MOSI, в режиме slave используется вывод MISO. CRCEN: разрешение аппаратного вычисления CRC, если в этот бит записана 1. Примечание: для обеспечения корректного функционирования этот бит должен записываться только тогда, когда SPI запрещен (SPE=0). CRCNEXT: CRC transfer next, признак того, что нужно закончить вычисление CRC и переслать её значение. 0: все еще продолжается фаза данных (идет подсчет CRC), 1: в следующей передаче должно находиться значение CRC. Примечание: когда SPI сконфигурирован на полный дуплекс, или режимов "только передача", бит CRCNEXT должен быть установлен сразу за последней записью порции данных в регистр SPI_DR (т. е. максимально быстро, без паузы). Когда SPI сконфигурирован в режиме "только прием", бит CRCNEXT должен быть установлен после приема предпоследней (second last) порции данных. Этот бит должен быть всегда очищен, когда передачи идут под управлением DMA. DFF: Data frame format, формат фрейма данных. 0: для передачи/приема выбран 8-битный фрейм, 1: 16-битный фрейм. Примечание: для корректного функционирования этот бит должен быть записан только когда SPI запрещен (SPE=0). RXONLY: Receive only, только прием. Этот бит в комбинации с битом BIDIMODE выбирает направление передачи в 2-сигнальном однонаправленном режиме. Этот бит также полезен в системе multislave, в которой к этому отдельному slave нет обращения, так что выход этого slave не портит обмен данными. 0: полный дуплекс (и передача, и прием), 1: выход запрещен (режим "только прием"). SSM: Software slave management, программное управление устройством slave. Когда этот бит установлен, вход вывода NSS заменяет значение бита SSI. 0: программное управление slave запрещено (работает аппаратное через ножку NSS), 1: программное управление slave разрешено. Примечание: этот бит не используется в режиме SPI TI. SSI: Slave select internal. Этот бит имеет значение только тогда, когда установлен бит SSM. Значение бита SSI принудительно работает как сигнал с линии NSS, при этом состояние входа NSS игнорируется. Примечание: этот бит не используется в режиме SPI TI. LSBFIRST: Least Significant Bit First, этот бит определяет формат фрейма (в каком порядке по старшинству следуют биты во фрейме). 0: MSB следует первым, 1: LSB следует первым. Примечание: этот бит не должен изменяться, пока идет процесс обмена данными. Этот бит не используется в режиме SPI TI. SPE: SPI enable, разрешение работы SPI. 0: периферийное устройство SPI запрещено, 1: разрешено. Примечание: чтобы корректно запретить SPI, следуйте процедуре, описанной в разделе "Запрет работы SPI". BR[2:0]: Baud rate control, управление скоростью передачи (частотой тактов SCK). 000: fPCLK/2 Примечание: эти биты не должны изменяться, пока идет процесс обмена данными. MSTR: Master selection, выбор режима Master. 0: устройство SPI сконфигурировано как Slave (подчиненное), 1: как Master (главное). Примечание: этот бит не должен изменяться, пока идет процесс обмена данными. CPOL: Clock polarity, полярность тактов. 0: неактивный перепад с 1 на 0 (значение бита выбирается по нарастающему фронту тактового сигнала), 1: неактивный перепад с 0 на 1 (значение бита выбирается по спаду тактового сигнала). Примечание: этот бит не должен изменяться, пока идет процесс обмена данными. Этот бит не используется в режиме SPI TI. CPHA: Clock phase, фаза тактов. 0: первый перепад тактового сигнала является первым моментом выборки значения бита, 1: второй перепад тактового сигнала является первым моментом выборки значения бита. Примечание: этот бит не должен изменяться, пока идет процесс обмена данными. Этот бит не используется в режиме SPI TI. Регистр управления 2. Смещение адреса 0x04, значение после сброса 0x0000.
Биты 15:8 зарезервированы, их значение должно сохраняться на значении после сброса. Бит 3 также зарезервирован, он аппаратно удерживается в значении 0. TXEIE: Tx buffer empty interrupt enable, разрешение прерывания по событию опустошения буфера передачи. 0: прерывание по флагу TXE замаскировано (не будет срабатывать), 1: прерывание по флагу TXE разрешено (в этом случае запустится обработчик прерывания, когда флаг TXE установится). RXNEIE: RX buffer not empty interrupt enable, разрешение прерывания по событию, когда буфер приема оказался не пуст. 0: прерывание по флагу RXNE замаскировано (не будет срабатывать), 1: прерывание по флагу RXNE разрешено (в этом случае запустится обработчик прерывания, когда флаг RXNE установится). ERRIE: Error interrupt enable, разрешение прерывания по возникновению ошибки. Этот бит управляет генерацией прерывания, когда произойдет событие ошибки (по флагам CRCERR, OVR, MODF в режиме SPI, FRE в режиме TI, UDR, OVR и FRE в режиме I2S). 0: прерывание замаскировано (не будет срабатывать), 1: разрешено. FRF: Frame format, формат фрейма. 0: режим SPI Motorola, 1: режим SPI TI. SSOE: SS output enable, разрешение работы выхода выборки подчиненного устройства. 0: выход управления Slave Select в режиме master запрещен, и ячейка может работать в конфигурации multimaster, 1: в режиме master выход Slave Select разрешен, когда ячейка разрешена. Ячейка не может работать в среде multimaster. Примечание: этот бит не используется в режиме SPI TI. TXDMAEN: Tx buffer DMA enable, работа буфера передачи через DMA разрешена. Когда этот бит установлен, делается запрос DMA независимо от того, установлен ли флаг TXE, или нет. 0: буфер Tx DMA запрещен, 1: разрешен. RXDMAEN: Rx buffer DMA enable, работа буфера приема через DMA разрешена. Когда этот бит установлен, делается запрос DMA независимо от того, установлен ли флаг RXNE, или нет. 0: буфер Rx DMA запрещен, 1: разрешен. Регистр статуса SPI, смещение адреса 0x08, значение после сброса 0x0002.
Биты 15:9 зарезервированы, их значение аппаратно удерживается в значении 0. FRE: Frame format error, ошибка формата фрейма. 0: не было ошибки формата фрейма, 1: ошибка формата фрейма произошла. Этот флаг устанавливается аппаратно и очищается программно, когда читается регистр SPIx_SR. Примечание: этот флаг используется, когда SPI работает в режиме TI slave или I2S slave, за подробностями обращайтесь к секции Errors flags (флаги ошибок) даташита. BSY: Busy flag, флаг занятости. 0: SPI (или I2S) не занят, 1: интерфейс занят обменом, или буфер Tx не пуст. Этот флаг устанавливается и сбрасывается аппаратно. Примечание: флаг BSY должен использоваться с некоторыми предосторожностями, см. секции "Флаги статуса SPI" и "Запрет работы SPI". OVR: Overrun flag, флаг потери данных. 0: потери данных не было, 1: произошла потеря данных на приеме, т. е. данные не были вовремя считаны. Этот флаг устанавливается аппаратно, и сбрасывается программно выполнением специальной последовательности действий (см. секцию "Флаги ошибок", описание флага OVR). MODF: Mode fault, ошибка режима. 0: ошибки не было, 1: произошла ошибка режима. Этот флаг устанавливается аппаратно, и сбрасывается программно выполнением специальной последовательности действий (см. секцию "Флаги ошибок", описание флага MODF). CRCERR: CRC error flag, флаг ошибки контрольной суммы. 0: принятое CRC соответствует значению SPI_RXCRCR, 1: это не так, произошла ошибка. Этот флаг устанавливается аппаратно, и сбрасывается программно путем записи в него 0. UDR: Underrun flag, флаг недостаточности данных. 0: не было события underrun, 1: буфер передатчика не успел вовремя заполниться новыми данными для передачи. Этот флаг устанавливается аппаратно, и сбрасывается программно выполнением специальной последовательности действий (см. секцию "Флаги ошибок", описание флага UDR). Примечание: этот бит не используется в режиме SPI. CHSIDE: Channel side, флаг канала. 0: был передан или принят левый канал стерео, 1: правый канал. Примечание: этот бит не используется в режиме SPI, и подразумевается, что он относится к PCM. TXE: Transmit buffer empty, флаг пустоты буфера передатчика. 0: буфер Tx передатчика содержит данные для отправки, пока не переписанные в регистр сдвига, 1: буфер Tx передатчика пуст, и готов к записи новых данных. RXNE: Receive buffer not empty, буфер приемника не пуст. 0: буфер Rx приемника пуст, данные пока не приняты, 1: буфер Rx приемника не пуст, т. е. содержит новые принятые данные, которые должны быть прочитаны программой. Регистр данных SPI, который служит для доступа к буферам приема и передачи. Смещение адреса 0x0C, значение после сброса 0x0000.
DR[15:0]: Data register, регистр данных, который служит для приема или передачи данных. Регистр данных служит для доступа к 2 отдельным буферам - один для записи (Tx, Transmit Buffer, буфер передачи), другой для чтения (Rx, Receive Buffer, буфер приема). Запись в регистр данных записывает данные в буфер Tx, и чтение регистра данных осуществляет чтение буфера Rx. Примечание: есть несколько замечаний для режима SPI: В зависимости от бита выбора формата фрейма (бит DFF в регистре SPI_CR1), отправляемые данные имеют длину либо 8, либо 16 бит. Этот выбор должен быть сделан до разрешения работы SPI, чтобы обеспечить корректное функционирование. Для фрейма 8 бит буферы 8-битные, и используется только младший байт (SPI_DR[7:0]) регистра для передачи/приема. В режиме приема старший байт регистра (SPI_DR[15:8]) принудительно равен 0. Для фрейма 16 бит буферы 16-битные, и для передачи/приема задействован весь регистр полностью SPI_DR[15:0]. Регистр полинома для CRC, адрес смещения 0x10, значение после сброса 0x0007.
CRCPOLY[15:0]: CRC polynomial register, регистр для хранения полинома вычисления CRC. После сброса регистр содержит полином 0x0007, который может быть при необходимости программно изменен на другой. Регистр CRC для приема, адрес смещения 0x14, значение после сброса 0x0000.
RXCRC[15:0]: Rx CRC register, регистр вычисленной CRC для принятого потока данных. Когда вычисление CRC разрешено, биты RxCRC[15:0] содержат вычисленную контрольную сумму от последовательно принятых байт. Этот регистр сбрасывается, когда в бит CRCEN в регистре SPI_CR1 записывается 1. CRC вычисляется с задействованием полинома, запрограммированного в регистре SPI_CRCPR. Учитываются только 8 младших бит, когда формат фрейма установлен 8 бит (DFF=0 в регистре SPI_CR1), в этом случае вычисление CRC производится по стандарту CRC8. Задействованы все 16 бит этого регистра, когда выбран 16-битный формат фрейма данных (DFF=1 в регистре SPI_CR1), в этом случае вычисление CRC производится по стандарту CRC16. Примечание: чтение этого регистра, когда установлен флаг BSY, вернет некорректное значение. Регистр CRC для передачи, адрес смещения 0x18, значение после сброса 0x0000.
TXCRC[15:0]: Tx CRC register, регистр вычисленной CRC для переданного потока данных. Когда вычисление CRC разрешено, биты TxCRC[15:0] содержат вычисленную контрольную сумму от последовательно переданных байт. Этот регистр сбрасывается, когда в бит CRCEN в регистре SPI_CR1 записывается 1. CRC вычисляется с задействованием полинома, запрограммированного в регистре SPI_CRCPR. Учитываются только 8 младших бит, когда формат фрейма установлен 8 бит (DFF=0 в регистре SPI_CR1), в этом случае вычисление CRC производится по стандарту CRC8. Задействованы все 16 бит этого регистра, когда выбран 16-битный формат фрейма данных (DFF=1 в регистре SPI_CR1), в этом случае вычисление CRC производится по стандарту CRC16. Примечание: чтение этого регистра, когда установлен флаг BSY, вернет некорректное значение. [Ссылки] 1. Интерфейс SPI. |