Регистры SPI ESP32-S3
Регистры GP-SPI2 и GP-SPI3 ESP32-S3: фазы транзакции, частота SCLK, режимы 0–3, буфер на 64 байта, режимы по 1, 2, 4 и — только у SPI2 — 8 линиям, ведомый режим и прерывания передачи.
Содержание
- Пример на C
- Регистры блока
- SPI_CMD_REG
- SPI_ADDR_REG
- SPI_CTRL_REG
- SPI_CLOCK_REG
- SPI_USER_REG
- SPI_USER1_REG
- SPI_USER2_REG
- SPI_MS_DLEN_REG
- SPI_MISC_REG
- SPI_DIN_MODE_REG
- SPI_DIN_NUM_REG
- SPI_DOUT_MODE_REG
- SPI_DMA_CONF_REG
- SPI_DMA_INT_ENA_REG
- SPI_DMA_INT_CLR_REG
- SPI_DMA_INT_RAW_REG
- SPI_DMA_INT_ST_REG
- SPI_DMA_INT_SET_REG
- SPI_Wn_REG
- SPI_SLAVE_REG
- SPI_SLAVE1_REG
- SPI_CLK_GATE_REG
- SPI_DATE_REG
SPI0 и SPI1 ESP32-S3 обслуживают флеш-память и PSRAM; для внешних устройств есть GP-SPI2 по адресу 0x6002 4000 и GP-SPI3 по адресу 0x6002 5000. Набор регистров у них общий, макросы ESP-IDF принимают номер контроллера 2 или 3: SPI_CMD_REG(2). Поля восьмилинейного режима (FREAD_OCT, FWRITE_OCT, OPI_MODE и другие), выводы CS3…CS5 и сегментная передача с буфером CONF есть только у SPI2; у SPI3 на их месте зарезервированные биты.
Транзакция описывается регистрами SPI_USER_REG (какие фазы есть), SPI_USER1_REG и SPI_USER2_REG (длины адреса, паузы и команды минус 1), SPI_MS_DLEN_REG (длина данных в битах минус 1). Частота ведущего — f_SCLK = f_mst / ((CLKCNT_N + 1) · (CLKDIV_PRE + 1)), где f_mst — такт модуля: PLL_F80M_CLK или XTAL_CLK по биту MST_CLK_SEL регистра SPI_CLK_GATE_REG; бит CLK_EQU_SYSCLK = 1 выдаёт SCLK без деления. Ведущий — до 80 МГц, ведомый — до 60 МГц.
Регистры настройки переходят из домена APB в домен такта SPI после записи 1 в бит UPDATE регистра SPI_CMD_REG (только в ведущем режиме); транзакцию запускает бит USR, он сбрасывается сам по окончании.
| Экземпляр | Базовый адрес |
|---|---|
| SPI2 | 0x6002 4000 |
| SPI3 | 0x6002 5000 |
Пример на C
GP-SPI2: передать 4 байта ведущим (soc/spi_reg.h, экземпляр 2). Макросы доступа REG_WRITE, REG_READ, REG_SET_BIT, REG_CLR_BIT, REG_GET_BIT, REG_SET_FIELD и REG_GET_FIELD объявлены в soc/soc.h ESP-IDF; поле задаётся именем макроса без суффикса, маска и сдвиг берутся из его вариантов _V и _S.
#include "soc/spi_reg.h"
REG_SET_BIT(SPI_USER_REG(2), SPI_USR_MOSI); // есть фаза данных MOSI
REG_CLR_BIT(SPI_USER_REG(2), SPI_USR_COMMAND); // без команды
REG_CLR_BIT(SPI_USER_REG(2), SPI_USR_ADDR); // без адреса
REG_SET_FIELD(SPI_MS_DLEN_REG(2), SPI_MS_DATA_BITLEN, 32 - 1);
REG_WRITE(SPI_W0_REG(2), 0x44332211); // первым уходит 0x11
REG_SET_BIT(SPI_CMD_REG(2), SPI_UPDATE); // перенести настройки
while (REG_GET_BIT(SPI_CMD_REG(2), SPI_UPDATE)) {}
REG_SET_BIT(SPI_CMD_REG(2), SPI_USR); // старт транзакции
while (REG_GET_BIT(SPI_CMD_REG(2), SPI_USR)) {}Регистры блока
| Регистр (ESP-IDF) | Смещение | Назначение | После сброса |
|---|---|---|---|
| SPI_CMD_REG(i) | 0x0000 | Запуск транзакции и перенос настроек | 0x0000 0000 |
| SPI_ADDR_REG(i) | 0x0004 | Значение фазы адреса | 0x0000 0000 |
| SPI_CTRL_REG(i) | 0x0008 | Порядок битов, полярности линий, режимы по 2, 4 и 8 линиям | 0x003C 0000 |
| SPI_CLOCK_REG(i) | 0x000C | Делитель частоты SCLK | 0x8000 3043 |
| SPI_USER_REG(i) | 0x0010 | Фазы транзакции, режимы линий данных, фронты | 0x8000 00C0 |
| SPI_USER1_REG(i) | 0x0014 | Длины адреса и паузы, задержки CS | 0xB841 0007 |
| SPI_USER2_REG(i) | 0x0018 | Длина и значение команды | 0x7800 0000 |
| SPI_MS_DLEN_REG(i) | 0x001C | Длина данных транзакции в битах | 0x0000 0000 |
| SPI_MISC_REG(i) | 0x0020 | Выводы CS, полярности, DDR и уровень SCLK в покое | 0x0000 003E |
| SPI_DIN_MODE_REG(i) | 0x0024 | Режим задержки входных линий | 0x0000 0000 |
| SPI_DIN_NUM_REG(i) | 0x0028 | Число тактов задержки входных линий | 0x0000 0000 |
| SPI_DOUT_MODE_REG(i) | 0x002C | Режим задержки выходных линий | 0x0000 0000 |
| SPI_DMA_CONF_REG(i) | 0x0030 | Работа с GDMA, сегментная передача, сброс FIFO | 0x0000 0003 |
| SPI_DMA_INT_ENA_REG(i) | 0x0034 | Разрешение прерываний | 0x0000 0000 |
| SPI_DMA_INT_CLR_REG(i) | 0x0038 | Сброс флагов прерываний записью 1 | 0x0000 0000 |
| SPI_DMA_INT_RAW_REG(i) | 0x003C | Необработанные флаги прерываний | 0x0000 0000 |
| SPI_DMA_INT_ST_REG(i) | 0x0040 | Флаги прерываний после маски разрешения | 0x0000 0000 |
| SPI_DMA_INT_SET_REG(i) | 0x0044 | Программная установка флагов прерываний | 0x0000 0000 |
| SPI_Wn_REG(i) | 0x0098 + n · 0x0004 | Буфер данных, слово n | 0x0000 0000 |
| SPI_SLAVE_REG(i) | 0x00E0 | Ведомый режим, режимы такта, программный сброс | 0x0280 0000 |
| SPI_SLAVE1_REG(i) | 0x00E4 | Ведомый: последние команда и адрес, длина данных | 0x0000 0000 |
| SPI_CLK_GATE_REG(i) | 0x00E8 | Такт модуля: источник и включение | 0x0000 0000 |
| SPI_DATE_REG(i) | 0x00F0 | Версия блока: дата ревизии аппаратуры | 0x0210 1190 |
Доступ — обозначения TRM: R/W — чтение и запись, RO — только чтение, WO — только запись, WT — запись 1 запускает действие, SS и SC — бит ставится и сбрасывается аппаратно, WTC — сбрасывается записью 1.
SPI_CMD_REG(i) — запуск транзакции и перенос настроек
Смещение 0x0000, после сброса 0x0000 0000. TRM: регистр 30.1.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | USR | UPDATE | — | CONF_BITLEN | |||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CONF_BITLEN | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USR | 24 | R/W/SC | 0 | Запись 1 запускает транзакцию; бит сбрасывается по её окончании |
| UPDATE | 23 | WT | 0 | Запись 1 переносит настройки из домена APB в домен такта SPI; только в ведущем режиме |
| CONF_BITLEN | 17:0 | R/W | 0x00000 | Только SPI2: длина состояния CONF сегментной передачи в тактах APB_CLK (у SPI3 зарезервировано) |
SPI_ADDR_REG(i) — значение фазы адреса
Смещение 0x0004, после сброса 0x0000 0000. TRM: регистр 30.2.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USR_ADDR_VALUE | 31:0 | R/W | 0x0000 0000 | Адрес, который передаётся в фазе адреса |
SPI_CTRL_REG(i) — порядок битов, полярности линий, режимы по 2, 4 и 8 линиям
Смещение 0x0008, после сброса 0x003C 0000. TRM: регистр 30.6.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | WR_BIT_ORDER | RD_BIT_ORDER | — | WP_POL | HOLD_POL | D_POL | Q_POL | — | FREAD_OCT | ||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| FREAD_QUAD | FREAD_DUAL | — | FCMD_OCT | FCMD_QUAD | FCMD_DUAL | FADDR_OCT | FADDR_QUAD | FADDR_DUAL | — | DUMMY_OUT | — | ||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| WR_BIT_ORDER | 26:25 | R/W | 0x0 | Порядок битов при передаче: 0 — старший первым, 1 — младший |
| RD_BIT_ORDER | 24:23 | R/W | 0x0 | Порядок битов при приёме: 0 — старший первым, 1 — младший |
| WP_POL | 21 | R/W | 1 | Уровень на линии WP в покое |
| HOLD_POL | 20 | R/W | 1 | Уровень на линии HOLD в покое |
| D_POL | 19 | R/W | 1 | Полярность линии MOSI: 1 — высокий, 0 — низкий |
| Q_POL | 18 | R/W | 1 | Полярность линии MISO: 1 — высокий, 0 — низкий |
| FREAD_OCT | 16 | R/W | 0 | Только SPI2: приём данных по 8 линиям |
| FREAD_QUAD | 15 | R/W | 0 | Приём данных по 4 линиям |
| FREAD_DUAL | 14 | R/W | 0 | Приём данных по 2 линиям |
| FCMD_OCT | 10 | R/W | 0 | Только SPI2: команда по 8 линиям |
| FCMD_QUAD | 9 | R/W | 0 | Команда по 4 линиям |
| FCMD_DUAL | 8 | R/W | 0 | Команда по 2 линиям |
| FADDR_OCT | 7 | R/W | 0 | Только SPI2: адрес по 8 линиям |
| FADDR_QUAD | 6 | R/W | 0 | Адрес по 4 линиям |
| FADDR_DUAL | 5 | R/W | 0 | Адрес по 2 линиям |
| DUMMY_OUT | 3 | R/W | 0 | SPI2: 1 — выдавать сигналы шины во время паузы DUMMY |
SPI_CLOCK_REG(i) — делитель частоты SCLK
Смещение 0x000C, после сброса 0x8000 3043. TRM: регистр 30.13.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| CLK_EQU_SYSCLK | — | CLKDIV_PRE | CLKCNT_N | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| CLKCNT_N | CLKCNT_H | CLKCNT_L | |||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| CLK_EQU_SYSCLK | 31 | R/W | 1 | Ведущий: 1 — SCLK равен такту модуля без деления |
| CLKDIV_PRE | 21:18 | R/W | 0x0 | Ведущий: предделитель; в формуле частоты — CLKDIV_PRE + 1 |
| CLKCNT_N | 17:12 | R/W | 0x03 | Ведущий: делитель; в формуле частоты — CLKCNT_N + 1 |
| CLKCNT_H | 11:6 | R/W | 0x01 | Ведущий: floor((CLKCNT_N + 1) / 2 − 1); в ведомом режиме 0 |
| CLKCNT_L | 5:0 | R/W | 0x03 | Ведущий: равен CLKCNT_N; в ведомом режиме 0 |
SPI_USER_REG(i) — фазы транзакции, режимы линий данных, фронты
Смещение 0x0010, после сброса 0x8000 00C0. TRM: регистр 30.3.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USR_COMMAND | 31 | R/W | 1 | В транзакции есть фаза команды |
| USR_ADDR | 30 | R/W | 0 | В транзакции есть фаза адреса |
| USR_DUMMY | 29 | R/W | 0 | В транзакции есть пауза DUMMY |
| USR_MISO | 28 | R/W | 0 | В транзакции есть приём данных |
| USR_MOSI | 27 | R/W | 0 | В транзакции есть передача данных |
| USR_DUMMY_IDLE | 26 | R/W | 0 | Во время паузы DUMMY такт SCLK не выдаётся |
| USR_MOSI_HIGHPART | 25 | R/W | 0 | Данные для передачи берутся из W8…W15 |
| USR_MISO_HIGHPART | 24 | R/W | 0 | Принятые данные кладутся в W8…W15 |
| SIO | 17 | R/W | 0 | Трёхпроводный режим: одна линия данных на приём и передачу |
| USR_CONF_NXT | 15 | R/W | 0 | Только SPI2: после этой транзакции следует ещё одна сегментная |
| FWRITE_OCT | 14 | R/W | 0 | Только SPI2: передача данных по 8 линиям |
| FWRITE_QUAD | 13 | R/W | 0 | Передача данных по 4 линиям |
| FWRITE_DUAL | 12 | R/W | 0 | Передача данных по 2 линиям |
| CK_OUT_EDGE | 9 | R/W | 0 | Фронт выдачи данных; вместе с CK_IDLE_EDGE задаёт режим SPI ведущего |
| RSCK_I_EDGE | 8 | R/W | 0 | Ведомый: вместе с TSCK_I_EDGE задаёт режим SPI |
| CS_SETUP | 7 | R/W | 1 | 1 — выдавать CS в состоянии подготовки PREP |
| CS_HOLD | 6 | R/W | 1 | 1 — держать CS в состоянии DONE |
| TSCK_I_EDGE | 5 | R/W | 0 | Ведомый: вместе с RSCK_I_EDGE задаёт режим SPI |
| OPI_MODE | 4 | R/W | 0 | Только SPI2: режим OPI — все фазы по 8 линиям |
| QPI_MODE | 3 | R/W/SS/SC | 0 | Режим QPI — все фазы по 4 линиям |
| DOUTDIN | 0 | R/W | 0 | Полный дуплекс: передача и приём одновременно |
SPI_USER1_REG(i) — длины адреса и паузы, задержки CS
Смещение 0x0014, после сброса 0xB841 0007. TRM: регистр 30.4.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| USR_ADDR_BITLEN | CS_HOLD_TIME | CS_SETUP_TIME | MST_WFULL_ERR_END_EN | ||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | USR_DUMMY_CYCLELEN | ||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USR_ADDR_BITLEN | 31:27 | R/W | 0x17 | Длина адреса в битах минус 1 |
| CS_HOLD_TIME | 26:22 | R/W | 0x01 | Задержка CS после данных в тактах SCLK (вместе с CS_HOLD) |
| CS_SETUP_TIME | 21:17 | R/W | 0x00 | Длина состояния PREP в тактах SCLK минус 1 (вместе с CS_SETUP) |
| MST_WFULL_ERR_END_EN | 16 | R/W | 1 | 1 — прервать передачу при переполнении RX AFIFO ведущего |
| USR_DUMMY_CYCLELEN | 7:0 | R/W | 0x07 | Длина паузы DUMMY в тактах SCLK минус 1 |
SPI_USER2_REG(i) — длина и значение команды
Смещение 0x0018, после сброса 0x7800 0000. TRM: регистр 30.5.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| USR_COMMAND_BITLEN | MST_REMPTY_ERR_END_EN | — | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| USR_COMMAND_VALUE | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USR_COMMAND_BITLEN | 31:28 | R/W | 0x7 | Длина команды в битах минус 1 |
| MST_REMPTY_ERR_END_EN | 27 | R/W | 1 | 1 — прервать передачу, если TX AFIFO ведущего опустел |
| USR_COMMAND_VALUE | 15:0 | R/W | 0x0000 | Значение команды |
SPI_MS_DLEN_REG(i) — длина данных транзакции в битах
Смещение 0x001C, после сброса 0x0000 0000. TRM: регистр 30.7.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| MS_DATA_BITLEN | 17:0 | R/W | 0x00000 | Длина данных в битах минус 1 |
SPI_MISC_REG(i) — выводы CS, полярности, DDR и уровень SCLK в покое
Смещение 0x0020, после сброса 0x0000 003E. TRM: регистр 30.8.
У этого регистра в TRM два рисунка: 30.8 для SPI2 и 30.9 для SPI3. Здесь показан вариант SPI2; у SPI3 нет полей DQS_IDLE_EDGE, CMD_DTR_EN, ADDR_DTR_EN, DATA_DTR_EN, CLK_DATA_DTR_EN и CS3…CS5_DIS, а MASTER_CS_POL занимает биты 9:7. В текстах описаний TRM диапазоны MASTER_CS_POL (0…2 у SPI2, 0…5 у SPI3) переставлены относительно рисунков; страница следует рисункам.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| QUAD_DIN_PIN_SWAP | 31 | R/W | 0 | 1 — поменять местами входы FSPID и FSPIQ, FSPIWP и FSPIHD |
| CS_KEEP_ACTIVE | 30 | R/W | 0 | 1 — держать CS активным |
| CK_IDLE_EDGE | 29 | R/W | 0 | Уровень SCLK в покое: 1 — высокий, 0 — низкий |
| DQS_IDLE_EDGE | 24 | R/W | 0 | Только SPI2: уровень SPI_DQS в покое |
| SLAVE_CS_POL | 23 | R/W | 0 | Ведомый: 1 — инвертировать вход CS |
| CMD_DTR_EN | 19 | R/W | 0 | Только SPI2: фаза команды в режиме DDR |
| ADDR_DTR_EN | 18 | R/W | 0 | Только SPI2: фаза адреса в режиме DDR |
| DATA_DTR_EN | 17 | R/W | 0 | Только SPI2: фазы данных в режиме DDR |
| CLK_DATA_DTR_EN | 16 | R/W | 0 | Только SPI2: DDR для такта, данных и SPI_DQS, а не только для DQS |
| MASTER_CS_POL | 12:7 | R/W | 0x00 | Полярность выходов CS ведущего, бит на линию: 0 — активный низкий. У SPI2 — биты 12:7 (CS0…CS5), у SPI3 — биты 9:7 (CS0…CS2) |
| CK_DIS | 6 | R/W | 0 | 1 — не выдавать SCLK |
| CS5_DIS | 5 | R/W | 1 | Только SPI2: 1 — не использовать CS5 |
| CS4_DIS | 4 | R/W | 1 | Только SPI2: 1 — не использовать CS4 |
| CS3_DIS | 3 | R/W | 1 | Только SPI2: 1 — не использовать CS3 |
| CS2_DIS | 2 | R/W | 1 | 1 — не использовать CS2 |
| CS1_DIS | 1 | R/W | 1 | 1 — не использовать CS1 |
| CS0_DIS | 0 | R/W | 0 | 1 — не использовать CS0 |
SPI_DIN_MODE_REG(i) — режим задержки входных линий
Смещение 0x0024, после сброса 0x0000 0000. TRM: регистр 30.15.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | TIMING_HCLK_ACTIVE | ||||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DIN7_MODE | DIN6_MODE | DIN5_MODE | DIN4_MODE | DIN3_MODE | DIN2_MODE | DIN1_MODE | DIN0_MODE | ||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| TIMING_HCLK_ACTIVE | 16 | R/W | 0 | Включить такт компенсации задержек clk_hclk 160 МГц |
| DIN7_MODE | 15:14 | R/W | 0x0 | Только SPI2: режим задержки входа D7 |
| DIN6_MODE | 13:12 | R/W | 0x0 | Только SPI2: режим задержки входа D6 |
| DIN5_MODE | 11:10 | R/W | 0x0 | Только SPI2: режим задержки входа D5 |
| DIN4_MODE | 9:8 | R/W | 0x0 | Только SPI2: режим задержки входа D4 |
| DIN3_MODE | 7:6 | R/W | 0x0 | Режим задержки входа D3, значения как у DIN0_MODE |
| DIN2_MODE | 5:4 | R/W | 0x0 | Режим задержки входа D2, значения как у DIN0_MODE |
| DIN1_MODE | 3:2 | R/W | 0x0 | Режим задержки входа D1, значения как у DIN0_MODE |
| DIN0_MODE | 1:0 | R/W | 0x0 | Вход D0: 0 — без задержки, 1 — задержка по спаду SCLK на DIN0_NUM + 1 тактов, 2 и 3 — по такту clk_hclk на DIN0_NUM + 1 и ещё такт SCLK |
SPI_DIN_NUM_REG(i) — число тактов задержки входных линий
Смещение 0x0028, после сброса 0x0000 0000. TRM: регистр 30.16.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| DIN7_NUM | DIN6_NUM | DIN5_NUM | DIN4_NUM | DIN3_NUM | DIN2_NUM | DIN1_NUM | DIN0_NUM | ||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DIN7_NUM | 15:14 | R/W | 0x0 | Только SPI2: задержка входа D7 |
| DIN6_NUM | 13:12 | R/W | 0x0 | Только SPI2: задержка входа D6 |
| DIN5_NUM | 11:10 | R/W | 0x0 | Только SPI2: задержка входа D5 |
| DIN4_NUM | 9:8 | R/W | 0x0 | Только SPI2: задержка входа D4 |
| DIN3_NUM | 7:6 | R/W | 0x0 | Задержка входа D3 по режиму DIN3_MODE |
| DIN2_NUM | 5:4 | R/W | 0x0 | Задержка входа D2 по режиму DIN2_MODE |
| DIN1_NUM | 3:2 | R/W | 0x0 | Задержка входа D1 по режиму DIN1_MODE |
| DIN0_NUM | 1:0 | R/W | 0x0 | Задержка входа D0 по режиму DIN0_MODE |
SPI_DOUT_MODE_REG(i) — режим задержки выходных линий
Смещение 0x002C, после сброса 0x0000 0000. TRM: регистр 30.17.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | D_DQS_MODE | DOUT7_MODE | DOUT6_MODE | DOUT5_MODE | DOUT4_MODE | DOUT3_MODE | DOUT2_MODE | DOUT1_MODE | DOUT0_MODE | ||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| D_DQS_MODE | 8 | R/W | 0 | Только SPI2: режим задержки выхода DQS |
| DOUT7_MODE | 7 | R/W | 0 | Только SPI2: режим задержки выхода D7 |
| DOUT6_MODE | 6 | R/W | 0 | Только SPI2: режим задержки выхода D6 |
| DOUT5_MODE | 5 | R/W | 0 | Только SPI2: режим задержки выхода D5 |
| DOUT4_MODE | 4 | R/W | 0 | Только SPI2: режим задержки выхода D4 |
| DOUT3_MODE | 3 | R/W | 0 | Режим задержки выхода D3 |
| DOUT2_MODE | 2 | R/W | 0 | Режим задержки выхода D2 |
| DOUT1_MODE | 1 | R/W | 0 | Режим задержки выхода D1 |
| DOUT0_MODE | 0 | R/W | 0 | Выход D0: 0 — без задержки, 1 — задержка по спаду SCLK на такт |
SPI_DMA_CONF_REG(i) — работа с GDMA, сегментная передача, сброс FIFO
Смещение 0x0030, после сброса 0x0000 0003. TRM: регистр 30.10.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| DMA_AFIFO_RST | BUF_AFIFO_RST | RX_AFIFO_RST | DMA_TX_ENA | DMA_RX_ENA | — | RX_EOF_EN | SLV_TX_SEG_TRANS_CLR_EN | SLV_RX_SEG_TRANS_CLR_EN | DMA_SLV_SEG_TRANS_EN | — | |||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | DMA_INFIFO_FULL | DMA_OUTFIFO_EMPTY | |||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| DMA_AFIFO_RST | 31 | WT | 0 | Запись 1 сбрасывает dma_tx_afifo (передача ведомого через DMA) |
| BUF_AFIFO_RST | 30 | WT | 0 | Запись 1 сбрасывает buf_tx_afifo (передача из буфера W0…W15) |
| RX_AFIFO_RST | 29 | WT | 0 | Запись 1 сбрасывает spi_rx_afifo (приём) |
| DMA_TX_ENA | 28 | R/W | 0 | 1 — передача через GDMA |
| DMA_RX_ENA | 27 | R/W | 0 | 1 — приём через GDMA |
| RX_EOF_EN | 21 | R/W | 0 | 1 — флаг GDMA_IN_SUC_EOF ставится, когда принято MS_DATA_BITLEN + 1 бит; 0 — по событию TRANS_DONE или DMA_SEG_TRANS_DONE |
| SLV_TX_SEG_TRANS_CLR_EN | 20 | R/W | 0 | Ведомый: что делать, если буфер передачи GDMA короче данных |
| SLV_RX_SEG_TRANS_CLR_EN | 19 | R/W | 0 | Ведомый: что делать, если буфер приёма GDMA короче данных |
| DMA_SLV_SEG_TRANS_EN | 18 | R/W | 0 | 1 — сегментная передача через GDMA в полудуплексе ведомого |
| DMA_INFIFO_FULL | 1 | RO | 1 | 1 — приёмный FIFO GDMA не готов принимать |
| DMA_OUTFIFO_EMPTY | 0 | RO | 1 | 1 — передающий FIFO GDMA не готов передавать |
SPI_DMA_INT_ENA_REG(i) — разрешение прерываний
Смещение 0x0034, после сброса 0x0000 0000. TRM: регистр 30.18.
Флаг SEG_MAGIC_ERR (бит 14) есть только у SPI2. Бит 15 (SLV_BUF_ADDR_ERR в SVD) в TRM зарезервирован и на странице не показан.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APP1_INT_ENA | 20 | R/W | 0 | Пользовательское прерывание 1: ставится только записью в APP1_INT_SET |
| APP2_INT_ENA | 19 | R/W | 0 | Пользовательское прерывание 2: ставится только записью в APP2_INT_SET |
| MST_TX_AFIFO_REMPTY_ERR_INT_ENA | 18 | R/W | 0 | Ведущий: чтение из пустого TX AFIFO |
| MST_RX_AFIFO_WFULL_ERR_INT_ENA | 17 | R/W | 0 | Ведущий: запись в полный RX AFIFO |
| SLV_CMD_ERR_INT_ENA | 16 | R/W | 0 | Ведомый принял неподдерживаемую команду |
| SEG_MAGIC_ERR_INT_ENA | 14 | R/W | 0 | Только SPI2: ошибка магического числа в буфере CONF сегментной передачи |
| DMA_SEG_TRANS_DONE_INT_ENA | 13 | R/W | 0 | Ведомый: закончена сегментная передача End_SEG_TRANS |
| TRANS_DONE_INT_ENA | 12 | R/W | 0 | Передача по шине закончена — в ведущем и ведомом режимах |
| SLV_WR_BUF_DONE_INT_ENA | 11 | R/W | 0 | Ведомый: закончена передача Wr_BUF |
| SLV_RD_BUF_DONE_INT_ENA | 10 | R/W | 0 | Ведомый: закончена передача Rd_BUF |
| SLV_WR_DMA_DONE_INT_ENA | 9 | R/W | 0 | Ведомый: закончена передача Wr_DMA |
| SLV_RD_DMA_DONE_INT_ENA | 8 | R/W | 0 | Ведомый: закончена передача Rd_DMA |
| SLV_CMDA_INT_ENA | 7 | R/W | 0 | Ведомый принял команду CMDA |
| SLV_CMD9_INT_ENA | 6 | R/W | 0 | Ведомый принял команду CMD9 |
| SLV_CMD8_INT_ENA | 5 | R/W | 0 | Ведомый принял команду CMD8 |
| SLV_CMD7_INT_ENA | 4 | R/W | 0 | Ведомый принял команду CMD7 |
| SLV_EN_QPI_INT_ENA | 3 | R/W | 0 | Ведомый принял команду En_QPI |
| SLV_EX_QPI_INT_ENA | 2 | R/W | 0 | Ведомый принял команду Ex_QPI |
| DMA_OUTFIFO_EMPTY_ERR_INT_ENA | 1 | R/W | 0 | Буфер передачи GDMA короче фактически переданных данных |
| DMA_INFIFO_FULL_ERR_INT_ENA | 0 | R/W | 0 | Буфер приёма GDMA короче фактически переданных данных |
SPI_DMA_INT_CLR_REG(i) — сброс флагов прерываний записью 1
Смещение 0x0038, после сброса 0x0000 0000. TRM: регистр 30.19.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APP1_INT_CLR | 20 | WT | 0 | Пользовательское прерывание 1: ставится только записью в APP1_INT_SET |
| APP2_INT_CLR | 19 | WT | 0 | Пользовательское прерывание 2: ставится только записью в APP2_INT_SET |
| MST_TX_AFIFO_REMPTY_ERR_INT_CLR | 18 | WT | 0 | Ведущий: чтение из пустого TX AFIFO |
| MST_RX_AFIFO_WFULL_ERR_INT_CLR | 17 | WT | 0 | Ведущий: запись в полный RX AFIFO |
| SLV_CMD_ERR_INT_CLR | 16 | WT | 0 | Ведомый принял неподдерживаемую команду |
| SEG_MAGIC_ERR_INT_CLR | 14 | WT | 0 | Только SPI2: ошибка магического числа в буфере CONF сегментной передачи |
| DMA_SEG_TRANS_DONE_INT_CLR | 13 | WT | 0 | Ведомый: закончена сегментная передача End_SEG_TRANS |
| TRANS_DONE_INT_CLR | 12 | WT | 0 | Передача по шине закончена — в ведущем и ведомом режимах |
| SLV_WR_BUF_DONE_INT_CLR | 11 | WT | 0 | Ведомый: закончена передача Wr_BUF |
| SLV_RD_BUF_DONE_INT_CLR | 10 | WT | 0 | Ведомый: закончена передача Rd_BUF |
| SLV_WR_DMA_DONE_INT_CLR | 9 | WT | 0 | Ведомый: закончена передача Wr_DMA |
| SLV_RD_DMA_DONE_INT_CLR | 8 | WT | 0 | Ведомый: закончена передача Rd_DMA |
| SLV_CMDA_INT_CLR | 7 | WT | 0 | Ведомый принял команду CMDA |
| SLV_CMD9_INT_CLR | 6 | WT | 0 | Ведомый принял команду CMD9 |
| SLV_CMD8_INT_CLR | 5 | WT | 0 | Ведомый принял команду CMD8 |
| SLV_CMD7_INT_CLR | 4 | WT | 0 | Ведомый принял команду CMD7 |
| SLV_EN_QPI_INT_CLR | 3 | WT | 0 | Ведомый принял команду En_QPI |
| SLV_EX_QPI_INT_CLR | 2 | WT | 0 | Ведомый принял команду Ex_QPI |
| DMA_OUTFIFO_EMPTY_ERR_INT_CLR | 1 | WT | 0 | Буфер передачи GDMA короче фактически переданных данных |
| DMA_INFIFO_FULL_ERR_INT_CLR | 0 | WT | 0 | Буфер приёма GDMA короче фактически переданных данных |
SPI_DMA_INT_RAW_REG(i) — необработанные флаги прерываний
Смещение 0x003C, после сброса 0x0000 0000. TRM: регистр 30.20.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APP1_INT_RAW | 20 | R/WTC/SS | 0 | Пользовательское прерывание 1: ставится только записью в APP1_INT_SET |
| APP2_INT_RAW | 19 | R/WTC/SS | 0 | Пользовательское прерывание 2: ставится только записью в APP2_INT_SET |
| MST_TX_AFIFO_REMPTY_ERR_INT_RAW | 18 | R/WTC/SS | 0 | Ведущий: чтение из пустого TX AFIFO |
| MST_RX_AFIFO_WFULL_ERR_INT_RAW | 17 | R/WTC/SS | 0 | Ведущий: запись в полный RX AFIFO |
| SLV_CMD_ERR_INT_RAW | 16 | R/WTC/SS | 0 | Ведомый принял неподдерживаемую команду |
| SEG_MAGIC_ERR_INT_RAW | 14 | R/WTC/SS | 0 | Только SPI2: ошибка магического числа в буфере CONF сегментной передачи |
| DMA_SEG_TRANS_DONE_INT_RAW | 13 | R/WTC/SS | 0 | Ведомый: закончена сегментная передача End_SEG_TRANS |
| TRANS_DONE_INT_RAW | 12 | R/WTC/SS | 0 | Передача по шине закончена — в ведущем и ведомом режимах |
| SLV_WR_BUF_DONE_INT_RAW | 11 | R/WTC/SS | 0 | Ведомый: закончена передача Wr_BUF |
| SLV_RD_BUF_DONE_INT_RAW | 10 | R/WTC/SS | 0 | Ведомый: закончена передача Rd_BUF |
| SLV_WR_DMA_DONE_INT_RAW | 9 | R/WTC/SS | 0 | Ведомый: закончена передача Wr_DMA |
| SLV_RD_DMA_DONE_INT_RAW | 8 | R/WTC/SS | 0 | Ведомый: закончена передача Rd_DMA |
| SLV_CMDA_INT_RAW | 7 | R/WTC/SS | 0 | Ведомый принял команду CMDA |
| SLV_CMD9_INT_RAW | 6 | R/WTC/SS | 0 | Ведомый принял команду CMD9 |
| SLV_CMD8_INT_RAW | 5 | R/WTC/SS | 0 | Ведомый принял команду CMD8 |
| SLV_CMD7_INT_RAW | 4 | R/WTC/SS | 0 | Ведомый принял команду CMD7 |
| SLV_EN_QPI_INT_RAW | 3 | R/WTC/SS | 0 | Ведомый принял команду En_QPI |
| SLV_EX_QPI_INT_RAW | 2 | R/WTC/SS | 0 | Ведомый принял команду Ex_QPI |
| DMA_OUTFIFO_EMPTY_ERR_INT_RAW | 1 | R/WTC/SS | 0 | Буфер передачи GDMA короче фактически переданных данных |
| DMA_INFIFO_FULL_ERR_INT_RAW | 0 | R/WTC/SS | 0 | Буфер приёма GDMA короче фактически переданных данных |
SPI_DMA_INT_ST_REG(i) — флаги прерываний после маски разрешения
Смещение 0x0040, после сброса 0x0000 0000. TRM: регистр 30.21.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APP1_INT_ST | 20 | RO | 0 | Пользовательское прерывание 1: ставится только записью в APP1_INT_SET |
| APP2_INT_ST | 19 | RO | 0 | Пользовательское прерывание 2: ставится только записью в APP2_INT_SET |
| MST_TX_AFIFO_REMPTY_ERR_INT_ST | 18 | RO | 0 | Ведущий: чтение из пустого TX AFIFO |
| MST_RX_AFIFO_WFULL_ERR_INT_ST | 17 | RO | 0 | Ведущий: запись в полный RX AFIFO |
| SLV_CMD_ERR_INT_ST | 16 | RO | 0 | Ведомый принял неподдерживаемую команду |
| SEG_MAGIC_ERR_INT_ST | 14 | RO | 0 | Только SPI2: ошибка магического числа в буфере CONF сегментной передачи |
| DMA_SEG_TRANS_DONE_INT_ST | 13 | RO | 0 | Ведомый: закончена сегментная передача End_SEG_TRANS |
| TRANS_DONE_INT_ST | 12 | RO | 0 | Передача по шине закончена — в ведущем и ведомом режимах |
| SLV_WR_BUF_DONE_INT_ST | 11 | RO | 0 | Ведомый: закончена передача Wr_BUF |
| SLV_RD_BUF_DONE_INT_ST | 10 | RO | 0 | Ведомый: закончена передача Rd_BUF |
| SLV_WR_DMA_DONE_INT_ST | 9 | RO | 0 | Ведомый: закончена передача Wr_DMA |
| SLV_RD_DMA_DONE_INT_ST | 8 | RO | 0 | Ведомый: закончена передача Rd_DMA |
| SLV_CMDA_INT_ST | 7 | RO | 0 | Ведомый принял команду CMDA |
| SLV_CMD9_INT_ST | 6 | RO | 0 | Ведомый принял команду CMD9 |
| SLV_CMD8_INT_ST | 5 | RO | 0 | Ведомый принял команду CMD8 |
| SLV_CMD7_INT_ST | 4 | RO | 0 | Ведомый принял команду CMD7 |
| SLV_EN_QPI_INT_ST | 3 | RO | 0 | Ведомый принял команду En_QPI |
| SLV_EX_QPI_INT_ST | 2 | RO | 0 | Ведомый принял команду Ex_QPI |
| DMA_OUTFIFO_EMPTY_ERR_INT_ST | 1 | RO | 0 | Буфер передачи GDMA короче фактически переданных данных |
| DMA_INFIFO_FULL_ERR_INT_ST | 0 | RO | 0 | Буфер приёма GDMA короче фактически переданных данных |
SPI_DMA_INT_SET_REG(i) — программная установка флагов прерываний
Смещение 0x0044, после сброса 0x0000 0000. TRM: регистр 30.22.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| APP1_INT_SET | 20 | WT | 0 | Пользовательское прерывание 1: ставится только записью в APP1_INT_SET |
| APP2_INT_SET | 19 | WT | 0 | Пользовательское прерывание 2: ставится только записью в APP2_INT_SET |
| MST_TX_AFIFO_REMPTY_ERR_INT_SET | 18 | WT | 0 | Ведущий: чтение из пустого TX AFIFO |
| MST_RX_AFIFO_WFULL_ERR_INT_SET | 17 | WT | 0 | Ведущий: запись в полный RX AFIFO |
| SLV_CMD_ERR_INT_SET | 16 | WT | 0 | Ведомый принял неподдерживаемую команду |
| SEG_MAGIC_ERR_INT_SET | 14 | WT | 0 | Только SPI2: ошибка магического числа в буфере CONF сегментной передачи |
| DMA_SEG_TRANS_DONE_INT_SET | 13 | WT | 0 | Ведомый: закончена сегментная передача End_SEG_TRANS |
| TRANS_DONE_INT_SET | 12 | WT | 0 | Передача по шине закончена — в ведущем и ведомом режимах |
| SLV_WR_BUF_DONE_INT_SET | 11 | WT | 0 | Ведомый: закончена передача Wr_BUF |
| SLV_RD_BUF_DONE_INT_SET | 10 | WT | 0 | Ведомый: закончена передача Rd_BUF |
| SLV_WR_DMA_DONE_INT_SET | 9 | WT | 0 | Ведомый: закончена передача Wr_DMA |
| SLV_RD_DMA_DONE_INT_SET | 8 | WT | 0 | Ведомый: закончена передача Rd_DMA |
| SLV_CMDA_INT_SET | 7 | WT | 0 | Ведомый принял команду CMDA |
| SLV_CMD9_INT_SET | 6 | WT | 0 | Ведомый принял команду CMD9 |
| SLV_CMD8_INT_SET | 5 | WT | 0 | Ведомый принял команду CMD8 |
| SLV_CMD7_INT_SET | 4 | WT | 0 | Ведомый принял команду CMD7 |
| SLV_EN_QPI_INT_SET | 3 | WT | 0 | Ведомый принял команду En_QPI |
| SLV_EX_QPI_INT_SET | 2 | WT | 0 | Ведомый принял команду Ex_QPI |
| DMA_OUTFIFO_EMPTY_ERR_INT_SET | 1 | WT | 0 | Буфер передачи GDMA короче фактически переданных данных |
| DMA_INFIFO_FULL_ERR_INT_SET | 0 | WT | 0 | Буфер приёма GDMA короче фактически переданных данных |
SPI_Wn_REG(i) — буфер данных, слово n
16 копий, n = 0…15: смещение 0x0098 + n · 0x0004, после сброса 0x0000 0000. TRM: регистр 30.23.
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| BUFn | 31:0 | R/W/SS | 0x0000 0000 | Слово n буфера: 64 байта, байт 0 — биты 7:0 регистра W0 |
SPI_SLAVE_REG(i) — ведомый режим, режимы такта, программный сброс
Смещение 0x00E0, после сброса 0x0280 0000. TRM: регистр 30.11.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| — | USR_CONF | SOFT_RESET | SLAVE_MODE | DMA_SEG_MAGIC_VALUE | — | ||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | SLV_WRBUF_BITLEN_EN | SLV_RDBUF_BITLEN_EN | SLV_WRDMA_BITLEN_EN | SLV_RDDMA_BITLEN_EN | — | RSCK_DATA_OUT | CLK_MODE_13 | CLK_MODE | |||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| USR_CONF | 28 | R/W | 0 | Только SPI2: 1 — запустить состояние CONF сегментной передачи |
| SOFT_RESET | 27 | WT | 0 | Запись 1 сбрасывает линии такта, CS и данных |
| SLAVE_MODE | 26 | R/W | 0 | 1 — ведомый режим, 0 — ведущий |
| DMA_SEG_MAGIC_VALUE | 25:22 | R/W | 0xA | Только SPI2: магическое число таблицы BM сегментной передачи |
| SLV_WRBUF_BITLEN_EN | 11 | R/W | 0 | Ведомый: хранить длину передачи Wr_BUF в SLV_DATA_BITLEN |
| SLV_RDBUF_BITLEN_EN | 10 | R/W | 0 | Ведомый: хранить длину передачи Rd_BUF в SLV_DATA_BITLEN |
| SLV_WRDMA_BITLEN_EN | 9 | R/W | 0 | Ведомый: хранить длину передачи Wr_DMA в SLV_DATA_BITLEN |
| SLV_RDDMA_BITLEN_EN | 8 | R/W | 0 | Ведомый: хранить длину передачи Rd_DMA в SLV_DATA_BITLEN |
| RSCK_DATA_OUT | 3 | R/W | 0 | Ведомый: 1 — выдавать данные по фронту RSCK, 0 — по фронту TSCK |
| CLK_MODE_13 | 2 | R/W | 0 | Ведомый: 1 — режимы 1 и 3, 0 — режимы 0 и 2 |
| CLK_MODE | 1:0 | R/W | 0x0 | SCLK после снятия CS: 0 — выключен, 1 — ещё 1 такт, 2 — ещё 2 такта, 3 — всегда включён |
SPI_SLAVE1_REG(i) — ведомый: последние команда и адрес, длина данных
Смещение 0x00E4, после сброса 0x0000 0000. TRM: регистр 30.12.
| 31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 |
| SLV_LAST_ADDR | SLV_LAST_COMMAND | SLV_DATA_BITLEN | |||||||||||||
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| SLV_DATA_BITLEN | |||||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| SLV_LAST_ADDR | 31:26 | R/W/SS | 0x00 | Ведомый: значение принятого адреса |
| SLV_LAST_COMMAND | 25:18 | R/W/SS | 0x00 | Ведомый: значение принятой команды |
| SLV_DATA_BITLEN | 17:0 | R/W/SS | 0x00000 | Ведомый: длина переданных данных в битах |
SPI_CLK_GATE_REG(i) — такт модуля: источник и включение
Смещение 0x00E8, после сброса 0x0000 0000. TRM: регистр 30.14.
| 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| — | MST_CLK_SEL | MST_CLK_ACTIVE | CLK_EN | ||||||||||||
| Поле | Биты | Доступ | Сброс | Назначение |
|---|---|---|---|---|
| MST_CLK_SEL | 2 | R/W | 0 | Такт модуля ведущего: 1 — PLL_F80M_CLK, 0 — XTAL_CLK |
| MST_CLK_ACTIVE | 1 | R/W | 0 | 1 — включить такт модуля |
| CLK_EN | 0 | R/W | 0 | 1 — включить такт регистров |
SPI_DATE_REG(i) — версия блока: дата ревизии аппаратуры
Смещение 0x00F0, после сброса 0x0210 1190. TRM: регистр 30.39.
| Поле | Биты | Доступ | Сброс |
|---|---|---|---|
| DATE | 27:0 | R/W | 0x2101190 |
Частые вопросы
Как запустить передачу через регистры GP-SPI2 ESP32-S3?
Записать данные в W0…W15, длину в битах минус 1 в SPI_MS_DLEN_REG, установить USR_MOSI в SPI_USER_REG, записать 1 в SPI_UPDATE и дождаться его сброса, затем записать 1 в SPI_USR. Окончание видно по сбросу SPI_USR или по флагу TRANS_DONE в SPI_DMA_INT_RAW_REG. Так же поступает драйвер ESP-IDF (spi_ll.h): update = 1, ожидание, затем usr = 1.
Какой режим SPI задают CK_IDLE_EDGE и CK_OUT_EDGE ESP32-S3?
По таблице 30.7-1 TRM для ведущего: режим 0 — CK_IDLE_EDGE = 0, CK_OUT_EDGE = 0; режим 1 — 0 и 1; режим 2 — 1 и 1; режим 3 — 1 и 0. CK_IDLE_EDGE лежит в SPI_MISC_REG и задаёт уровень SCLK в покое, CK_OUT_EDGE — в SPI_USER_REG. Ведомый настраивается иначе: битами TSCK_I_EDGE, RSCK_I_EDGE и CLK_MODE_13 (таблица 30.7-2).
Источники
- Espressif. ESP32-S3 Technical Reference Manual, версия 1.8 — глава 30: таблица Register Summary и рисунки регистров — смещения, поля, тип доступа и значения после сброса
- Espressif. SVD svd/esp32s3.svd, версия 21 (espressif/svd, коммит be20aa1) — базовые адреса периферии, список регистров и полей; лицензия Apache-2.0
- Espressif. ESP-IDF v6.1: заголовки components/soc/esp32s3/register/soc/*_reg.h (коммит fff9895) — имена макросов регистров и полей, сверка положения полей и значений по умолчанию; лицензия Apache-2.0 OR MIT
Нашли ошибку в регистрах?
Другие регистры ESP32-S3
- Все регистры ESP32-S3Блоки периферии и базовые адреса
- GPIO — выводы общего назначения и матрица GPIOGPIO_BT_SELECT_REG, GPIO_OUT_REG, GPIO_OUT_W1TS_REG, GPIO_OUT_W1TC_REG
- IO MUX — мультиплексор функций и электрические настройки выводовPIN_CTRL, IO_MUX_GPIOn_REG
- UART — универсальный асинхронный приёмопередатчикUART_FIFO_REG, UART_INT_RAW_REG, UART_INT_ST_REG, UART_INT_ENA_REG
- I2C — контроллеры шины I2CI2C_SCL_LOW_PERIOD_REG, I2C_CTR_REG, I2C_SR_REG, I2C_TO_REG
- LEDC — контроллер ШИМ для светодиодов и не толькоLEDC_LSCHn_CONF0_REG, LEDC_LSCHn_HPOINT_REG, LEDC_LSCHn_DUTY_REG, LEDC_LSCHn_CONF1_REG
- TIMG — группа таймеров: таймеры общего назначения и сторожTIMG_TnCONFIG_REG, TIMG_TnLO_REG, TIMG_TnHI_REG, TIMG_TnUPDATE_REG
- RMT — контроллер инфракрасного пульта и импульсных протоколовRMT_CHnDATA_REG, RMT_CHnCONF0_REG, RMT_CHnCONF0_REG, RMT_CHnCONF1_REG
- SYSTIMER — системный таймерSYSTIMER_CONF_REG, SYSTIMER_UNITn_OP_REG, SYSTIMER_UNITn_LOAD_HI_REG, SYSTIMER_UNITn_LOAD_LO_REG
- RTC_CNTL — управление питанием, сном и RTC-доменомRTC_CNTL_OPTIONS0_REG, RTC_CNTL_SLP_TIMER0_REG, RTC_CNTL_SLP_TIMER1_REG, RTC_CNTL_TIME_UPDATE_REG
- APB_SARADC — цифровой контроллер АЦПAPB_SARADC_CTRL_REG, APB_SARADC_CTRL2_REG, APB_SARADC_FILTER_CTRL1_REG, APB_SARADC_SAR1_PATT_TABn_REG
- SENS — RTC-контроллеры АЦП, датчиков касания и температурыSENS_SAR_READER1_CTRL_REG, SENS_SAR_MEAS1_CTRL2_REG, SENS_SAR_MEAS1_MUX_REG, SENS_SAR_ATTENn_REG
- USB Serial/JTAG — встроенный USB-переходник на последовательный порт и JTAGUSB_SERIAL_JTAG_EP1_REG, USB_SERIAL_JTAG_EP1_CONF_REG, USB_SERIAL_JTAG_INT_RAW_REG, USB_SERIAL_JTAG_INT_ST_REG
- eFuse — однократно программируемая память настроек и ключейEFUSE_RD_WR_DIS_REG, EFUSE_RD_REPEAT_DATA0_REG, EFUSE_RD_REPEAT_DATA1_REG, EFUSE_RD_REPEAT_DATA2_REG
- INTERRUPT — матрица прерыванийINTERRUPT_CORE0_MAC_INTR_MAP_REG, INTERRUPT_CORE0_MAC_NMI_MAP_REG, INTERRUPT_CORE0_PWR_INTR_MAP_REG, INTERRUPT_CORE0_BB_INT_MAP_REG