[Home] [Donate!] [Контакты]

Регистры SPI

Оглавление
SPI в микроконтроллерах STM32. Основы
SPI в STM32. Работа в ведомом и ведущем режимах
SPI в STM32. Управление передачей данных
Регистры SPI
SPI_CR1 (SPI control register 1)
SPI_CR2 (SPI control register 2)
SPI_SR (SPI status register)
SPI_DR (SPI data register)
SPI_CRCPR (SPI CRC polynomial register)
SPI_RXCRCR (SPI RX CRC register)
SPI_TXCRCR (SPI TX CRC register)
Использование SPI при работе с микроконтроллерами STM32F100xx
Примеры программ

SPI_CR1 (SPI control register 1)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
BIDI
MODE
BIDI
OE
CRC
EN
CRC
NEXT
DFF RX
ONLY
SSM SSI LSB
FIRST
SPE BR[2:0] MSTR CPOL CPHA
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр управления 1

Address offset: 0x00
Reset value: 0x0000

BIDIMODE: Bidirectional data mode enable
Включение режима двунаправленной передачи данных.
0: выбран режим передачи данных по двум однонаправленным линиям (обычный режим, когда MOSI - выход ведущего устройства и вход ведомого; MISO - вход ведущего и выход выбранного ведомого).
1: выбран режим передачи данных по одной двунаправленной линии.
BIDIOE: Output enable in bidirectional mode
Включение выхода в режиме двунаправленной передачи данных.
При включённом режиме передачи по одной двунаправленной линии (бит BIDIMODE=1) данный бит определяет направление передачи.
0: выход отключён (только приём данных по линии).
1: выход включён (только передача данных по линии).
Примечание.
Для обмена данными по одной двунаправленной линии в режиме ведущего устройства используется MOSI вывод, а в режиме ведомого устройства - MISO вывод.
CRCEN: Hardware CRC calculation enable
Включение аппаратного вычисления CRC.
0: вычисление CRC отключено.
1: вычисление CRC включено.
Примечание.
Для корректной работы устройства, следует изменять этот бит только при отключённом SPI (SPE=0).
CRCNEXT: CRC transfer next
Следующая пересылка - CRC-код.
0: фаза передачи данных (не CRC-фаза).
1: следующая пересылка - CRC-код (CRC-фаза).
Примечание.
Когда SPI интерфейс сконфигурирован для работы в полнодуплексном режиме или режиме "только передача", бит CRCNEXT должен быть записан сразу же, как будут записаны последние данные в регистр SPI_DR.
Когда SPI сконфигурирован в режиме "только приём", CRCNEXT должен быть установлен после получения предпоследнего фрейма данных.
Этот бит должен быть сброшен, когда пересылка данных осуществляется с использованием DMA.
DFF: Data frame format
Формат фрейма данных.
Бит управляет длиной фрейма.
0: данные передаются и получаются в виде 8-битовых фреймов.
1: данные передаются и получаются в виде 16-битовых фреймов.
Примечание.
Для корректного функционирования SPI, бит должен изменяться только при отключённом SPI (SPE=0).
RXONLY: Receive only
Только приём.
В режиме передачи по двум однонаправленным линиям (обычный режим, BIDIMODE=0), при установке данного бита выход SPI отключается и SPI работает только на приём.
0: полнодуплексная связь (передача и приём).
1: выход отключён (только приём).
SSM: Software slave management
Программное управление выбором подчинённого устройства.
Когда бит SSM установлен, сигнал со входа NSS не используется, он замещается значением бита SSI.
0: программное управление отключено.
1: программное управление включено.
SSI: Internal slave select
Выбор подчинённого устройства.
Этот бит оказывает влияние только при установленном бите SSM, в этом случае значение бита SSI используется вместо сигнала со входа NSS, а сигнал NSS игнорируется.
LSBFIRST: Frame format
Формат фрейма.
0: старший бит передаётся первым.
1: младший бит передаётся первым.
Примечание.
Не следует изменять значение бита в процессе передачи данных.
SPE: SPI enable
Включение SPI.
0: SPI отключён.
1: SPI включён.
BR[2:0]: Baud rate control
Управление скоростью передачи данных.
Скорость передачи равна fPCLK/2BR+1:
000: fPCLK/2
001: fPCLK/4
010: fPCLK/8
011: fPCLK/16
100: fPCLK/32
101: fPCLK/64
110: fPCLK/128
111: fPCLK/256
Примечание.
Не следует изменять эти биты в процессе передачи данных.
Значение этого битового поля не влияет на устройство, работающее в ведомом режиме. Для ведомого SPI скорость передачи определяется тактовым сигналом от ведущего устройства.
MSTR: Master selection
Переключение режима работы.
0: работа в ведомом режиме.
1: работа в ведущем режиме.
Примечание.
Не следует изменять бит в процессе передачи данных.
CPOL: Clock polarity
Полярность тактового сигнала.
0: SCK сигнал имеет уровень 0 в состоянии покоя.
1: SCK сигнал имеет уровень 1 в состоянии покоя.
Примечание.
Не следует изменять бит в процессе передачи данных.
CPHA: Clock phase
Фаза тактового сигнала.
0: первое переключение на выводе SCK является стробирующим сигналом для первой фиксации данных.
1: второе переключение на выводе SCK является стробирующим сигналом для первой фиксации данных.
Примечание.
Не следует изменять бит в процессе передачи данных.

