В этом тексте я написал о своем опыте работы с UWB. Этот текст поможет понять с какой стороны подходить к UWB трансиверам.ПредисловиеUltra-Wideband UWB это маломощная (<1mW) беспроводная радио технология передачи данных со скоростью до ...6 Mbit/s на расстояния до 200м. Эта технология также позволяет измерять расстояние между трансиверами с точностью до +-10см. UWB работает на частотах 3.1Ghz 10.6Ghz. В технологии UWB очень широкая ширина канала 500MHz...1,3GHz. Это больше чем у LoRa в минимум в 1000 раз. UWB использует так называемое pulse radio. Трансивер посылаются пульсы (вейвлеты) порядка 1 миллиарда раз в секунду. UWB передает данные в специальные временные интервалы. Модуляция называется pulse-position или time modulation. В качестве аналогии можно сравнить с летучими мышами.На самом деле UWB работает именно так, как самый первый искусственный генератор электромагнитных волн, который сконструировал ещё Генрих Герц в 1886 году. По сути UWB - искровой разряд.  Практическая часть Существует модуль DWM1000 от компании Decawave (Qorvo). Это беспроводной полудуплексный трансивер, работающий на частотах 3.5 GHz to 6.5 GHz, с управляемой мощностью излучения. Он способен передавать данные с битовой скоростью до 6,8Mbit/s   Это блок схема модуля Попробую разобраться на что способен этот чип.  Что надо из спецификаций?  # Doc name pages что там? Версия 1 Product Overview 33 Характеристики модуля, блок схема SoC, распиновка  2 PRODUCT INFORMATION: DWM1000 2 Флайер на модуль DWM1000  5 DW1000 USER MANUAL 249 Детализация регистров  11 SOURCES OF ERROR IN DW1000 BASED TWO-WAY RANGING (TWR) SCHEMES 22 APS011 APPLICATION NOTE 1.1 9 DEBUGGING DW1000 BASED PRODUCTS AND SYSTEMS 23 APS022 APPLICATION NOTE 1.3 10 DW1000 DEVICE DRIVER APPLICATION PROGRAMMING INTERFACE (API) GUIDE 101 USING API FUNCTIONS TO CONFIGURE AND PROGRAM THE DW1000 UWB TRANSCEIVER 2.7 7 APS013 APPLICATION NOTE 15 The implementation of two-way ranging with the DW1000 2.3 8 ANTENNA DELAY CALIBRATION OF DW1000-BASED PRODUCTS AND SYSTEMS 15 APS014 APPLICATION NOTE 1.2 3 PRODUCT BRIEF: DW1000 2 Флайер на чип DW1000. Название пинов.  4 Product Overview 53 Распиновка DW1000  6 DW1000 Errata 12 Список 5ти выявленных ошибок в дизайне чипа   в первом приближении внутри DW1000 можно обнаружить PLL, модуль приема, модуль передатчика, цифровую логику, SPI slave и преобразователь питания. Более подробная схема чипа DW1000 такая. Тут уже заметно OTP, помехоустойчивое кодирование, управление мощностью, выявление прихода пакета, внутренний таймер. Чип весьма и весьма проработанный. Вот соответствие модуля его пинам.  А это детализация распиновки модуля DWM1000. Шаг между пинами 1,4мм. Внутри DWM1000 заложен ASIC с названием DW1000. Вот список его пинов. https://docs.google.com/spreadsheets/d/1ei8rA8kbT_--4zf_2shUHI-hzM8QjJMSJs_8kKTTMak/edit#gid=0 Явного соответствия 48ми пинов чипа DW1000 на 24 пина модуля DWM1000 нет. Как известно из комбинаторики упорядоченно выбрать провода 24 из 48 проводов без повторений можно 2.000797e+37 способами. Визуально тоже не ясно, так как чип скрыт под саркофагом. Чтобы подключить модуль DWM1000 пришлось изготовить PCB плату-переходник Схема подключения. Схема подключения показана тут. Физически пришлось собрать вот такой прототип Управление модулем DWM1000 по интерфейсу SPI Компания разработчик QORVO предоставляет свой драйвер для чипа DW1000. Драйвер можно скачать вот тут https://www.qorvo.com/products/p/DW1000#documents. Достаточно скачать архив dw1000_api_rev2p14.zip распаковать его. В папке dw1000_api_rev2p14_stsw\Src будет лежать С-код драйвера и примеры. В оригинальном драйвере 101 функция. Их перечень можно посмотреть тут. Есть и документация на драйвер в доке DW1000 DEVICE DRIVER APPLICATION PROGRAMMING INTERFACE (API) GUIDE. Там указана какая функция за что отвечает. Чип полностью управляется по интерфейсу SPI. Частота тактирования до 20 MHz. Данные передаются старшим битом вперед. DWM1000 выступает ведомым устройством. Параметры SPI соединения задаются выбором напряжения на пинах GPIO5, GPIO6. По умолчанию они подтянуты к земле. Физически SPI это полный дуплекс. Однако с устройством обмен тем не менее полудуплексный. DWM1000  воспринимает данные, когда на проводе CS 0V. Каждый отрицательный фронт котируется как начало нового кадра. Поэтому просто припаять CS на землю нельзя. Так модуль просто не поймет, где начинается пакет. Аппаратный CS тоже не подойдет. Придется делать программный ChipSelect.  При чтении модуль DWM1000 отправляет данные младшим байтом вперед. Поэтому они четко ложатся на структуры в Little endian процессорах. Вот значения регистров DW1000  после корректной инициализации оригинальным драйвером. трансивер может быть в следующих соcтояниях № State Description 1 OFF чип без питания 10 WAKEUP Кварц включен. LDO включен. 2 PowerUp -- 8 DEEPSLEEP SPI передача невозможна 3 INIT Кварц работает. SPI может работать только на 3MHz 4 IDLE PLL включен.  SPI может работать на полной скорости 20MHz 6 TX Трансивер передает пакет. После перейдет в IDLE. 7 RX PREAMBLE SNIFF Трансивер периодически переключается между IDLE и RX 5 RX Трансивер ищет преамбулу 8 SLEEP SPI передача невозможна. Потребление меньше 1uA. LDO выключены. 9 SNOOZE -- Собственные SPI регистры чипа DW1000 Регистровые файлы адресуются 6 битами. Это значит, что можно адресовать 64 регистровых файлов. В сумме у него 110 регистров https://docs.google.com/spreadsheets/d/1-cDqzBLOIxD7zWVG7oPmD_uq-V_fILkTvu4ADGFD_5E/edit#gid=0 Какие настройки следует назначить в чипе DWM1000? Параметр Units тип параметра TxPower dBm главный Preamble Length Symbols производный Канал приема num производный preamble code ? производный канал  главный Канал передачи num производный bandwidth Hz производный centre frequency Hz производный BitRate Bit/s главный Transmit Pulse Repetition Frequency Hz главный Номер канала полностью определяет центральную частоту, ширину канала и  preamble code. Номер канала передатчика и номер канала приемника всегда должны совпадать в каждом отдельном трансивере. Вот дерево зависимости параметров Какие параметры влияют на дальность радиосвязи? Битовая скорость и длина преамбулы влияют на дальность. Более длинная преамбула обеспечивает улучшенную дальность действия. При высокой битовой скорости передачи данных рабочий диапазон короткий. При низкой битовой скорости можно передавать данные на большие расстояния. Формат радио пакета Радио пакет состоит из преамбулы, разделителя начала кадра, заголовка, полезной нагрузки В модуле DW1000 имеется аппаратный 40-битный таймер. Он может считать от 0 до 2^40=1 099 511 627 776. Этот таймер тактируется частотой 64 GHz. Это значит, что он переполняется каждые 17.17 с.  Этот таймер увеличивается на 1 каждые 15.625ps. Свет за это время успевает пройти 0.004м или 4мм. Между полями SFD и PHR чип вставляет метку времени. Эту метку времени можно прочитать из регистра 0x15. Передача данных Прием данных  Так как UWB это технология для мобильной техники, то отлаживаться приходилось подключаясь к смартфону по Serial Over USB при помощи культового Android приложения Serial USB Terminal. Вот так выглядел комплект для отладки Калибровка чипа DW1000Если вычитывать значения TimeStamp(ов) из регистров сразу после инициализации то значения будут не валидные. Вы получите 120...160 метров между трансиверами, когда как расcтония всего полтора метра. Это обусловлено плаванием параметров при изготовлении кремниевых пластин. Калибровочные параметры записываются в OTP память. Микроконтроллер может вычитывать данные из OTP и прописывать их в регистры DW1000. Для калибровки задержки антенны надо взять два DW1000, установить их на известное расстояние и измерить дальность. Задержка антенны настраивается до тех пор пока реальная дальность и прочитанная дальность не начнут совпадать. Затем значение задержки антенны следует прописать в OTP память. Есть задержка при отправке и задержка при приеме.    Запаздывание отправки это время между внутренней цифровой отметкой времени и временем реальной отправки в антенну. Запаздывание приема используется для компенсации времени между приемом сигнала RMARKER в антенне и внутренней временной отметке в цифровой цепи. Во многих исполнениях PCB запаздывания приема и отправки равны. Тестирование дальности радио Link(а) В помещении я разносил два DW1000 трансивера на 24 шага (16,5м) и UWB пакеты стабильно приходили в обе стороны. Дальше мешала геометрия помещения.  На улице мне удавалось принимать ping на расстояние 76 метров. Тестирование измерения дальности по технологии SS-TWR/DS-TWR Тестирование технологии измерения дальности без калибровки показывают, что при расстоянии между трансиверами всего 0,89м измерения показывают величины порядка 154,6 метров. Причем разброс был 0,9 метров.  При этом UWB радио пакет стабильно проходит сквозь бетонную стену жилого дома. Подробности про механизм измерения дальности тут https://habr.com/ru/articles/723822/ Идеи проектов на UWB трансиверах UWB chat. Обмен мгновенными текстовыми сообщениями. Обновление прошивки по радио Передача файлов по радио InDoor навигация Удаленное управление электронными приборами в помещении Словарь Для работы с DWM1000 надо разбираться в следующих акронимах Акроним Расшифровка AON Always-On POR Power On Reset API Application Programming Interface ETSI European Telecommunications Standards Institute N.B. (NB) Nota bene (note well  ) PAC preamble acquisition chunk SFD start of frame delimiter DW DecaWave XTI internal 19.2 MHz clock (is the raw 38.4 MHz XTAL oscillator input ÷ 2) PRF pulse repetition frequency BPM bi-phase modulation ISO International Organization for Standardization BPSK binary phase shift keying MSB most significant bit FCS Frame Checking Sequence TWR Two Way Ranging LO local oscillator IEEE Institute of Electrical and Electronic Engineers PLL Phase Locked Loop CS chip select. CMOS Complementary metal–oxide–semiconductor QFN quad-flat no-leads LSB Least Significant Bit LDE leading edge (or the process to find and adjust the RX message timestamp) LED light-emitting diode PHR   PHY header PHY physical layer SPI Serial Peripheral Interface GPIO General Purpose Input Output OTP One-Time Programmable RTLS real time location systems WSNs wireless sensor networks RST Reset TOF time of flight IC Integrated circuit FCC Federal Communications Commission TDOA Time Difference of Arrival MAC Media Access Control CRC cyclic redundancy check UWB Ultra Wideband TWR two way ranging TX transmit RF radio frequency PSD power spectral density EIRP Effective Isotropic Radiated Power PCB printed circuit board FEC Forward error correction Вывод Сам по себе DW1000 очень сырой. Чтобы просто настроить канал надо прописать магические числа в дюжину регистров. При этом часть регистров адресуются 2мя байтами, а часть 3мя байтами. Хотя регистров всего, 110 штучек. Сами регистры рваные, разных размеров.  Для записи OTP параметров надо напряжение чуть выше привычных 3,3V на VCC (3.8V).  RxTimeStamp надо включать отдельно. Нужна калибровка запаздывания антенн. Регистров много. Для чипа dw1000 нужен сравнительно сложный драйвер. Нет смысла писать для него свой драйвер. Лучше взять драйвер от вендора.  Данные удалось передавать в обе стороны на расстояния до 78 метров. Определять Tx TimeStamp(ы). На первый взгляд дальность определяется с точностью +- 45см. В общем чип dw1000 сложный. Еще модуль можно задействовать как расширитель GPIO. С SPI на 8 pin(ов).  Как по мне, дак UWB отличный интерфейс, чтобы обновлять прошивку или для дистанционного упрарления, но чтобы измерять дальность надо строить калибровочный стенд метров 10 в габаритах. Links MIKROE UWB Click https://www.sparkfun.com/products/18782https://github.com/MikroElektronika/mikrosdk_click_v2/tree/master/clicks/uwb https://habr.com/ru/articles/726228/ Документация про модуль Покупка модуля Покупка переходника Документация про чип DW1000: https://www.qorvo.com/products/p/DW1000 https://how2electronics.com/getting-started-with-esp32-dw1000-uwb-ultra-wideband-module/ Контрольные вопросы: 1--Как определить что передатчик в самом деле передает что-то? 2--Нет радио Link(а) (например в UWB). Как выявить в чем дело? Передатчик не передает или приемник не принимает? 3--Если ширина спектра широкая, то что можно сказать про форму сигнала во временной области? 4--Если увеличить длину преамбулы, то как это скажется на дальности радио связи?  Embedded SW/Firmware Engineer