Универсальный связной контроллер на базе ESP32-PICO-D4
Подключение радиочастотных и LoRa-модулей по шине SPI

№ 1’2019
PDF версия
В статье речь пойдет о конструировании универсального связного контроллера на SIP-модуле ESP32-PICO-D4, в частности о подключении радиочастотных и LoRa-модулей по шине SPI.
 Модуль RFM300W

Рис. 1. Модуль RFM300W

В настоящее время радиочастотные модули находят широкое применение в устройствах, где необходима передача данных по радиоканалу в разрешенных для гражданского применения диапазонах частот 433 и 868 МГц. Это беспроводные датчики для охранных систем, дистанционное управление различными механизмами, устройства телеметрии и т. д.

Компания Hoperf выпускает однокристальный трансивер CMT2300AW, способный работать в диапазоне частот 127–1020 МГц, а также готовые модули размером 16×16×1,9 мм на основе этого чипа — RFM300W (рис. 1). Примерно за $2 мы получаем готовый трансивер, который подключается по интерфейсу SPI, имеет выходную мощность 25 мВт на частоте 868 МГц, поддерживает такие типы модуляции, как OOK, FSK, MSK,GFSK, GMSK, и позволяет передавать данные со скоростью до 200 кбит/с.

Компания Hoperf создала и предоставляет проектировщикам готовую библиотеку для работы трансивера, а также графическую утилиту RFPDK для удобной настройки всех его параметров, которая выдает текстовый файл с настройками внутренних регистров трансивера, легко встраиваемый в программный код. Более подробно трансивер CMT2300AW и предоставляемое с ним программное обеспечение были рассмотрены в [1].

Сегодня активно развиваются и сети с использованием технологии LoRa, которая позволяет построить собственные корпоративные сети в разрешенных безлицензионных диапазонах частот и обеспечить надежную связь между устройствами на расстоянии до 15 км при сверхмалом энергопотреблении. Применение данной технологии предоставляет возможность устройствам с батарейным питанием функционировать автономно несколько лет. Технология LoRa уже получила широкое распространение в областях, где необходимо в режиме реального времени управлять различными устройствами, получать данные от датчиков, передавать небольшие объемы информации. LoRa-сети уже управляют уличным освещением, светофорами, следят за состоянием коммунальных водопровод­ных и канализационных сетей, высоковольтных линий электропередачи и т. д.

 LoRa-модуль RFM95W

Рис. 2. LoRa-модуль RFM95W

Также компания Hoperf выпускает модуль RFM95W (рис. 2), функционирующий в диапазоне 868 МГц. Программно он полностью совместим с чипсетом SX1276 компании SEMTECH [2]. Модуль RFM95W имеет размеры 16×16×1,8 мм и тоже управляется по интерфейсу SPI.

Рассмотрим подключение данных модулей к модулю ESP32-PICO-D4 по шине SPI.

В своем составе модуль ESP32-PICO-D4 имеет четыре SPI-шины: SPI0, SPI1, HSPI и VSPI. Для работы с внутренней памятью применяется SPI0, а в ESP-IDF на данный момент пользователю доступны две SPI-шины — HSPI и VSPI, имеющие следующие технические характеристики:

  • поддержка режимов master, slave, multi-master и multi-slave;
  • поддержка полнодуплексного (full-duplex) и полудуплексного (half-duplex) режимов работы;
  • поддержка режима QSPI;
  • тактовая частота на выходе CLK до 80 МГц;
  • четыре режима работы SPI MODE 0–3;
  • поддержка 4-проводной версии SPI (4-wire, линии MOSI, MISO, CLK, CS);
  • поддержка 3-проводной версии SPI (3-wire), линия MOSI используется для передачи и приема данных;
  • до трех ведомых устройств CS0, CS1 и CS2 на каждой шине при работе в режиме master;
  • поддержка до 64 байт FIFO;
  • наличие встроенного DMA-контроллера.

Большинство встроенной периферии в ESP32 может напрямую подключаться к определенному GPIO, который называется IOMUX. Также существует возможность перенаправления периферийного сигнала на любой другой вывод GPIO, отличный от его вывода в IOMUX, при этом не стоит забывать, что выводы GPIO 34–39 могут работать только как входы. Номера выводов GPIO для IOMUX представлены в таблице.