SPI_CR2 (SPI control register 2)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved TXEIE RXNEIE ERRIE Res. Res. SSOE TXDMAEN RXDMAEN
rw rw rw rw rw rw

Регистр управления 2

Address offset: 0x04
Reset value: 0x0000

Reserved
Зарезервированные биты, следует сохранять значения, имеющиеся в них после сброса.
TXEIE: Tx buffer empty interrupt enable
Разрешение прерывания при освобождении буфера Tx.
0: TXE прерывание маскировано.
1: TXE прерывание не маскировано: разрешено формирование запроса на прерывание при установке флага TXE.
RXNEIE: RX buffer not empty interrupt enable
Разрешение прерывания при заполнении буфера RX.
0: RXNE прерывание маскировано.
1: RXNE прерывание не маскировано: разрешено формирование запроса на прерывание при установке флага RXNE.
ERRIE: Error interrupt enable
Разрешение прерывания в случае ошибки (при установке любого флага ошибки, к которым относятся флаги MODF, OVR, CRCERR).
0: прерывание в случае ошибки маскировано.
1: прерывание в случае ошибки разрешено.
SSOE: SS output enable
Переключение вывода NSS в режим выхода.
0: NSS выход в режиме ведущего устройства отключён, устройство может работать в среде с множественными ведущими устройствами.
1: NSS выход в режиме ведущего устройства включён, работа при наличии нескольких ведущих устройств на шине невозможна.
TXDMAEN: Tx buffer DMA enable
Разрешение формирования запроса DMA при установке флага TXE.
0: генерация запроса DMA при установке флага TXE запрещена.
1: генерация запроса DMA при установке флага TXE разрешена.
RXDMAEN: Rx buffer DMA enable
Разрешение формирования запроса DMA при установке флага RXNE.
0: генерация запроса DMA при установке флага RXNE запрещена.
1: генерация запроса DMA при установке флага RXNE разрешена.

