Обзор технологии Ultra-Wideband на основе трансивера DW1000 (переходник с SPI на UWB)

В этом тексте я написал о своем опыте работы с UWB. Этот текст поможет понять с какой стороны подходить к UWB трансиверам.

Существует модуль DWM1000 от компании Decawave (Qorvo). Это беспроводной полудуплексный трансивер, работающий на частотах 3.5 GHz to 6.5 GHz, с управляемой мощностью излучения. Он способен передавать данные с битовой скоростью до 6,8Mbit/s

a527add775f860f5aa2af0014edf2ad2.PNG

Это блок схема модуля

585ed643dc1e770896eeeb28c3139aca.png

Попробую разобраться на что способен этот чип.

Что надо из спецификаций?

#

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 и преобразователь питания.

90c1cdace1c76baf264cdc9772aab789.png

Более подробная схема чипа DW1000 такая

1d18fa5019479fdc4faac2d8840f8c95.JPG


Вот соответствие модуля его пинам

DWM1000

DWM1000

А это детализация распиновки модуля DWM1000

cf4cae840c5fcc5d4171cfa584f41c32.png

Внутри 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 плату-переходник

cea0f804d2f3ce9c787d4477a64475ec.PNG

Схема подключения.

99cb139ed6e989a98edc6bba193e740b.png

Схема подключения показана тут.

650d492e50c94851d595987121be82ba.JPG

Физически пришлось собрать вот такой прототип

1aba46d7432a4a35cbf0bd1015872fcd.png


Управление модулем DWM1000 по интерфейсу SPI

Компания разработчик QORVO предоставляет свой драйвер для чипа DW1000. Драйвер можно скачать вот тут https://www.qorvo.com/products/p/DW1000#documents. Достаточно скачать архив dw1000_api_rev2p14.zip распаковать его. В папке dw1000_api_rev2p14_stsw\Src будет лежать С-код драйвера и примеры.

5d38c34ef27c0994042c9fe32ef106b4.png

В оригинальном драйвере 101 функция. Их перечень можно посмотреть тут. Есть и документация на драйвер в доке DW1000 DEVICE DRIVER APPLICATION PROGRAMMING INTERFACE (API) GUIDE. Там указана какая функция за что отвечает.

Чип полностью управляется по интерфейсу SPI. Частота тактирования до 20 MHz. Данные передаются старшим битом вперед. DWM1000 выступает ведомым устройством. Параметры SPI соединения задаются выбором напряжения на пинах GPIO5, GPIO6. По умолчанию они подтянуты к земле. Физически SPI это полный дуплекс. Однако с устройством обмен тем не менее полудуплексный. DWM1000 воспринимает данные, когда на проводе CS 0V. Каждый отрицательный фронт котируется как начало нового кадра. Поэтому просто припаять CS на землю нельзя. Так модуль просто не поймет, где начинается пакет. Аппаратный CS тоже не подойдет. Придется делать программный ChipSelect.

8ade45b421cb1f29cbaf4e9ba5fe56c2.png

При чтении модуль DWM1000 отправляет данные младшим байтом вперед. Поэтому они четко ложатся на структуры в Little endian процессорах. Вот значения регистров DW1000 после корректной инициализации оригинальным драйвером.