Таблица. IOMUX-выводы для SPI-контроллеров HSPI и VSPI

Название линии

HSPI

VSPI

Номер GPIO

CS0

15

5

SCLK

14

18

MISO

12

19

MOSI

13

23

QUADWP

2

22

QUADHD

4

21

При использовании IOMUX-выводов частота работы SPI-контроллеров может достигать 80 МГц. Если применяются другие GPIO, отличные от IOMUX, частота работы SPI-контроллеров не превышает 40 МГц.

Более подробную информацию о шине SPI модуля ESP32-PICO-D4, в том числе и описание внутренних регистров, можно найти в [3, 4].

Для работы в режиме master необходимо подключить библиотеку driver/spi_master.h, а в режиме slave — driver/spi_slave.h. Эти библиотеки входят в состав ESP-IDF.

Начинать работу с шиной SPI нужно с установки в структуре bus_config выводов MOSI, MISO, CLK и других параметров. Если поле не используется, следует установить ему значение, равное –1. Инициализация шины SPI происходит после вызова функции spi_bus_initialize ().

Далее требуется установить параметры подключаемого slave-устройства в структуре spi_device_interface_config_t и создать spi_device_handle_t (дескриптор) подключаемого устройства. Чтобы подключить slave-устройство, надо вызвать функцию spi_bus_add_device (). Пример кода инициализации представлен в листинге 1.

Листинг 1

 #define SPI_MODE 0
#define SPI_CLOCK 4000000 // 4 MHz

#define host HSPI_HOST

#define PIN_NUM_MISO 34

#define PIN_NUM_MOSI 2

#define PIN_NUM_CLK 15

#define PIN_NUM_CS 5

…..

spi_bus_config_t buscfg={

.miso_io_num=PIN_NUM_MISO, // номер вывода MISO или -1 при 3-wire

.mosi_io_num=PIN_NUM_MOSI, // номер вывода MOSI

.sclk_io_num=PIN_NUM_CLK, // номер вывода CLK

.quadwp_io_num=-1, // номер вывода QUADWP

.quadhd_io_num=-1, // номер вывода QUADHD

.max_transfer_sz=0 // максимальный размер данных, 0 — 4096 байт

};

spi_bus_initialize(host, &buscfg, 1);

spi_device_handle_t spi;