SPI_SR (SPI status register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
Reserved BSY OVR MODF CRC
ERR
Reserved TXE RXNE
r r r rc_w0 r r

Регистр состояния SPI

Address offset: 0x08
Reset value: 0x0002

Reserved
Зарезервированные биты, следует сохранять значения, имеющиеся в них после сброса.
BSY: Busy flag
Флаг занятости.
0: SPI не занят.
1: SPI занят (происходит передача данных или Tx буфер не пуст).
Флаг устанавливается и сбрасывается аппаратно.
OVR: Overrun flag
Флаг переполнения.
0: нет переполнения.
1: произошло переполнение (регистр SPI_DR не был считан своевременно, поэтому приёмный буфер занят, из-за чего последние принятые данные не были помещены в приёмный буфер и были утеряны; приёмный буфер будет содержать последний успешно принятый до переполнения фрейм).
Флаг устанавливается аппаратно. Сброс флага осуществляется программной последовательностью: чтение из регистра SPI_DR следом за считыванием регистра SPI_SR.
Чтобы избежать переполнения, следует своевременно считывать полученные по SPI данные, тем самым освобождая приёмный буфер для новых данных.
MODF: Mode fault
Ошибка при работе в ведущем режиме. Возникает в случае, если SPI сконфигурирован для работы в режиме ведущего устройства (бит MSTR=1), вывод NSS настроен как вход (бит SSOE=0) и при этом на выводе NSS сигнал переключается на низкий уровень. При возникновении данной ошибки бит SPE сбрасывается (автоматическое отключение SPI) и бит MSTR также сбрасывается (принудительный перевод SPI в режим ведомого устройства).
0: нет ошибки.
1: ошибка произошла.
Флаг устанавливается аппаратно.
Для сброса флага выполняется следующая программная последовательность: осуществляется доступ к регистру SPI_SR по чтению или записи, после чего выполняется запись в регистр SPI_CR1.
В целях безопасности, аппаратными средствами реализована невозможность установить биты SPE или MSTR пока установлен флаг MODF.
CRCERR: CRC error flag
Флаг ошибки CRC.
0: полученное значение CRC соответствует значению в регистре SPI_RXCRCR.
1: полученное значение CRC не соответствует значению в регистре SPI_RXCRCR.
Флаг устанавливается аппаратно. Сбрасывается программно записью 0 в данный бит.
TXE: Transmit buffer empty
Флаг освобождения буфера передаваемых данных.
0: Tx буфер не пуст.
1: Tx буфер пуст.
RXNE: Receive buffer not empty
Флаг заполнения буфера принимаемых данных.
0: Rx буфер пуст.
1: Rx буфер не пуст.

SPI_DR (SPI data register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
DR[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Регистр данных SPI

Address offset: 0x0C
Reset value: 0x0000

DR[15:0]: Data register
Регистр принимаемых и передаваемых данных.
Регистр данных служит для доступа к двум буферным регистрам - один для записи (буфер передаваемых данных) и другой - для чтения (регистр принимаемых данных). Запись в регистр является записью в Tx буфер, а чтение из регистра является чтением из Rx буфера.
Примечание.
В зависимости от значения бита DFF в регистре SPI_CR1, для пересылки данных могут использоваться фреймы размером 8 или 16 бит (следует задать размер фрейма до включения SPI, чтобы гарантировать корректность функционирования SPI).
Если задан размер фрейма 8 бит, буферы являются 8-битными и для передачи/приёма используется только младший байт регистра данных (биты SPI_DR[7:0]). При приёме данных, старший байт регистра (SPI_DR[15:8]) принудительно устанавливается в 0.
Если выбран размер фрейма 16 бит, буферы являются 16-битными и регистр данных SPI_DR[15:0] используется полностью.

SPI_CRCPR (SPI CRC polynomial register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
CRCPOLY[15:0]
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

CRC полином

Address offset: 0x10
Reset value: 0x0007

CRCPOLY[15:0]: CRC polynomial register
CRC полином.
Этот регистр содержит полином для вычисления CRC. Значение по умолчанию, загружаемое в регистр после сброса 0x0007. При необходимости в регистр может быть загружено другое значение.

SPI_RXCRCR (SPI RX CRC register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
RXCRC[15:0]
r r r r r r r r r r r r r r r r

Регистр CRC кода принимаемых данных

Address offset: 0x14
Reset value: 0x0000

RXCRC[15:0]: Rx CRC register
CRC код принимаемых данных.
Когда включено вычисление CRC, RXCRC[15:0] содержит значение CRC кода для последовательности полученных байтов. Регистр сбрасывается при записи 1 в бит CRCEN регистра SPI_CR1. При вычислении CRC используется полином из регистра SPI_CRCPR.
В зависимости от заданной длины фрейма (управляется битом DFF в регистре SPI_CR1), которая может составлять 8 или 16 бит, соответственно используется 8 или 16 бит данного регистра и вычисляется CRC8 или CRC16.
Примечание.
Чтение этого регистра при установленном флаге BSY может привести к получению некорректного значения.

SPI_TXCRCR (SPI TX CRC register)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0  
TXCRC[15:0]
r r r r r r r r r r r r r r r r

Регистр CRC кода передаваемых данных

Address offset: 0x18
Reset value: 0x0000

TXCRC[15:0]: Tx CRC register
CRC код передаваемых данных.
Когда включено вычисление CRC, TXCRC[15:0] содержит значение CRC кода для последовательности передаваемых байтов. Регистр сбрасывается при записи 1 в бит CRCEN регистра SPI_CR1. При вычислении CRC используется полином из регистра SPI_CRCPR.
В зависимости от заданной длины фрейма (управляется битом DFF в регистре SPI_CR1), которая может составлять 8 или 16 бит, соответственно используется 8 или 16 бит данного регистра и вычисляется CRC8 или CRC16.
Примечание.
В результате чтения этого регистра при установленном флаге BSY, может быть получено некорректное значение.

Источники и дополнительная литература

  1. "RM0041. Reference manual. STM32F100xx advanced ARM(R)-based 32-bit MCUs"; STMicroelectronics; Doc ID16188 Rev 5; June 2016
author: hamper; date: 2020-10-05
  Рейтинг@Mail.ru