+-----+--------------+------+--------+----+----------+
| num |     name     | file | offset |len |   val    |
+-----+--------------+------+--------+----+----------+
|   0 |       DEV_ID | 0x00 | 0x0000 |  4 | 3001CADE | 1101_1110_1100_1010_0000_0001_0011_0000
|   1 |          EUI | 0x01 | 0x0000 |  8 | 00000000FFFFFFFF | ????
|   2 |       PANADR | 0x03 | 0x0000 |  4 | FFFFFFFF | 1111_1111_1111_1111_1111_1111_1111_1111
|   3 |      SYS_CFG | 0x04 | 0x0000 |  4 | 00124000 | 0000_0000_0100_0000_0001_0010_0000_0000
|   4 |     SYS_TIME | 0x06 | 0x0000 |  5 | 00D6C2CE00 | ????
|   5 |     TX_FCTRL | 0x08 | 0x0000 |  5 | 09800A0000 | ????
|   6 |      DX_TIME | 0x0a | 0x0000 |  5 | 0000000000 | ????
|   7 |      RX_FWTO | 0x0c | 0x0000 |  2 |     0000 | 0000_0000_0000_0000
|   8 |     SYS_CTRL | 0x0d | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|   9 |     SYS_MASK | 0x0e | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  10 |   SYS_STATUS | 0x0f | 0x0000 |  5 | 0200800000 | ????
|  11 |     RX_FINFO | 0x10 | 0x0000 |  4 | 0980AA10 | 0001_0000_1010_1010_1000_0000_0000_1001
|  12 |     RX_FQUAL | 0x12 | 0x0000 |  8 | 5C001A451031CF2D | ????
|  13 |     RX_TTCKI | 0x13 | 0x0000 |  4 | 0000FC01 | 0000_0001_1111_1100_0000_0000_0000_0000
|  14 |     RX_TTCKO | 0x14 | 0x0000 |  5 | EDFF07391F | ????
|  15 |      RX_TIME | 0x15 | 0x0000 | 14 | 004566DB052CBB3541008066DB05 | ????
|  16 |      TX_TIME | 0x17 | 0x0000 | 10 | 34A6D7B4590066D7B459 | ????
|  17 |      TX_ANTD | 0x18 | 0x0000 |  2 |     3440 | 0100_0000_0011_0100
|  18 |    SYS_STATE | 0x19 | 0x0000 |  4 | 00050540 | 0100_0000_0000_0101_0000_0101_0000_0000
|  19 |   ACK_RESP_T | 0x1a | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  20 |     RX_SNIFF | 0x1d | 0x0000 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  21 |     TX_POWER | 0x1e | 0x0000 |  4 | 2202080E | 0000_1110_0000_1000_0000_0010_0010_0010
|  22 |    CHAN_CTRL | 0x1f | 0x0000 |  4 | 22007A4A | 0100_1010_0111_1010_0000_0000_0010_0010
|  23 |    AGC_CTRL1 | 0x23 | 0x0002 |  2 |     01DE | 1101_1110_0000_0001
|  24 |    AGC_TUNE1 | 0x23 | 0x0004 |  2 |     9B88 | 1000_1000_1001_1011
|  25 |    AGC_TUNE2 | 0x23 | 0x000c |  4 | 07A90225 | 0010_0101_0000_0010_1010_1001_0000_0111
|  26 |    AGC_TUNE3 | 0x23 | 0x0012 |  2 |     3500 | 0000_0000_0011_0101
|  27 |    AGC_STAT1 | 0x23 | 0x001e |  3 |   000000 | 0000_0000_0000_0000_0000_0000
|  28 |      EC_CTRL | 0x24 | 0x0000 |  4 | 0400ADDE | 1101_1110_1010_1101_0000_0000_0000_0100
|  29 |      EC_RXTC | 0x24 | 0x0004 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  30 |      EC_GOLP | 0x24 | 0x0008 |  4 | 00DEADDE | 1101_1110_1010_1101_1101_1110_0000_0000
|  31 |    GPIO_MODE | 0x26 | 0x0000 |  4 | 000000DE | 1101_1110_0000_0000_0000_0000_0000_0000
|  32 |     GPIO_DIR | 0x26 | 0x0008 |  4 | FF01ADDE | 1101_1110_1010_1101_0000_0001_1111_1111
|  33 |    GPIO_DOUT | 0x26 | 0x000c |  4 | 000000DE | 1101_1110_0000_0000_0000_0000_0000_0000
|  34 |    GPIO_IRQE | 0x26 | 0x0010 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  35 |    GPIO_ISEN | 0x26 | 0x0014 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  36 |   GPIO_IMODE | 0x26 | 0x0018 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  37 |    GPIO_IBES | 0x26 | 0x001c |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  38 |    GPIO_ICLR | 0x26 | 0x0020 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  39 |    GPIO_IDBE | 0x26 | 0x0024 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  40 |     GPIO_RAW | 0x26 | 0x0028 |  4 | 000000DE | 1101_1110_0000_0000_0000_0000_0000_0000
|  41 |   DRX_TUNE0b | 0x27 | 0x0002 |  2 |     1600 | 0000_0000_0001_0110
|  42 |   DRX_TUNE1a | 0x27 | 0x0004 |  2 |     8D00 | 0000_0000_1000_1101
|  43 |   DRX_TUNE1b | 0x27 | 0x0006 |  2 |     6400 | 0000_0000_0110_0100
|  44 |    DRX_TUNE2 | 0x27 | 0x0008 |  4 | 5E013B35 | 0011_0101_0011_1011_0000_0001_0101_1110
|  45 |   DRX_SFDTOC | 0x27 | 0x0020 |  2 |     4110 | 0001_0000_0100_0001
|  46 |   DRX_PRETOC | 0x27 | 0x0024 |  2 |     0000 | 0000_0000_0000_0000
|  47 |   DRX_TUNE4H | 0x27 | 0x0026 |  2 |     2800 | 0000_0000_0010_1000
|  48 |  DRX_CAR_INT | 0x27 | 0x0028 |  3 |   000000 | 0000_0000_0000_0000_0000_0000
|  49 | RXPACC_NOSAT | 0x27 | 0x002c |  2 |     0000 | 0000_0000_0000_0000
|  50 |      RF_CONF | 0x28 | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  51 |   RF_RXCTRLH | 0x28 | 0x000b |  1 |       D8 | 1101_1000
|  52 |    RF_TXCTRL | 0x28 | 0x000c |  3 |   A05C04 | 0000_0100_0101_1100_1010_0000
|  53 |    RF_STATUS | 0x28 | 0x002c |  4 | 09DEADDE | 1101_1110_1010_1101_1101_1110_0000_1001
|  54 |      LDOTUNE | 0x28 | 0x0030 |  5 | 8888888808 | ????
|  55 |      TC_SARC | 0x2a | 0x0000 |  2 |     0000 | 0000_0000_0000_0000
|  56 |      TC_SARL | 0x2a | 0x0003 |  3 |   000000 | 0000_0000_0000_0000_0000_0000
|  57 |      TC_SARW | 0x2a | 0x0006 |  2 |     0000 | 0000_0000_0000_0000
|  58 |   TC_PG_CTRL | 0x2a | 0x0008 |  1 |       BC | 1011_1100
|  59 | TC_PG_STATUS | 0x2a | 0x0009 |  2 |     F90B | 0000_1011_1111_1001
|  60 |   TC_PGDELAY | 0x2a | 0x000b |  1 |       C5 | 1100_0101
|  61 |    TC_PGTEST | 0x2a | 0x000c |  1 |       00 | 0000_0000
|  62 |    FS_PLLCFG | 0x2b | 0x0007 |  4 | 08054008 | 0000_1000_0100_0000_0000_0101_0000_1000
|  63 |   FS_PLLTUNE | 0x2b | 0x000b |  1 |       26 | 0010_0110
|  64 |     FS_XTALT | 0x2b | 0x000e |  1 |       72 | 0111_0010
|  65 |     AON_WCFG | 0x2c | 0x0000 |  2 |     2000 | 0000_0000_0010_0000
|  66 |     AON_CTRL | 0x2c | 0x0002 |  1 |       00 | 0000_0000
|  67 |     AON_RDAT | 0x2c | 0x0003 |  1 |       00 | 0000_0000
|  68 |     AON_ADDR | 0x2c | 0x0004 |  1 |       00 | 0000_0000
|  69 |     AON_CFG0 | 0x2c | 0x0006 |  4 | EE1FFF50 | 0101_0000_1111_1111_0001_1111_1110_1110
|  70 |     AON_CFG1 | 0x2c | 0x000a |  2 |     0000 | 0000_0000_0000_0000
|  71 |     OTP_WDAT | 0x2d | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  72 |     OTP_ADDR | 0x2d | 0x0004 |  2 |     1E00 | 0000_0000_0001_1110
|  73 |     OTP_CTRL | 0x2d | 0x0006 |  2 |     0000 | 0000_0000_0000_0000
|  74 |     OTP_STAT | 0x2d | 0x0008 |  2 |     0000 | 0000_0000_0000_0000
|  75 |     OTP_RDAT | 0x2d | 0x000a |  4 | 12010000 | 0000_0000_0000_0000_0000_0001_0001_0010
|  76 |    OTP_SRDAT | 0x2d | 0x000e |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  77 |       OTP_SF | 0x2d | 0x0012 |  1 |       00 | 0000_0000
|  78 |   LDE_THRESH | 0x2e | 0x0000 |  2 |     0000 | 0000_0000_0000_0000
|  79 |     LDE_CFG1 | 0x2e | 0x0806 |  1 |       00 | 0000_0000
|  80 |   LDE_PPINDX | 0x2e | 0x1000 |  2 |     0000 | 0000_0000_0000_0000
|  81 |   LDE_PPAMPL | 0x2e | 0x1002 |  2 |     0000 | 0000_0000_0000_0000
|  82 |   LDE_RXANTD | 0x2e | 0x1804 |  2 |     0000 | 0000_0000_0000_0000
|  83 |     LDE_CFG2 | 0x2e | 0x1806 |  2 |     0000 | 0000_0000_0000_0000
|  84 |     LDE_REPC | 0x2e | 0x2804 |  2 |     0000 | 0000_0000_0000_0000
|  85 |     EVC_CTRL | 0x2f | 0x0000 |  4 | 00DEADDE | 1101_1110_1010_1101_1101_1110_0000_0000
|  86 |      EVC_PHE | 0x2f | 0x0004 |  2 |     0000 | 0000_0000_0000_0000
|  87 |      EVC_RSE | 0x2f | 0x0006 |  2 |     0000 | 0000_0000_0000_0000
|  88 |      EVC_FCG | 0x2f | 0x0008 |  2 |     0000 | 0000_0000_0000_0000
|  89 |      EVC_FCE | 0x2f | 0x000a |  2 |     0000 | 0000_0000_0000_0000
|  90 |      EVC_FFR | 0x2f | 0x000c |  2 |     0000 | 0000_0000_0000_0000
|  91 |      EVC_OVR | 0x2f | 0x000e |  2 |     0000 | 0000_0000_0000_0000
|  92 |      EVC_STO | 0x2f | 0x0010 |  2 |     0000 | 0000_0000_0000_0000
|  93 |      EVC_PTO | 0x2f | 0x0012 |  2 |     0000 | 0000_0000_0000_0000
|  94 |     EVC_FWTO | 0x2f | 0x0014 |  2 |     0000 | 0000_0000_0000_0000
|  95 |     EVC_TXFS | 0x2f | 0x0016 |  2 |     0000 | 0000_0000_0000_0000
|  96 |      EVC_HPW | 0x2f | 0x0018 |  2 |     0000 | 0000_0000_0000_0000
|  97 |      EVC_TPW | 0x2f | 0x001a |  2 |     0000 | 0000_0000_0000_0000
|  98 |     DIAG_TMC | 0x2f | 0x0024 |  2 |     0000 | 0000_0000_0000_0000
|  99 |   PMSC_CTRL0 | 0x36 | 0x0000 |  4 | 000230F0 | 1111_0000_0011_0000_0000_0010_0000_0000
| 100 |   PMSC_CTRL1 | 0x36 | 0x0004 |  4 | 38070281 | 1000_0001_0000_0010_0000_0111_0011_1000
| 101 |   PMSC_SNOZT | 0x36 | 0x000c |  1 |       40 | 0100_0000
| 102 |  PMSC_TXFSEQ | 0x36 | 0x0026 |  2 |     740B | 0000_1011_0111_0100
| 103 |    PMSC_LEDC | 0x36 | 0x0028 |  4 | 200000DE | 1101_1110_0000_0000_0000_0000_0010_0000
+-----+--------------+------+--------+----+----------+

