Регистры SPI
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, может быть получено некорректное значение.
Источники и дополнительная литература
- "RM0041. Reference manual. STM32F100xx advanced ARM(R)-based 32-bit MCUs"; STMicroelectronics; Doc ID16188 Rev 5; June 2016
author: hamper; date: 2020-10-05