spi_device_interface_config_t devcfg={

.command_bits = 0, //0-16

.address_bits = 0, //0-64

.dummy_bits = 0, //пауза между address phase и data phase

.mode = SPI_MODE,

.duty_cycle_pos = 128, //1-256, длительность положительного периода

//сигнала CLK

.cs_ena_pretrans = 0, // 0 not used

.cs_ena_posttrans = 0, // 0 not used

.clock_speed_hz = SPI_CLOCK,

.spics_io_num = PIN_NUM_CS,

.flags = 0, //или (SPI_DEVICE_3WIRE | SPI_DEVICE_HALFDUPLEX)

                  //для случая, когда MISO и MOSI на одном

                  //выводе MOSI

.queue_size = 1, //размер очереди транзакций

.pre_cb = NULL, //вызов CALLBACK перед транзакцией

.post_cb = NULL; // вызов CALLBACK после транзакции

spi_bus_add_device(host, &devcfg, &spi);

У модуля RFM300 прием и передача данных осуществляются по одному выводу SDIO [5]. Для подсоединения данного модуля к SPI-шине модуля ESP32-PICO-D4 необходимо включить прием и передачу данных по выводу MOSI. Для этого нужно произвести следующие настройки: выводу MISO присваиваем значение –1, а в структуре spi_device_interface_config_t в поле .flags устанавливаем два флага — SPI_DEVICE_3WIRE | SPI_DEVICE_HALFDUPLEX. С такими настройками можно подключать любое устройство, управляемое по 3-wire SPI.

На рис. 3 показана временная диаграмма процесса обмена данными по шине SPI в модуле ESP32-PICO-D4.

Рис. 3. Временная диаграмма процесса обмена данными

Процесс обмена данными состоит из нескольких фаз: Command phase, Address phase, Dummy phase, RX и TX phase. В течение Command phase и Address phase данные только передаются в шину, ничего не считывая взамен. Для выполнения транзакции надо заполнить одну или несколько структур spi_transaction_t, d и отправить их с использованием прерываний (interrupt transactions) или методом последовательной передачи (polling transactions).

С применением polling trans-actions транзакция происходит с помощью функций spi_device_polling_transmit () илиspi_device_polling_start () иspi_device_polling_end ().

В листинге 2 представлен фрагмент программы для отправки и приема данных c помощью функции spi_device_polling_transmit ().

Листинг 2

esp_err_t SPI_write_Byte(spi_device_handle_t handle, size_t length, uint8_t *data)
{

spi_transaction_t t = {

.flags = 0, //флаги

.cmd = 0, //команда, 0 если нет

.addr = 0, //адрес, 0 если нет

.length = length * 8, //длина передаваемых данных cmd+addr+tx, bit

.rxlength = 0, //длина принимаемых данных, bit

.user = 0, //Можно использовать для сохранения ID-транзакции

.tx_buffer = *data, //указатель на передаваемые данные, NULL если нет

.rx_buffer = NULL, //указатель на передаваемые данные, NULL если нет

};

esp_err_t err = spi_device_polling_transmit(handle, &t);

return err;

}

esp_err_t SPI_read_Byte(spi_device_handle_t handle, size_t length, uint8_t *data)

{

if(length == 0) return ESP_ERR_INVALID_SIZE;

spi_transaction_t t = {

.flags = 0,

.cmd = 0,

.addr = 0,

.length = 0,

.rxlength = length * 8,

.user = 0,                

.tx_buffer = NULL,

.rx_buffer = data,

};

esp_err_t err = spi_device_polling_transmit(handle, &t);

return err;

} 

При interrupt transactions передача данных может происходить синхронно через функцию spi_device_transmit () или поочередно с помощью функций постановки в очередь spi_device_queue_tran () и проверки результата spi_device_get_trans_result ().

Если размер передаваемых данных 32 бит или менее, то они могут быть сохранены в самой структуре транзакции spi_transaction_t и нет необходимости выделять под них отдельный буфер. Для передачи данных следует использовать .tx_data [4] и установить флаг .flags = SPI_USE_TXDATA, а для получения — .rx_data [4] и установить .flags = SPI_USE_RXDATA. При этом tx_buffer и rx_buffer не стоит применять, поскольку они ссылаются на те же области памяти, что и tx_data и rx_data.

Более подробную информацию о работе с шиной SPI в модулях на основе ESP32 можно найти в документации на ESP-IDF в разделе API Reference [6].

Литература
  1. Гаевский С. Новый интегрированный трансивер CMT2300AW — универсальное решение для передачи данных на короткие дистанции // CHIP NEWS Украина. 2018. № 3.
  2. Хаузер Ш., Колпаков А. 100% SiC или гибрид? // CHIP NEWS Украина. 2017. № 2.
  3. espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf
  4. espressif.com/sites/default/files/documentation/esp32_datasheet_en.pdf
  5. hoperf.com/data/upload/portal/20190307/CMT2300A%20Datasheet.pdf
  6. www.docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/spi_master.html

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

سكس عربي مصري مجاني sexauskunft.net سكسحر unblurred hentai nicehentai.com omega hentai chinki sex renklipornoo.net village naked dance hot x porn video hindipornsite.com heather jayne nude huge dick comics streamhentai.net hentai msngs
قصص وصور سكس wiwiuku.com مشاهدة أفلام سكس ラブホテル完全盗撮 浮気ドキュメント 禁断の関係 javshare.info とらぶるだいありー brawling go 132 hentaika.org all the way through futa www.indiansexmms pornhindivideo.com ftv hot live 福岡 風俗 図鑑 javwhores.mobi 日本で一番黒いgカップグラドルの絶倫性欲でハメ撮りsexしまくった日常を記録
x videos american fucktube24.com sex odia video 完全拘束イラマチオ 3 あべみかこ javpussy.net 300maan-316 xnxx miya khalifa indianpornsearch.com www.tamil sex videos どエロイ女のムチムチ肉感!ふにゃふにゃ星人 羽生ありさ freejavstreaming.net 生意気j○妹プリ尻挑発 telugu outdoor sex hindipornmovies.org mehreen kaur pirzada