трансивер может быть в следующих со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. Номер канала передатчика и номер канала приемника всегда должны совпадать в каждом отдельном трансивере.

6394bcc185b172341d560206102163af.png

Вот дерево зависимости параметров

Дерево зависимости конфигурации DWM1000

Дерево зависимости конфигурации DWM1000

Какие параметры влияют на дальность радиосвязи?

Битовая скорость и длина преамбулы влияют на дальность. Более длинная преамбула обеспечивает улучшенную дальность действия. При высокой битовой скорости передачи данных рабочий диапазон короткий. При низкой битовой скорости можно передавать данные на большие расстояния.

Формат радио пакета

Радио пакет состоит из преамбулы, разделителя начала кадра, заголовка, полезной нагрузки

4a84ae442c115212e82c2b396a1a6db8.png

В модуле DW1000 имеется аппаратный 40-битный таймер. Он может считать от 0 до 2^40=1 099 511 627 776. Этот таймер тактируется частотой 64 GHz. Это значит, что он переполняется каждые 17.17 с. Этот таймер увеличивается на 1 каждые 15.625ps. Свет за это время успевает пройти 0.004 м или 4 мм.

Между полями SFD и PHR чип вставляет метку времени. Эту метку времени можно прочитать из регистра 0×15.

Передача данных

069af18a46a046f879660cbe5981b09a.png

Прием данных

c81f2091efab7183577ec97d010a32ed.png

Так как UWB это технология для мобильной техники, то отлаживаться приходилось подключаясь к смартфону по Serial Over USB при помощи культового Android приложения Serial USB Terminal.

8a52fe62f4b003194e5604ea22892aa5.png

Вот так выглядел комплект для отладки

62fca68686209f842b8add9866b3f085.PNG

Калибровка чипа 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 метров.

dcddf277785340be2fef8830469e4e6d.png

Идеи проектов на UWB трансиверах

  1. UWB chat. Обмен мгновенными текстовыми сообщениями.

  2. Обновление прошивки по радио

  3. Передача файлов по радио

  4. InDoor навигация

  5. Удаленное управление электронными приборами в помещении

Словарь

Для работы с 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

Документация про модуль

Покупка модуля

Покупка переходника

Документация про чип DW1000:

© Habrahabr.ru