DW3000 User Manual
DW3000 User Manual
Table of Contents
List of Figures
FIGURE 1: SPI TRANSACTION HEADER AND TRANSACTION DATA 12 FIGURE 20: ESTIMATED RX LEVEL VERSUS ACTUAL RX LEVEL .... 49
FIGURE 2: SPI COMMAND FORMATTING............................... 13 FIGURE 21: GENERAL MAC MESSAGE FORMAT ..................... 51
FIGURE 3: SINGLE OCTET FAST COMMAND (START TX) SPI FIGURE 22: AES ENGINE SOURCE/DESTINATION BUFFERS......... 57
TRANSACTION ......................................................... 14 FIGURE 23: STS STRUCTURE .............................................. 62
FIGURE 4: READING FIRST OCTET FROM DEV_ID REGISTER OF THE FIGURE 24: AES IN COUNTER MODE BASED CPRNG............... 64
IC ........................................................................ 14 FIGURE 25: DW3000 EXTERNAL SYNCHRONISATION INTERFACE
FIGURE 5: WRITING TWO OCTETS TO REGISTER 0X2 SUBADDRESS ............................................................................ 66
0X1C.................................................................... 15 FIGURE 26: TYPICAL TX POWER VARIATION WITH COARSE AND
FIGURE 6: SPI CRC POLYNOMIAL IMPLEMENTATION............... 16 FINE GAIN ............................................................ 109
FIGURE 7: DW3000 STATE DIAGRAM ................................. 18 FIGURE 27: FLOW CHART FOR DIRECT READ OF AON ADDRESS 169
FIGURE 8: TIMING DIAGRAM FOR COLD START POR................ 22 FIGURE 28: FLOW CHART FOR DIRECT WRITE OF AON ADDRESS
FIGURE 9: TIMING DIAGRAM FOR WARM START (@ VDD = 3V) 23 .......................................................................... 171
FIGURE 10: BPM/BPSK DATA AND PHR MODULATION ......... 29 FIGURE 29: TRANSMIT AND RECEIVE ANTENNA DELAY .......... 245
FIGURE 11: PHR BIT ASSIGNMENT ...................................... 31 FIGURE 30: SINGLE-SIDED TWO-WAY RANGING.................... 248
FIGURE 12: PHR BIT ASSIGNMENT EXTENDED LENGTH FRAMES . 32 FIGURE 31: DOUBLE-SIDED TWO-WAY RANGING WITH FOUR
FIGURE 13: PACKET FORMATS ............................................ 33 MESSAGES............................................................ 249
FIGURE 14: BASIC TRANSMIT SEQUENCE............................... 34 FIGURE 32: DOUBLE-SIDED TWO-WAY RANGING WITH THREE
FIGURE 14: PHR ENCODING EXTENDED LENGTH FRAMES ......... 36 MESSAGES............................................................ 249
FIGURE 15: RECEIVE SEQUENCE .......................................... 38 FIGURE 33: RANGING TO 3 ANCHORS WITH JUST 5 MESSAGES
FIGURE 16: FLOW CHART FOR USING DOUBLE RX BUFFERING ... 44 WHERE EACH ANCHOR CALCULATES ITS OWN RANGE RESULT
FIGURE 17: STATE TRANSITIONS DURING SNIFF MODE ........... 45 .......................................................................... 250
FIGURE 18 POWER PROFILE FOR SNIFF WHERE A PACKET IS NOT
RECEIVED ............................................................... 46
FIGURE 19 POWER PROFILE FOR SNIFF WHERE A PACKET IS
RECEIVED ............................................................... 46
List of Tables
TABLE 1: DW3000 VARIANTS ............................................. 7 TABLE 32: SUB-REGISTER 0X08:18 – PG TEST VALUES ......... 161
TABLE 2: BRIEF DESCRIPTION OF DOCUMENT SECTIONS ............. 8 TABLE 33: REGISTER FILE: 0X09 – FREQUENCY SYNTHESISER
TABLE 3: SPI TRANSACTION TYPES....................................... 12 CONTROL BLOCK OVERVIEW ..................................... 162
TABLE 4: MAIN DW3000 OPERATIONAL STATES / MODES ...... 19 TABLE 34: REFERENCE VALUES SUB-REGISTER 0X09:00 – PLL
TABLE 5: CONFIGURATIONS MAINTAINED IN THE AON MEMORY CONFIGURATION ................................................... 163
ARRAY ................................................................... 25 TABLE 35: REGISTER FILE: 0X0A – ALWAYS-ON SYSTEM CONTROL
TABLE 6: DEFAULT DW3000 OPERATIONAL CONFIGURATION .. 26 OVERVIEW............................................................ 165
TABLE 7: GPIO DEFAULT FUNCTIONS ................................... 27 TABLE 36: REGISTER FILE: 0X0B – OTP MEMORY INTERFACE
TABLE 8: DW3000 SUPPORTED UWB CHANNELS AND OVERVIEW............................................................ 174
RECOMMENDED PREAMBLE CODES.............................. 28 TABLE 37: RECEIVER OPERATING PARAMETER SETS ............... 178
TABLE 9: PREAMBLE PARAMETERS ...................................... 30 TABLE 38: REGISTER FILES: 0X0C, 0X0D, 0X0E – CIA INTERFACE
TABLE 10: PREAMBLE DURATION FIELD VALUES IN EXTENDED OVERVIEW............................................................ 179
LENGTH FRAME PHR................................................ 32 TABLE 39: REGISTER FILE: 0X0F – DIGITAL DIAGNOSTICS
TABLE 9: PREAMBLE DURATION FIELD VALUES IN EXTENDED INTERFACE OVERVIEW............................................. 205
LENGTH FRAME PHR................................................ 37 TABLE 40: REGISTER FILE: 0X11 – PMSC CONTROL AND STATUS
TABLE 11: RECOMMENDED PAC SIZE .................................. 39 OVERVIEW............................................................ 218
TABLE 12: FRAME TYPE FIELD VALUES .................................. 51 TABLE 41: EXAMPLE SPI INDEXED READ OF ACCUMULATOR CIR
TABLE 13: DECRYPTED STS KEY BYTES (WITH BIG ENDIAN MEMORY ............................................................. 229
FORMAT) ............................................................... 59 TABLE 42: REGISTER FILE: 0X17 – AES KEY RAM OVERVIEW 230
TABLE 14: DECRYPTED STS KEY BYTES (WITH LITTLE ENDIAN TABLE 43: REGISTER FILE: 0X18 – DOUBLE BUFFER DIAGNOSTIC
FORMAT) ............................................................... 60 REGISTER SET OVERVIEW ......................................... 231
TABLE 15: DECRYPTED STS KEY BYTES (WITH LITTLE ENDIAN TABLE 44: REGISTER FILE: 0X1F – FINT STATUS AND INDIRECT
FORMAT AND SWAPPED BY SE PRIOR TO ENCYPTION) ..... 60 POINTER INTERFACE OVERVIEW ................................ 233
TABLE 16: OTP MEMORY MAP........................................... 68 TABLE 45: LIST OF SUPPORTED FAST COMMANDS ................. 238
TABLE 17: REGISTER MAP OVERVIEW................................... 71 TABLE 46: DOCUMENT HISTORY ....................................... 254
TABLE 18: REGISTER FILE: 0X00-0X1 – GENERAL CONFIGURATION
REGISTERS OVERVIEW ............................................... 73
TABLE 19: PREAMBLE LENGTH SELECTION ............................. 86
TABLE 20: PREAMBLE LENGTH REPORTING .......................... 101
TABLE 21: SFD TYPES..................................................... 110
TABLE 22: REGISTER FILE: 0X02 – STS CONFIGURATION AND
STATUS OVERVIEW ................................................ 123
TABLE 23: RECEIVER TUNING PARAMETERS ......................... 126
TABLE 24: REGISTER FILE: 0X05 – GPIO CONTROL AND STATUS
OVERVIEW ........................................................... 130
TABLE 25: REGISTER FILE: 0X06 – DIGITAL RECEIVER
CONFIGURATION OVERVIEW .................................... 145
TABLE 26: CONSTANTS FOR FREQUENCY OFFSET CALCULATION 149
TABLE 27: REGISTER FILE: 0X07 – ANALOG RF CONFIGURATION
BLOCK OVERVIEW .................................................. 149
TABLE 28: RF_ENABLE AND RF_CTRL_MASK VALUES ..... 150
TABLE 29: RF_TX_CTRL_2 VALUES ................................. 152
TABLE 30: PG_DELAY RECOMMENDED VALUES ................. 152
TABLE 31: REGISTER FILE: 0X08 – TRANSMITTER CALIBRATION
BLOCK OVERVIEW .................................................. 156
DOCUMENT INFORMATION
Disclaimer
Decawave reserves the right to change product specifications without notice. As far as possible changes to functionality and
specifications will be issued in product specific errata sheets or in new versions of this document. Customers are advised to check
with Decawave for the most recent updates on this product.
Decawave products are not authorized for use in safety-critical applications (such as life support) where a failure of the Decawave
product would reasonably be expected to cause severe personal injury or death. Decawave customers using or selling Decawave
products in such a manner do so entirely at their own risk and agree to fully indemnify Decawave and its representatives against
any damages arising out of the use of Decawave products in such safety-critical applications.
Caution! ESD sensitive device. Precaution should be used when handling the device in order to prevent
permanent damage.
REGULATORY APPROVALS
The DW3000, as supplied from Decawave, has not been certified for use in any particular geographic region by the appropriate
regulatory body governing radio emissions in that region although it is capable of such certification depending on the region
and the manner in which it is used.
All products developed by the user incorporating the DW3000 must be approved by the relevant authority governing radio
emissions in any given jurisdiction prior to the marketing or sale of such products in that jurisdiction and user bears all
responsibility for obtaining such approval as needed from the appropriate authorities.
1 Introduction
1.1 About the DW3000
The DW3000 is a family of fully integrated low power, single chip CMOS radio transceivers IC implementing
HRP UWB PHY as specified by the IEEE802.15.4 standard [1], including the BPRF mode specified by the
IEEE802.15.4z amendment [2]. There are currently two versions a non-PDoA and an PDoA device with
0xDECA0302 and 0xDECA0312 device identifiers respectively.
Operating
IC Variant Type of package PDoA support
Temperature
DW3110 WLCSP52 No
-40℃ to +85℃
DW3210 QFN40 No
Decawave also provides DW3000 device driver software as source code. This source code includes a set of
API functions to initialise, configure and control the DW3000. It provides API functions for transmission and
reception, and for driving the functionalities of the IC. The DW3000 driver source code is targeted for the
ARM Cortex-M but is readily portable to other microprocessor systems. The API code comes with a number
of simple examples that exercise the API and show how to use various features of the DW3000, including an
example of two-way ranging [3].
DW3000 is backwards compatible with DW1000 for a sub-set of use case configurations. As DW3000 has a
reduced channel set, the only common channel is channel 5 (6.5 GHz). Both 16 and 64 MHz PRFs are
supported as well as the 850 kb/s and 6.81 Mb/s data rates.
Although the DW3000 is operationally backwards compatible with DW1000 on channel 5, modified software
is needed since the DW3000 control register interface is different to that of the DW1000. Decawave provides
an easy-to adopt DW3000 device driver and API for backwards compatibility [3].
The DW3000 host communications interface is a slave-only Serial Peripheral Interface (SPI) compliant with
the industry protocol. The host system must include a master SPI bus controller in order to communicate
with the DW3000.
The host system controls the DW3000 via the SPI, reading and writing configuration and status registers,
data buffers and issuing commands. This section describes the general format of the SPI transactions. For
details of the SPI bus signals, their voltage levels, operational mode configuration and timing parameters
please refer to the DW3000 Datasheet [5]. The SPI-accessible buffers and registers of the DW3000 are
detailed in section 8 – The DW3000 register set, and the commands are detailed in section 9 – Fast
Commands.
The operating mode of the SPI is determined when the DW3000 is initialised as a result of a device reset or is
woken up from a sleep state. At this time GPIO lines 5 and 6 are sampled, (see Figure 8), and their values
used to select the SPI polarity and phase mode respectively. Please refer to the IC Datasheet [5] section “SPI
Operating Modes” for details of the operation resulting from this.
It is possible to set the SPI mode within the DW3000’s one-time programmable (OTP) configuration block to
avoid needing any external components and leave the GPIO free for alternative use. This is a one-time
activity and cannot be reversed thus care must be taken to ensure that the desired SPI mode is correctly set
if this method is used. Please refer to section 7.3 – Using the on-chip OTP memory for more details of OTP
configuration.
For full details of the SPI operating modes and their configuration, please refer to the DW3000 Datasheet.
Each SPI transaction starts with a one or two octet transaction header followed by a variable number of
octets making up the transaction data. The size of an SPI transfer is not limited, however when writing to
any of the DW3000 registers care must be taken not to write extra data beyond the published length of the
selected register (see section 8 – The DW3000 register set) as doing so may cause the IC to malfunction.
SPI transaction
SPI write /
command Header read by DW3000 N-octet data output by host / read by DW3000
Physically the SPI interface is full duplex in that every transaction shifts bits both into and out of the
DW3000. Logically however each transaction is either reading data from the DW3000 or writing data to it.
All SPI communication shown here is from the SPI-Master (host microprocessor) point of view. Thus an SPI
read means reading data from DW3000 and an SPI write means writing data into DW3000. As shown in
Figure 1, for a read transaction all octets beyond the transaction header are ignored by the DW3000, and for
a write transaction all octets output by the DW3000 should be ignored by the host system. The SPI
transaction header selects the SPI transaction format, shown in Figure 2:
Note: The octets are physically presented on the SPI interface data lines with the high-order bit sent first in
time (MSB first). The first bit in the transaction sequence determines the direction of the communication,
which is 0 for the SPI read and 1 for the SPI write operation.
SPI transactions are enveloped by the assertion of the active low chip select line, SPICSn. The high-to-low
assertion (low) of SPICSn initialises the SPI transaction handler so that the DW3000 interprets the next
octet(s) as a new transaction header. The low-to-high de-assertion of SPICSn ends the SPI transaction.
The SPI accessible parameters of the DW3000 are organised into 32 separate register files which are further
detailed in section 8 – The DW3000 register set. Every SPI read or write transaction header includes a 5-bit
register file ID – 5-bit base address – as shown in Figure 2, that identifies the register file is being accessed
by the transaction. Sub-addressing within the selected register file allows efficient access to all the
parameters within the DW3000. Depending on the sub-addressing being used, the transaction header is
either one or two octets long. These three types of transaction are described in the sub-sections below.
byte0[0]
sub-address [6] M1 M0
Full
addressed 0/ byte0[5:1] byte1[7:2]
transaction 1 0 0 X octet data
1 5-bit base address sub-address [5:0]
byte0[5:1] byte1[7:2]
1 1 0 1 1 octet AND mask 1 octet OR mask
5-bit base address sub-address [5:0]
byte0[5:1] byte1[7:2]
1 1 1 1 4 octet AND mask 4 octet OR mask
5-bit base address sub-address [5:0]
Figure 3 shows the fields within the one octet transaction header of a fast command SPI transaction. The 5-
bit fast command hex code is encapsulated by control bits which specify this SPI header as fast command
type. In Figure 3 the fast command is a start transmission command (CMD_TX, hex code 0x1),
Bit count
0 1 2 3 4 5 6 7
CMD_TX = 0x1
1 0 0 0 0 0 1 1
Figure 4 shows the fields within the one octet transaction header read/write command. The 5-bit register file
ID is encapsulated by control bits which specify this header as a read/write transaction with a single octet
header. This example is accessing the DEV_ID register (0x00:00). Only the first octet read from the 32-bit
DEV_ID register is shown with value of 0x12. Note this value may be different depending on the IC version
see § 8.2.2.1 – Sub-register 0x00:00 – Device Identifier.
Bit count
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
REG = 0x0
0 0 0 0 0 0 0 0 0 0 0read/write
1 0data0 1 0
Figure 5 shows the fields within the two-octet transaction header of an extended address write SPI
transaction. The 5-bit base address (0x2) and 7-bit sub address (0x1C) are encapsulated by control bits which
specify this SPI header as an extended address write type. Figure 5 shows the octets sent to the device to
write 2 bytes to register STS_IV (reg ID 0x2 sub address 0x1C). As this is a write type the mode bits (M1 and
M0) are set to 0.
Bit count
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
The SPI CRC mode when enabled provides the ability for SPI transactions to have the added protection of a
Cyclic Redundancy Check sequence. This mode of operation is disabled by default, but may be enabled (and
disabled) via the SPI_CRCEN bit in the SYS_CFG register.
Note: The SPI interface is a local digital interface which should never experience error, so the enabling of SPI
CRC checking is generally unwarranted. While SPI CRC checking has a penalty in terms of the added software
overhead of the host microprocessor having to calculate a CRC for every SPI write and read transaction, it
may be useful for extra reliability reasons, for example where the design has long SPI lines with a possibility
of interference, or in the case of design debugging where SPI integrity has not been proven.
For SPI writes from the host to the DW3000 when SPI CRC mode is enabled, the IC assumes that each SPI
transaction ends with an 8-bit CRC calculated over all the preceding bytes written during the SPI transaction,
i.e. from the falling edge of SPICSn. When SPICSn is de-asserted the final CRC byte of the SPI transaction is
checked by the IC against a CRC it has generated for the transaction. If the CRC from the host does not
match a CRC the IC generates internally, then this is considered to be an error, and the error is signalled to
the host via the SPICRCE event bit in the system event status register, SYS_STATUS. This event flag may be
used to generate an interrupt if the event is unmasked via the SPICRCE_EN bit in the SYS_ENABLE register.
Note: The write command will complete irrespective of the CRC error check status, which means that the
data may be written to the wrong register location, and/or the data may be written incorrectly. The 8-bit
CRC itself is not written to the addressed location,
The recommend recovery from a write CRC error is to reset the DW3000 completely, reinitialising and
reconfiguring it into the desired operating mode for the application.
For host SPI reads of DW3000 registers when SPI CRC mode is enabled, the IC calculates an 8-bit CRC over
the whole the SPI transaction, i.e. from the falling edge of SPICSn at the start of reading to its de-assertion at
the end of the read. The CRC thus covers the 1 to 3 header bytes written by the host to initiate the read, and
all the subsequent bytes output as the host continues the read transaction. The resultant CRC value is
placed into the SPI_RD_CRC register in Sub-register 0x00:18 – SPI CRC read status.
A host wishing to validate the CRC of an SPI read transaction, must calculate its own CRC value across the
header bytes it writes and all the data bytes it subsequently reads for the transaction, and then must read
the IC calculated CRC from the SPI_RD_CRC register, and compare it to the host calculated CRC. If these
don’t match then the host has detected an error in the SPI read.
In the event of an SPI read error, the read can just be repeated, except in the unlikely case that the error
changed the read into a write. In that case a write CRC error will be triggered and this can be handled as
before by resetting the DW3000 and reinitialising/reconfiguring it into the desired operating mode.
The CRC is 8-bits long, based on the CRC-8-ATM which has generator polynomial:
G(x) = x8 + x2 + x + 1
and has a typical implementation as shown in Figure 6, where the circle operator is an exclusive-OR.
Input
r0 r1 r2 r3 r4 r5 r6 r7
In the DW3000 the shift register (r0 to r7) is initialised, at the start of each read or write SPI, with the value
specified in the SPICRCINIT register, which by default is all zeros.
Note: The source code of the DW3000 device driver and API [3] includes functions to generate and check the
SPI CRC along with a simple example that demonstrates their use. The maximum SPI rate supported by
DW3000 when the SPI CRC mode is enable is 20 MHz.
Interrupts
The DW3000 can be configured to assert its IRQ pin on the occurrence of one or more status events. The
assertion of the IRQ pin can be used to interrupt the host controller and redirect program flow to handle the
event.
The polarity of the IRQ pin may be configured via the HIRQ_POL bit in the Sub-register 0x0F:24 – Digital
diagnostics test mode control. By default, on power up the IRQ polarity is active high. This is the
recommended polarity to ensure lowest power operation of the DW3000 in SLEEP and DEEPSLEEP device
states. This pin will float in SLEEP and DEEPSLEEP states and may cause spurious interrupts unless pulled low.
The occurrence of a status event in SYS_STATUS register may assert the IRQ pin depending on the setting of
the corresponding bit in the SYS_ENABLE register.
By default, on power-up, the SPIRDY interrupt generating event enable SPIRDY_EN is set to 1 so that the
interrupt enabled.
The DW3000 provides a number of GPIO pins as listed in the DW3000 Datasheet [5]. These can be
individually configured at the user’s discretion to be inputs or outputs. The state of any GPIO configured as
an input can be read by the host controller over the SPI interface. When configured as an output the host
controller can set the state of the GPIO to high or low. Some of the GPIO lines have multiple functions as
listed in the DW3000 Datasheet.
The configuration and operation of the GPIO pins is controlled via GPIO_CTRL register. By default, on power-
up, all GPIOs are configured as inputs.
This pin is used for external clock synchronisation purposes. See section 7.1 – External Synchronisation for
further details.
The DW3000 has a number of different operational states. These are listed and described in Table 4 below
and the transitions between them are illustrated in Figure 7.
OFF
WAKEUP
Auto-to-sleep
AON configuration download
SLEEP
(~20kHz)
INIT_RC
(~30 MHz)
I/O Wakeup Event
Auto-to-sleep
IDLE_RC
Auto-to-sleep DEEP
(~120 MHz)
SLEEP
PLL locked
TX_EN RX_EN
IDLE_PLL
(125 MHz)
TX_WAIT RX_WAIT
TX RX
In the OFF state the DW3000 is completely powered off, with no voltages applied to
OFF any of its input pins. Power consumption = 0 µA. No I/O pins should be driven or
power will leak through the I/O cells.
During the WAKE_UP state the AON sequencer starts up all of the primary power and
WAKE_UP clock blocks in order to achieve host comms in the INIT_RC state. The device will
automatically transition from the WAKE_UP state to INIT_RC state.
Lowest power state with SPI access, but limited to 7 MHz. System is clocked off a
INIT_RC
divide-by-four of the FAST_RC clock, i.e., the IC runs at approximately 30 MHz.
Lowest power state allowing full speed SPI access. The FAST_RC oscillator is used as
IDLE_RC
the system clock source, i.e., the IC runs at approximately 120 MHz.
In the IDLE_PLL state the DW3000 internal clock generator PLL is locked running at its
nominal 125 MHz rate and ready for use but it is gated off to most circuitry to
minimize power consumption. In the IDLE_PLL state SPI communications can operate
at up to 38 MHz, the maximum SPICLK frequency. In the IDLE_PLL state the analog
receive and transmit circuits are powered down.
IDLE_PLL/IDLE
The external host can control the DW3000 to initiate a transmission or reception and
thus cause the DW3000 to progress into TX or RX state respectively. If a delayed TX or
RX operation is initiated (see section 3.3 – Delayed transmission and 4.3 - Delayed
receive) then the DW3000 will enter the TX_WAIT or RX_WAIT (until the delayed time
has elapsed) and then enter TX or RX state.
In the SLEEP state the IC consumes < 1 µA from the external power supply inputs. All
internal LDOs are turned off. In the SLEEP state the DW3000 internal low power
oscillator is running and is used to clock the sleep counter whose expiry is
programmed to “wake up” the DW3000 and progress into the WAKE_UP state. While
the IC is in the SLEEP state, the external system should avoid applying power to GPIO,
SLEEP SPICLK or SPIMISO pins as this will cause an increase in the leakage current.
While device is in the SLEEP state the SPI communication is not possible.
Note: prior to entering SLEEP state AINIT2IDLE configuration bit in SEQ_CTRL
register should be cleared. This will ensure that the device will remain in IDLE_RC
state after wake up and the host can then load LDOTUNE_CAL values from OTP prior
to changing into IDLE_PLL state.
With the exception of the OFF state, the DEEPSLEEP state is the lowest power state of
the device. In this state the IC consumes < 250 nA from the external power supply
inputs.
In DEEPSLEEP all internal circuitry is powered down with the exception of the always-
on memory which can be used to hold the device configuration for restoration on
wake up
Once in DEEPSLEEP, the DW3000 remains in this state until the occurrence of a wake
up event. This can be either:
1. the SPICSn line pulled low or
2. the WAKEUP line driven high
DEEPSLEEP
for the duration quoted in the DW3000 Datasheet [5] (nominally 500 μs).
Once the DW3000 has detected a wake up event it progresses into the WAKE_UP
state. While the IC is in DEEPSLEEP state, the external system should avoid applying
power to GPIO, SPICLK or SPIMISO pins as this will cause an increase in leakage
current.
Note: Asserting the RSTn pin (hardware reset) will also take the device out of
DEEPSLEEP, however device will be fully reset in that case.
While device is in the DEEPSLEEP state the SPI communication is not possible.
See Note: above (in SLEEP state) on clearing of AINIT2IDLE prior to entering
DEEPSLEEP state.
This state is very like the IDLE_PLL state except the IC is implementing a delay prior to
TX_WAIT transmission, typically aiming to transmit the RMARKER at a specified time. At the
apprioiate moment the TX analog blocks are turned on and the device transitions into
the TX.
This state is very like the IDLE_PLL state except the IC is implementing a delay prior to
RX_WAIT turning on the receiver. At the apprioiate time the RX analog blocks are turned on
and the device transitions into the RX state.
In the TX the DW3000 actively transmits a packet (generally containing the contents
of the transmit buffer) on the configured RF channel with the configured transmit
parameters (PRF, data rate, preamble code etc.)
Once the transmission is complete the DW3000, will go back to the IDLE_PLL state,
TX state
following which it may enter RX state (e.g. if using wait for response command) or go
to a low-power state depending on the programmed configuration. If the ATX2SLP bit
is set (in SEQ_CTRL) the DW3000 will enter the SLEEP or DEEPSLEEP state
automatically, see “Auto-to-sleep” path in Figure 7 (as long as no host interrupts are
pending).
In the RX state, the receiver is active, either hunting for preamble or (once it has
detected preamble) actively receiving preamble searching for the start of frame
delimiter (SFD), and subsequently receiving the rest of the packet. In the RX state, the
RF synthesizer and all RX blocks are active.
After an event that ends the reception, (either a good frame/packet reception, or some
RX state error or timeout event that aborts reception) the DW3000 will return to the IDLE_PLL
state unless ARX2SLP bit is set (in SEQ_CTRL) in which case the IC will enter the SLEEP
or DEEPSLEEP state automatically, see “Auto-to-sleep” path in Figure 7 (as long as no
host interrupts are pending).
Note that it is not possible to be in the RX and TX states simultaneously – the DW3000
is a half-duplex transceiver device.
The chipping rate specified for the HRP UWB PHY by the IEEE 802.15.4 standard [1] is 499.2 MHz, and all IC
system clocks are referenced to this frequency. Where the system clock frequency is quoted as 125 MHz,
this is an approximation to the actual 124.8 MHz system clock frequency (crystal 38.4 MHz × 13 ÷ 4).
Similarly, where the system clock period is quoted as 8 ns, this is an approximation to the actual period of
1/(124.8×106) seconds.
The 1 GHz PLL clock, where referenced, is an approximation to its actual frequency of 998.4 MHz.
A 63.8976 GHz sampling clock is associated with ranging for the IEEE802.15.4 standard [1], where a 15.65
picosecond time period is referred to, it is an approximation to the period of this clock.
The PRF values of 16 MHz and 64 MHz quoted in this document are approximations to the values dictated by
the IEEE802.15.4 standard [1]. PRF mean values are slightly higher for SHR compared to the PHR and data
parts of the packet. Please refer to [1] for full details of peak and mean PRFs.
Data rate
Where a data rate of 6.8 Mb/s is referred to, this is equivalent to the 6.81 Mb/s data rate in [1]. Note that
the data rates quoted are (rounded) nominal values based on the data symbol rate multiplied by the Reed-
Solomon (RS) coding rate, 0.87 which is 330/378 because the RS coding adds 48 parity bits for every 330 bits
data (or part thereof). Please refer to [1] for more details.
Then the VDD2a and VDD3 supplies are monitored and once they are above the required voltage as specified
in the Datasheet (2.2 V and 1.4 V respectively), the fast RC oscillator (FAST_RC) and crystal (XTAL Oscillator)
will come on within 500 µs and 1 ms respectively. However if time for VDD2a or VDD3 exceeds 10 ms then
the device will need to be reset once these supplies are up. Please refer to the Datasheet [5] for more
details.
The DW3000 digital core will be held in reset until the crystal oscillator is stable. Once the digital reset is de-
asserted the digital core wakes up and enters the INIT_RC state, (see Figure 7 and Figure 8). Then once the
configurations stored in AON and OTP have been restored (into the configuration registers) the device will
enter the IDLE_RC stateIDLE_RC. Then the host can set the AINIT2IDLE configuration bit in SEQ_CTRL and the
IC will enable the CLKPLL and wait for it to lock before entering the IDLE_PLL state.
VDD1 _0V
POR
PORn/RSTn _0V
EXTON _0V
Comparators
VDD2a/VDD3
Supply
_0V
LP Oscillator
Fast Oscillator
Oscillators
XTAL Oscillator
<1 ms
ACTIVE States
AON Power up
(INIT_RC, IDLE_RC, IDLE_PLL, TX, RX)
In the very low power DEEPSLEEP state, the IC is almost completely powered down except for a small
amount of “always-on” memory necessary to maintain IC configurations. This is the lowest power mode of
the IC where the power drain is approximately 200 nA. To wake the IC from DEEPSLEEP state requires an
external agent to assert the WAKE_UP input line or the external host microprocessor to initiate an SPI
transaction to assert the SPICSn input.
The DW3000 also includes a low power SLEEP state where the IC can wake itself from sleeping as a result of
the elapsing of a sleep timer (see 8.2.11.6.1 for sleep timer configuration) that is running from a low-
powered oscillator internal to the DW3000 IC. In this SLEEP state the power drain is approximately 1 µA.
The IC will wake from the SLEEP state when the sleep timer elapses, or the WAKE_UP or SPICSn inputs may
be used to wake the device before the timer elapses.
The frequency of the low power oscillator is dependent on process variations within the IC, but is typically
around 20 kHz. There are facilities within the IC to measure the frequency of this LP oscillator and also to
trim it.
>= 500 µs
_0V
Wakeup
used
VDD1 _0V
POR
PORn/RSTn
_0V
EXTON _0V
Comparators
VDD2a/VDD3
Supply
_0V
Signal VDD2a/VDD3
OK _0V
LP Oscillator
Oscillators
Fast Oscillator
XTAL Oscillator
Waking from SLEEP and DEEPSLEEP states can happen in following ways:
• Driving the WAKEUP pin high for approximately 500 μs, (assuming WAKE_WUP configuration bit is
set in AON_CFG).
• Driving the SPICSn pin low for approximately 500 μs, (assuming the WAKE_CSN configuration bit is
set in AON_CFG). This can be achieved by doing a dummy SPI read of sufficient length.
Note: When using the SPICSn pin to wake up the device it is important that the SPIMOSI line is
held low for the duration of the SPICSn to ensure that a spurious write operation does not occur.
• The internal sleep timer counter expires, (assuming the WAKE_CNT configuration bit is set in
AON_CFG along with an appropriate SLEEP_TIM value).
In all three wake up cases the device is returned to the IDLE_PLL state if the AINIT2IDLE configuration bit in
SEQ_CTRL register was set when the device configuration was uploaded prior to entering sleep state,
otherwise the device will stay in IDLE_RC. Additional state transitions can be automatically enacted
thereafter depending on configurations.
Asserting the RSTn pin (hardware reset) will also take the IC out of SLEEP or DEEPSLEEP states, however
device will be fully reset in that case.
Prior to entering the SLEEP or DEEPSLEEP states the main DW3000 configuration register values are saved
(copied) into the Always-On (AON) memory, and upon waking, prior to exiting the INIT_RC state the saved
values are restored from the AON memory.
Power is maintained to the AON memory at all times, even in SLEEP and DEEPSLEEP states. The copying of
configuration data (saving or restoring) and boot up time of the OTP takes ~85 µs to complete (when
restoring from SLEEP and DEEPSLEEP states, see Figure 9). Restoration of configurations during the
WAKE_UP state is only done if the ONW_AON_DLD configuration bit is set in AON_DIG_CFG.
Note: The host should wait for the restoration of configurations to be completed before using SPI to avoid
internal IC conflicts that may lead to the corruption of the configuration values. The preffered option is to
wait for the assertion of the SPIRDY interrupt.
When waking from SLEEP or DEEPSLEEP it is necessary to load the LDOTUNE_CAL value that is programmed
into OTP during IC production test calibration.Default configuration on power up and after a reset
DW3000 is a highly configurable transceiver with many features. The register default (reset) values have
been selected with the intention of minimising the amount of user configuration required. The default
configuration is summarised in Table 6.
Channel numbers and preamble codes are as specified in the standard, IEEE802.15.4 standard [1]. Some
further details are given below on the specifics of the default device configuration. For full details please
refer to the register map where the default value of each register is given, § 8 – The DW3000 register set.
Note: the above default configuration needs to be modified in oder for the DW3000 to correctly
interoperate with the DW1000 on CH5.
Much of the system configuration is configured in the SYS_CFG register, please see section Sub-register
0x00:10 – System configuration for a full description of the register contents and defaults.
By default, interrupt polarity is active high and all interrupts are disabled, see HIRQ_POL in the DIAG_TMC
register for interrupt polarity and the SYS_ENABLE and SYS_STATUS registers for interrupt configuration and
information, see sections Sub-register 0x00:3C – System event enable mask and Sub-register 0x00:44 –
System event status.
GPIOs are all set to mode 0 (as defined in the GPIO_MODE register), their default function is shown in Table
7.
Frame wait timeout (see SYS_CFG register bit RXWTOE and Sub-register 0x00:34 – Receive frame wait
timeout period) and preamble detection timeout (see Sub-register 0x06:04 – Preamble detection timeout
count) are off, whilst SFD detection timeout (see Sub-register 0x06:02 – SFD detection timout count) is on.
Other SYS_CFG register settings such as automatic receiver re-enable (RXAUTR) and MAC functions such as
frame filtering (FFEN), double buffering (DIS_DRXB) and automatic acknowledgement (AUTO_ACK) are all off
by default. Automatic CRC generation in the MAC frame data is on (DIS_FCS_TX).
External synchronisation and the use of external power amplifiers are deactivated by default, see sections
7.1 – External Synchronisation and 7.2 – External power amplification.
Channel 5, preamble code 9 and 64 MHz PRF are set by default in the CHAN_CTRL register, see Sub-register
0x01:14 – Channel control for more information.
The transmit data rate is set to 6.8 Mb/s in the TX_FCTRL register, see TXBR field in Sub-register 0x00:24 –
Transmit frame control . The receive data rate is never set it can be decoded from the PHR bits.
Transmit RF channel configurations are set for channel 5 by default – see Sub-register 0x07:1C – RF TX
control register 2.The transmit preamble symbol repetition length is 64 symbols, see Sub-register 0x00:24 –
Transmit frame control, TXPSR field for configuration details.
Receiver RF channel configurations are set for channel 5 by default, to match the transmitter.
Digital receiver tuning registers are configured by default for 64 MHz PRF, 6.8 Mb/s data rate and a preamble
symbol repetition of length 64. See Sub-register 0x06:00 – Digital RX tuning register for programming details.
The CIARUNE bit (CIA run enable) is enabled by default, which means that the CIA algorithm will execute on
every packet reception, which in turn will calculate accurate time-of-arrival. If the running the CIA is not
required then the CIARUNE control in Sub-register 0x11:08 – Sequencing control can be turned off (set to
zero). This may be useful in a data communications only application, to save power and time.
Centre
Channel Bandwidth Preamble Codes Preamble Codes
frequency
number (MHz) (16 MHz PRF) (64 MHz PRF)
(MHz)
5 6489.6 499.2 3, 4 9, 10, 11, 12
9 7987.2 499.2 3, 4 9, 10, 11, 12
The preamble codes specified by the standard for use on a particular channel were chosen to have a low
cross correlation factor with each other with the intention that the complex channels could to operate
independently from each other as separate networks. In practice, as there is still some cross correlation,
there will be some break-through between different codes especially in conditions of close proximity with
long preambles.
The IEEE802.15.4 standard [1] includes a feature called dynamic preamble select (DPS), where devices switch
to using one of the DPS specific preamble codes for the ranging exchange, and perhaps a different one for
each direction of communication. The idea is to make it more difficult to eavesdrop or spoof, by randomly
changing the DPS preamble codes in a mutually agreed sequence only known to the valid participants. This
is supported by the DW3000 where at 64 MHz PRF the preamble codes additionally available for DPS are: 13,
14, 15, 16, 21, 22, 23 and 24.
Each data bit passes through a convolution encoder to generate a “parity” bit used to set the phase of the
burst as either positive or negative, this component of the modulation is termed binary phase-shift keying
(BPSK). Figure 10 shows how the convolutional encoder contributes to this BPM/BPSK modulation. A
coherent receiver (i.e. one tracking carrier timing and phase) such as the one in the DW3000 can determine
this burst phase and use it in a Viterbi decoder to get an additional 3 dB of coding gain, thereby extending
the operational range of the modulation.
Data in
D D
unused unused
Burst here Burst here
guard guard
+ =0 =1
Systematic interval interval
Convolution Encoder One symbol interval (or bit time)
In addition the quarter symbol interval is sub-divided into 2, 4, or 8 sub-intervals and a pseudo random
sequence used to determine both the burst shape and which of the sub-intervals are actually used for the
burst transmission. This gives more immunity to interference and whitens the output spectrum allowing a
higher signal power to be used in the transmitter.
Forward error correction (FEC) is also included in the PHR and Data parts of the packet. The 19-bit PHR
includes a 6-bit single-error-correct double-error-detect (SECDED) code and the data part of the packet has a
Reed Solomon (RS) code applied. Both SECDED and RS codes are termed “systematic” meaning that the data
can be recovered without using the codes (and of course not benefitting from them in that case), e.g. by a
non-coherent receiver. The 850 kb/s and 6.8 Mb/s user data rates quoted, include allowance for the 0.87
average RS coding rate. The PHR is not RS coded so for example at the 850 kb/s nominal rate the PHR is
actually sent at 975 kb/s.
The sequence of pulses sent during the preamble symbol interval is determined by the preamble code. The
standard defines 8 preamble codes of length-31 for use at 16 MHz PRF and 16 preamble codes of length-127
for use at 64 MHz PRF. The standard nominates particular codes for particular channels so that at 16 MHz
PRF there are just two to choose from per channel, while at 64 MHz PRF there is a choice of four codes per
channel. The length-31 codes are spread by inserting 15 zeros after each pulse to give the 496 chip times
per symbol while the length-127 codes are spread by inserting 3 zeros after each pulse to give the 508 chip
times per symbol. The preamble length and duration is defined by how many times (i.e. for how many
1
The DW3000 supports average pulse repetition frequencies of 16 MHz and 64 MHz
symbols) the sequence is repeated. This is determined by the configuration of the number of preamble
symbol repetitions (PSR).
Mean PRF (MHz) #Chips Per Symbol Preamble Symbol Duration (ns)
The standard defines PSR settings of 16, 64, 1024 and 4096. The DW3000 supports these (although it will
not receive packets with preamble length below 32 symbols) and in addition supports PSR settings of 128,
256, 512, 1536 and 2048.
The preamble sequence has a property of perfect periodic autocorrelation2 which in essence allows a
coherent receiver to determine the exact impulse response of the RF channel between transmitter and
receiver. This brings two important benefits. Firstly, it allows the receiver make use of the received energy
from multiple paths, turning multipath from an interference source into a positive affect extending operating
range. Secondly, it lets the receiver resolve the channel in detail and determine the arrival time of the first
(most direct) path, even when attenuated, which brings precision advantages for RTLS applications.
Note: The DW3000 includes a packet format specified by new IEEE802.15.4z amendment [2] which
incorporates a cryptographically generated scrambled timestamp sequence (STS) that can be used to obtain
an RX timestamp that has improved integrity in terms of its robust to accidental or deliberate interference,
e.g. as a result of packet collisions, for more details of this please refer to section 6 below.
The SFD marks the end of the preamble and the precise start of the switch into the BPM/BPSK modulation of
the PHR. The time-stamping of this event is deterministic in terms of symbol times and it is this in
conjunction with determining the first arriving ray within that symbol time that allows the accurate time-
stamping needed for precision RTLS applications. The standard specifies the SFD, which consists of the
preamble symbols either not sent, or sent as normal or sent inverted (i.e. positive and negative pulses
reversed) in a defined pattern 8 symbol times long for 850 kb/s and 6.81 Mb/s data rates. The length-8 SFD
sequence is: 0, +1, 0, -1, +1, 0, 0, -1. The IEEE802.15.4z amendment also specifies length-8 SDF without
zeros, ( -1, -1, -1, +1, -1, -1, +1, -1), which gives improved performance in a coherent receiver such as the
DW3000 that supports it.
2
V. P. Ipatov, “Ternary sequences with ideal autocorrelation properties,” Radio Eng. Electron. Phys., vol. 24, pp. 75–79, 1979
Bit 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
R1 R0 L6 L5 L4 L3 L2 L1 L0 RNG EXT P1 P0 C5 C4 C3 C2 C1 C0
Extension
Ranging
Header
frame
Preamble
Data Rate Frame Length SECDED Check Bits
Duration
Figure 11 above shows the bits of the PHR. These are transmitted bit-0 first in time. The DW3000 fills in the
Data Rate, Frame Length, Ranging frame, and Preamble Duration fields of the PHR based on the user
configuration of the appropriate parameters in TX_FCTRL and generates the SECDED sequence accordingly.
The Header Extension bit of the PHR is always zero and is reserved by IEEE for future extensions.
In this mode the PHY header (PHR) is redefined to carry the 3 extra bits of frame length. In order to
communicate extended length frames between two DW3000 devices both ends must be set to the long
frame PHY header mode via the PHR_MODE selection bits of Sub-register 0x00:10 – System configuration. If
the setting is only at one end of a link any attempt at communication will fail with PHR errors being
reported. When this long frame mode is selected, the DW3000 will be unable to successfully communicate
with any device operating with the IEEE 802.15.4 standard frame encoding, and because the SECDED error
check sequence of the PHR in this long frame mode is inverted this will cause PHR error events in advance of
any attempt to receive the payload.
Note that the probability of an error occurring within a frame increases as the frame length is increased, and
as a result of this increasing the frame length may or may not improve system throughput depending on the
error rate and the need to retransmit frames when there is an error.
In long frame mode only the high order bit of the TXPSR value from TX_FCTRL is sent in the PHR and
reported in the RXPSR value in RX_FINFO.
The PHR encoding for the extended length frames is shown below in Figure 15:
Bit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 16 17 18
0
R1 R0 L9 L8 L7 L6 L5 L4 L3 L2 L1 L0 P0 S5 S4 S3 S2 S1 S0
Duration
Preamble
Data
Frame Length SECDED Check Bits
Rate
The Data Rate field has the same encoding as used for the IEEE802.15.4 standard PHR.
The frame length field L9-L0 is an unsigned 10-bit integer number that indicates the number of octets in the
PSDU from the MAC sub-layer. Note that the high order bit of the length is transmitted first in time.
A single bit, P0, provides the Preamble Duration field, indicating the length of the SYNC portion of the SHR
shown in Table 11.
Table 10: Preamble duration field values in extended length frame PHR
0 64 to 1024 symbols
The preamble duration field, TXPSR, may be used by a receiver to set the value of the preamble duration for
an ACK frame to 64, 128, 256, 512, 1024, 1536, 2048 and 4096 symbols. Alternatively, the FINE_PLEN field
may be used to set any multiple of 8 as a preamble length from 32 to 2048. The application may use the
count of received preamble symbols, as reported in IP_DIAG12 register, to additionally inform the choice of
preamble length for any response frames.
The SECDED field, S5–S0, is a set of six parity check bits that are used to protect the PHR from errors caused
by noise and channel impairments. The SECDED calculation is the same as that defined in IEEE802.15.4
standard [1] except the bits C5–C0 are inverted to get S5–S0 as follows:
S0 = NOT (C0), S1 = NOT (C1), S2 = NOT (C2), S3 = NOT (C3), S4 = NOT (C4) and S5 = NOT (C5)
This is as specified in the IEEE 802.15.8 standard for frames up to 1023 octets.
3 Message transmission
3.1 Basic transmission
The transmission of packets is one of the basic functions of the DW3000 transceiver. The packets can be sent
both with and without data payload. The DW3000 supports four packet formats, the IEEE802.15.4 standard
[1] packet format, and three new IEEE802.15.4z amendment [2] defined formats where a scrambled
timestamp sequence (STS) is introduced into the packet as shown in Figure 13. When the STS modes are
enabled the DW3000 transmitter will insert the STS in the position shown, and the receiver will expect it to
be present accordingly. The packet begins with a synchronisation header consisting of the preamble and the
SFD (start of frame delimiter). The PHY header (PHR) defines the length (and data rate) of the data payload
part of the packet. The STS when inserted allows for secure timestamping, and ranging, see § 6.
(Packet configuration 0, SP0) Standard IEEE 802.15.4 UWB frame structure without STS
(Packet configuration 1, SP1) STS follows SFD with PHR and PHY Payload
The DW3000 basic transmit sequence is as shown in Figure 14, beginning in the IDLE_PLL state awaiting
instruction from the host controller.
In order to transmit, the host controller must write data for transmission to TX_BUFFER, and select the
preamble length, frame length, data rate and PRF in the Transmit Frame Control and Channel Control
registers, TX_FCTRL and CHAN_CTRL. The PRF will be set according to the chosen preamble code
(TX_PCODE). Assuming all other relevant configurations have already been made, the host controller
initiates the transmission by issuing a TX command (e.g. CMD_TX). Once transmission is initiated, the
DW3000 sends the complete packet of preamble, SFD, PHR and the PHY Payload (MAC Frame). The STS will
be included optionally depending on the configured packet format (see Figure 13). In the STS packet
configuration 3 (SP3) the PHR and PHY Payload is omitted.
As an aid to MAC layer framing, the IC calculates the FCS (CRC) during the transmission of the (MAC) data
from the TX_BUFFER based on the frame length (TXFLEN) and automatically appends it.
The end of transmission is signalled to the host via the TXFRS event status bit in SYS_STATUS, and the
DW3000 returns to IDLE_PLL mode to await new instructions.
IDLE
Write data to TX buffer
Configure TX parameters
TX START?
Yes
TX
Transmit the message
TX
No
complete
?
Yes
No
Auto-Sleep?
SLEEP
The DW3000 digital transmit circuitry takes note of the system clock counter as the RAW transmit
timestamp at the point when it begins sending the first chip following the SFD. It then adds to this the
transmit antenna delay (configured in TX_ANTD) to get the antenna adjusted transmit time-stamp that it
writes to the TX_STAMP field of TX_TIME.
One of the design goals of delayed transmission was that the specified transmission time would be
predictable and aligned with the transmit timestamp. This was achieved in that the transmission time
specified is the time of transmission of the RMARKER (not including the TX antenna delay), that is the raw TX
time, TX_RAWST before the antenna delay is added. This allows for the time of transmission of a message
to be pre-calculated and embedded in the message being transmitted.
Note: The value programmed into DX_TIME (and in DREF_TIME) is in time units of 4 ns, or more precisely
2 ÷ (499.2×106). To calculate the time of transmission of the RMARKER at the antenna, the low 9 bits of the
delayed TX time should be zeroed before adding the TX antenna delay, and the high 32-bits of the 40-bit
result written into DX_TIME, (or a reference time programmed into DREF_TIME and an offset into the
DX_TIME). Note: the least significant bit of DX_TIME is ignored so its effective resolution of is really
4 ÷ (499.2×106) or approximately 8 ns.
In performing a delayed transmission, i.e., after the CMD_DTX is issued, the DW3000 calculates an internal
start time for when to begin sending the preamble to make the RMARKER raw timestamp agree with the
programmed transmit time. The DW3000 then remains in TX_WAIT state until the system time (SYS_TIME)
reaches the correct point to turn on the transmitter and begin preamble.
One use of delayed transmission (and reception), is to control the response times in two-way ranging,
(described in APPENDIX 1: Two-way ranging), and especially to allow the prediction and embedding of the
TX timestamp (or response delay) into the transmitted message to reduce the number of messages
necessary for a ToF measurement. Delayed transmission (and reception) also helps to minimise the
response times to save power, however in working towards this the host microprocessor may sometimes be
late invoking the delayed TX, i.e., where the system clock has passed the specified start time (i.e. internal
start time mentioned above) and then the IC would have to complete almost a whole clock count period
before the start time is reached. The HPDWARN event status flag in SYS_STATUS warns of this “lateness”
condition so that during application development the delay may be chosen large enough to generally avoid
this lateness. The HPDWARN status flag also serves to facilitate detection of this late invocation condition so
that recovery measures may be taken should it ever occur in deployed product. For delayed transmission it
is the internal start time mentioned above that is used when deciding whether to set the HPDWARN event
for the delayed transmit. As long as the preamble start time is in the near future, the HPDWARN event flag
will not be set. If a long delay was intended then HPDWARN flag can be ignored and the transmission will
begin at the allotted time. If a long delay was not intended then the transmission can be stopped by issuing
transceiver off command CMD_TXRXOFF.
In this mode the PHY header (PHR) is redefined to carry the 3 extra bits of frame length. In order to
communicate extended length frames between two DW3000 devices both ends must be set to the long
frame PHY header mode via the PHR_MODE selection bits of Sub-register 0x00:10 – System configuration. If
the setting is only at one end of a link any attempt at communication will fail with PHR errors being
reported. When this long frame mode is selected, the DW3000 will be unable to successfully communicate
with any device operating with the IEEE 802.15.4 standard frame encoding, and because the SECDED error
check sequence of the PHR in this long frame mode is inverted this will cause PHR error events in advance of
any attempt to receive the data payload.
Note that the probability of an error occurring within a frame increases as the frame length is increased, and
as a result of this increasing the frame length may or may not improve system throughput depending on the
error rate and the need to retransmit frames when there is an error.
In long frame mode only the high order bit of the TXPSR value from TX_FCTRL is sent in the PHR and
reported in the RXPSR value in RX_FINFO.
The PHR encoding for the extended length frames is shown below in Figure 15:
Bit
1 2 3 4 5 6 7 8 9 10 11 12 13 14 14 16 17 18
0
R1 R0 L9 L8 L7 L6 L5 L4 L3 L2 L1 L0 P0 S5 S4 S3 S2 S1 S0
Duration
Preamble
Data
Frame Length SECDED Check Bits
Rate
The Data Rate field has the same encoding as used for the IEEE802.15.4 standard [1] PHR.
The frame length field L9-L0 is an unsigned 10-bit integer number that indicates the number of octets in the
PSDU from the MAC sub-layer. Note that the high order bit of the length is transmitted first in time.
A single bit, P0, provides the Preamble Duration field, indicating the length of the SYNC portion of the SHR
shown in Table 11.
Table 11: Preamble duration field values in extended length frame PHR
0 64 to 1024 symbols
The preamble duration field, TXPSR, may be used by a receiver to set the value of the preamble duration for
an ACK frame to 64, 128, 256, 512, 1024, 1536, 2048 and 4096 symbols. Alternatively, the FINE_PLEN field
may be used to set any multiple of 8 as a preamble length from 32 to 2048. The application may use the
count of received preamble symbols, as reported in IP_DIAG12 register, to additionally inform the choice of
preamble length for any response frames.
The SECDED field, S5–S0, is a set of six parity check bits that are used to protect the PHR from errors caused
by noise and channel impairments. The SECDED calculation is the same as that defined in IEEE802.15.4
standard [1] except the bits C5–C0 are inverted to get S5–S0 as follows:
S0 = NOT (C0), S1 = NOT (C1), S2 = NOT (C2), S3 = NOT (C3), S4 = NOT (C4) and S5 = NOT (C5)
This is as specified in the IEEE 802.15.8 standard for frames up to 1023 octets.
4 Message reception
4.1 PHY reception
The reception of a packet is enabled by a host request enabling of the receiver. This can be done while the
device is in either IDLE_RC or IDLE_PLL state. If the device was in IDLE_RC it will firstly clalibrate, enable PLL
and switch to IDLE_PLL state and then goin into RX state. However, prior to the first RX enable following
device power up, the receiver needs to be calibrated. This is done by performing RX calibration, for more
details on this see the dwt_pgf_cal() API [3] and RX_CAL register. The RX calibration is automatically done on
wakeup as long as ONW_PGFCAL bit is set. It is also recommended that the receiver is re-calibrated if the
operating temperature changes by 20 °C.
RC IDLE / IDLE
E
Configure RX parameters
RX start
no Reached start yes Delayed
time ? RX ?
yes no
RECEIVE
Search for Preamble
no
Accumulate Preamble
and await SFD
no
yes no SFD
E SFD timeout detected
? ?
Yes
To enable the receiver, the host issues an RX start command (see section on Fast Commands). The receiver
will start by searching for preamble continually until preamble has been detected or acquired, then a
demodulation will be attempted. A preamble detection timeout may be set to allow the receiver to stop
searching for preamble after a desired period (which is programmable in PRE_TOC). A receive sequence is
shown in Figure 16.
Preamble detection
The preamble sequence is detected by cross-correlating in preamble acquisition chunks (PACs) which are a
number of preamble symbols long. The size of chunk used is selected by the PAC configuration in DTUNE0.
The PAC size should be selected depending on the expected preamble size. A larger PAC size gives better
performance when the preamble is long enough to allow it, but if the PAC is too large for the preamble
length the receiver performance will be impaired, or fail to work at the extremes – (e.g. a PAC of 32 will
never receive packets with just 32 preamble symbols). Table 12 gives the recommended PAC size
configuration to use in the receiver depending on the preamble length being used in the transmitter.
Aborting reception with use of preamble detection timeout (PRE_TOC) is very useful following sending a
message where a response is being awaited. Here if the preamble is not detected then the awaited
response is not coming. The preamble detection time-out can be used to abandon the reception at the
earliest possible time, saving power.
Preamble accumulation
Once the preamble sequence is detected, the receiver begins accumulating correlated preamble symbols
and building a channel impulse response (CIR), while in parallel looking for the SFD sequence (a particular
sequence of preamble symbols, see § 2.8 – Synchronisation header modulation scheme for details).
SFD detection
The detection of SFD is a key event in the reception of a packet, because it marks the RMARKER, which is
time-stamped (see section 4.1.7 – RX message timestamp), and it marks the change from preamble
demodulation to the BPM/BPSK demodulation of the PHR and data or STS demodulation if enabled.
It is possible to abort reception if the SFD is not detected within a certain time after preamble is detected.
This functionality is configured via DRX_SFDTOC. This SFD detection timeout guards against false detection
of preamble (which has a finite chance of happening) that could otherwise lead to a prolonged period
receiving nothing. By default, the SFD detection timeout is 65 symbol times (to match the default preamble
length of 64 symbols and a PAC size of 8). It is not recommended to disable the SFD detection timeout.
The SFD sequence is either 8 or 16 symbols long for the supported data rates of 6.8 Mb/s or 850 kb/s. The
type of the SFD sequence used is defined by SFD_TYPE configuration bits in CHAN_CTRL register, and are
described in Table 22.
STS reception
If the STS is enabled, see Figure 13, the receiver will construct another CIR from that. The time-of-arrival
(ToA) can also be derived from this CIR estimate.
The STS itself consists of a series of equally spaced pulses whose polarity is derived from an AES128 based
cryptographically secure pseudo random number generator as specified in the IEEE802.15.4z amendment.
This can help when constructing a secure ranging environment (see 6 Secure ranging / timestamping) and it
also improves immunity to packet collisions on the air.
PHR demodulation
The main role of the PHY Header (PHR) is to convey the length of the data portion of the packet, and to
indicate the data rate being employed for data demodulation. See paragraph 2.9 - PHY header and
paragraph 2.10 for details of the PHY header. For data rates of 850 kb/s and 6.8 Mb/s the PHR is modulated
/ demodulated as per the 850 kb/s data rate (note that because Reed Solomon encoding is not applied to
the PHR, its bit rate is approximately 1 Mb/s). If the PHR is indicating 850 kb/s then the data demodulation
continues at this rate, but if the PHR is indicating 6.8 Mb/s then the demodulation changes to this rate at the
end of the PHR as data demodulation begins.
It is also possible to configure the PHR rate to be the same as the data rate, i.e. to use 6.8 Mbit/s with
PHR_6M8 configuration bit in SYS_CFG, 8.2.2.4.
Data demodulation
Section 2.7 – Data modulation scheme describes the modulation scheme. In the receiver a Viterbi decoder is
used to recover the data bits (this is also used for PHR reception) which are then passed through the Reed
Solomon decoder to apply, if it can, any further corrections. Every octet thus received is passed through a
CRC checker that checks the frame against the transmitted FCS.
As the data octets are received they may also be parsed by the frame filtering function if enabled, see
section 5.4– Frame filtering for more details.
Successful reception of a frame is signalled to the host via the RXFR and RXFCG event status bits in
SYS_STATUS. Other status bits in this register may be used to flag reception of other parts of the frame or,
events indicating failure, i.e. RXPTO (Preamble detection Timeout), RXSTO (SFD timeout), RXPHE (PHY
Header Error), RXFSL (Reed Solomon error), RXFTO (Frame wait timeout), etc.
RX message timestamp
The IEEE802.15.4 standard [1] nominates the time when the RMARKER arrives at the antenna as the
significant event that is time-stamped, also shown in Figure 13.
The DW3000 digital receiver circuitry takes a coarse timestamp of the symbol in which the RMARKER event
occurs and adds in various correction factors to give a resultant adjusted time stamp value, which is the time
at which the RMARKER arrived at the antenna. This includes subtracting the receive antenna delay as
configured in the RXANTD register (in CIA_CONF) and adding the correction factor determined by the first
path (leading edge) detection algorithm embedded in the DW3000. The resulting fully adjusted RX
timestamp is written into RX_STAMP, IP_TOA and STS_TOA registers.
See also section 10.3 – IC calibration – antenna delay, and section 6 – Secure ranging / timestamping.
Depending on the variant of the device there will be one or two antenna ports. Devices with two antenna
ports are referred to as PDoA parts while the others are non-PDoA parts (see Table 1). The two variants
have different capabilities when it comes to Phase Difference of Arrival (PDoA) support.
For the “PDoA” parts, if the packet contains an STS then, depending on the configured mode, the device can
compute the PDoA. There are two methods for computing the PDoA: PDoA Mode 1 and PDoA Mode 3.
PDoA Mode 1 functions with any packet containing an STS but is less accurate than PDoA Mode 3. On
another side PDoA Mode 3 requires the STS length (in units of 512 chips, ~1 μs) to be an integer multiple of
128 (128, 256, 512). It is more accurate than Mode 1 but the packets will be longer (see PDOA_MODE in
SYS_CFG register on how to configure the required mode).
In either of the PDoA modes the chip will also compute the Time Difference Of Arrival (TDoA) between the
two channel estimates that are used to determine the PDoA. If this TDoA is large, e.g. greater than 1 ns,
then the PDoA should be considered to be untrustworthy. This is probably due to harsh channel conditions
resulting in an ambiguous first ray estimate.
The DW3000 remains in IDLE_PLL state until the system time (SYS_TIME) reaches the value programmed in
DX_TIME (or time programmed into DREF_TIME plus an offset into the DX_TIME) and then the IC receiver is
turned on. This point marks the start time for any programmed timeouts that apply to the reception
© Decawave Ltd 2019 Version 1.1 Page 41 of 255
DW3000 User Manual
process, i.e. the preamble detection timeout (which is set and enabled by PRE_TOC) and the frame wait
timeout (which is enabled by the RXWTOE configuration bit in Sub-register 0x00:10 – System configuration,
and whose period is programmed in RX_FWTO).
The benefit of delayed receive is that the receiver can be turned on at just the right moment to receive an
expected response, especially when that response is coming from a DW3000 employing delayed transmit to
send the response message at a precise time. This saves power because the IDLE_PLL state power
consumption while counting down to the time to perform the RX enable is significantly less than the RX state
power consumption while waiting and searching for the preamble of a packet reception.
One use of delayed receive, and especially delayed transmission, is in two-way ranging, (described in
APPENDIX 1: Two-way ranging), to control the response times. On the receive side turning on the receiver
just in time to receive the response message helps save power since the IC will remain in IDLE_PLL state until
it is time to turn on the receiver. Minimising the response time and time spent in IDLE_PLL state also saves
power. It is possible for the host microprocessor to be late invoking the delayed TX or RX, so that the system
clock is beyond the specified start time and then the IC would have to complete almost a whole clock count
period before the specified start time is reached. The HPDWARN event status flag in SYS_STATUS warns of
this “lateness” condition so that during development a delay may be chosen large enough to generally avoid
this lateness. The HPDWARN status flag also serves to facilitate detection of this late invocation condition so
that recovery measures may be taken should it ever occur in deployed product.
Note that double buffering can also be used with the SP3 packets, configured via the CP_SPC field in Sub-
register 0x00:10 – System configuration, where even though the packet contains no payload, the receive
timestamp and other diagnostic information is doubly buffered.
By default the DW3000 operates in a single buffered mode that is appropriate for many applications.
Double-buffered receiving is enabled by setting the DIS_DRXB bit to zero, (in Sub-register 0x00:10 – System
configuration).
The DW3000 is operated in double buffered mode without possibility of the automatic re-enabling of the
receiver, in which case the host needs to manually re-enable the receiver. However the receiver can be
enabled in advance of processing the previously received frame. This operation reduces the amount of time
for which the receiver is actively listening for frames on the air, but prevents both buffers being full (at the
same time) and prevents overflows. This simplifies the double-buffer operation, see sections 4.4.2 and 4.4.3
and, with a combination with a high-speed SPI enables reception of back-to-back frames.
In non-double buffer mode the DW3000 will write the received frame data into RX_BUFFER_0. When the
double buffer mode is enabled the DW3000 will alternate writing frames to RX_BUFFER_0 and
RX_BUFFER_1. The associated RX_FINFO and diagnostic data is stored in two register sets: SET_1 and SET_2
as listed in Table 44. The RDB_STATUS register informs the host which register set is ready and available. For
example, when RX_BUFFER_0 frame reception is complete the IC will set the RXFR0 with RXFCG0 in
RDB_STATUS register interrupting the host and the IC will move on to receive into the other buffer of the
double-buffered swinging-set. Once the host has finished accessing a register set is should issue toggle
buffer command, CMD_DB_TOGGLE, to let the IC know that the particular buffer is “free” again and that it can
be used for the next received frame. The host should also clear the RDB_STATUS register bits relating to the
processed buffer. Figure 17 below is a flow chart showing the operation of double buffering in the receiver.
Reception of a frame with good CRC will set the relevant RDB_STATUS register bits. The host will need to
respond to the RX error events as usual (by reading the SYS_STATUS register and clearing any events) and re-
enable the receiver.
Overrun
As in the DW3000 the double buffered mode is used without the automatic re-enabling of the receiver, in
which case the overrun should never happen. The host needs manually re-enables the receiver, it should
process the previously received frame before enabling receiver following the reception of the current frame.
In case of the overrun condition, it will be cleared as soon as the host issues the CMD_DB_TOGGLE command.
Following which the host should clear the RXOVRR status bit. Receiver overrun events are also counted in
Sub-register 0x0F:0E – RX overrun error counter, assuming that counting is enabled by the EVC_EN bit in
Sub-register 0x0F:00 – Event counter control.
Issue CMD_RX
to enable the receiver
Check RDB_STATUS
SET_1 or SET_2
Read the data in RX_BUFFER_B.
Read other registers of interest
from SET_2, e.g. FINFO, RX_TS
YES
Rx more frames?
NO
In SNIFF mode the DW3000 alternates between the RX state (on) and the IDLE_PLL (off) state Figure 18
shows a simplified view of the state transitions during SNIFF mode.
IDLE
Issue CMD_RX
In SNIFF mode the DW3000 alternates between the RX (on) and the IDLE_PLL (off) states. To enable SNIFF
mode two parameters SNIFF_ON (sniff on time) and SNIFF_OFF (the off time) need to be configured in Sub-
register 0x11:1A – SNIFF mode. The on duration is programmed in units of PAC, (these are described in
section 4.1.1 - Preamble detection), and must be set to at a minimum value of 2 for functional preamble
detection. The SNIFF_ON counter automatically adds 1 PAC unit to the total PAC count so the programmed
value should always be 1 less than the desired total. The off duration is programmed in units of 1 µs. When
both on and off durations are programmed with non-zero values SNIFF will be operational from the next RX
enable.
As an example if the PAC size is 8 symbols, (this is approximately 8 µs), and we want to have a 50:50 on-off
duty cycle, then we could set SNIFF_ON to its minimum of 2 PAC intervals (by programming the counter with
a value of 1) and the SNIFF_OFF to a value of 16 µs.
Figure 19 below shows the power profile associated with SNIFF mode where the IC wakes up from SLEEP and
progress into the repeated IDLE_PLL-RX-IDLE_PLL-RX… duty-cycle of the pulsed preamble detection mode. A
timeout ends this and the DW3000 is returned to SLEEP.
Figure 20 below, shows a power profile for SNIFF mode, similar to figure 19 except in this case preamble is
detected on the second period of RX sampling, and the DW3000 completes the reception of the packet.
4.6 Diagnostics
The DW3000 includes the following diagnostic aids: -
• The ability to drive LEDs to show TX and RX activity, which may be useful during product
development and in non-battery powered devices. The LED driving feature is an option on GPIO
lines, and is configurable via Register file: 0x05 – GPIO control and status. Please refer to the
register description for details of the supported functionality.
Access to accumulator – of use during product development diagnostics. This is provided via:
• Register file: 0x15 – Accumulator CIR memory. Please refer to its description for details.
• RX packet quality indications – of use for both product development diagnostics and for working
diagnostics, e.g. for network management or for deciding on confidence level for an RTLS or ranging
measurement. These are available through the diagnostics registers of Register files: 0x0C, 0x0D,
0x0E – CIA Interface. Please refer to section 4.7 – Assessing the quality of reception and the RX
timestamp for details.
The following details the elements of receive status reported by the DW3000 that may be used to assess the
quality of a received message and any related timestamp.
Note: These items use diagnostics provided by the channel impulse analyser (CIA) algorithm, which operates
on the accumulated correlation of the repeated symbols preamble sequence and/or the accumulated
correlation of the scrambled timestamp sequence (STS) used for secure timestamping, see § 6 – Secure
ranging / timestamping. The timestamps based on preamble and STS sequences can be assessed following
these rules:
• Each ToA has an associated status word, see section 8.2.13. This word contains the results of several
confidence tests on the first path estimate. If any of the bits in the status word is set, then the
corresponding confidence test has failed and so the conditions may have resulted in lower
confidence in the ToA.
• It is possible to compute an estimated receive power figure – for the purposes of this discussion this
will be called RX_POWER (see section 4.7.2). It is also possible to compute an estimated power for
just the first path signal – for the purposes of this discussion this will be called FP_POWER (see
section 4.7.1). Using these two calculations it may be possible to say whether the channel is line-of-
sight (LOS) or non-line-of-sight signal (NLOS).
• It is possible to compare the locations of the first path and the peak path in the CIR estimate. In LOS
channels the peak path will be close to the first path.
• Where possible the system should use a scrambled time sequence (STS). This allows the DW3000
produce at least 2 estimates of the CIR and so compute 2 independent ToA estimates. As both are
measuring the same physical parameter, they should be very close to each other. The CIA algorithm
will compute the difference between these estimates and test it against a predefined threshold. If
the difference is too great, then an error flag will be raised, and the ToA should not be trusted.
An estimate of the power in the first path signal may be calculated (in dBm). Depending on the receiver
configuration two different formulae are used to do this.
𝐹1 2 + 𝐹2 2 + 𝐹3 2
𝐹𝑖𝑟𝑠𝑡 𝑃𝑎𝑡ℎ 𝑃𝑜𝑤𝑒𝑟 𝐿𝑒𝑣𝑒𝑙 = 10 × log10 ( ) + (6 × 𝐷) − 𝐴 𝑑𝐵𝑚
𝑁2
If the RX_TUNE_EN bit is not set in DGC_CFG register, described in 8.2.4.1 (No DGC):
𝐹1 2 + 𝐹2 2 + 𝐹3 2
𝐹𝑖𝑟𝑠𝑡 𝑃𝑎𝑡ℎ 𝑃𝑜𝑤𝑒𝑟 𝐿𝑒𝑣𝑒𝑙 = 10 × log10 ( ) − 𝐴 𝑑𝐵𝑚
𝑁2
Where:
F1 = the First Path Amplitude (point 1) magnitude value (it has 2 fractional bits),
F2 = the First Path Amplitude (point 2) magnitude value (it has 2 fractional bits),
F3 = the First Path Amplitude (point 3) magnitude value (it has 2 fractional bits),
N= the number of preamble symbols accumulated, or accumulated STS length
D= the DGC_DECISION, treated as an unsigned integer in range 0 to 7
A= is the constant:
• 113.8 for a PRF of 16 MHz, or
• 121.7 for a PRF of 64 MHz Ipatov preamble or
• 120.7 for a PRF of 64 MHz STS.
The values for F1, F2, F3 and N can be read from the register file described in 8.2.13. F1, F2 and F3 can be
read from IP_DIAG_2, IP_DIAG_3, IP_DIAG_4, or STS_DIAG_2, STS_DIAG_3, STS_DIAG_4, or STS1_DIAG_2,
STS1_DIAG_3, STS1_DIAG_4, and N can be read from: IP_DIAG_12 , STS_DIAG_12 or STS1_DIAG_12,
depending on the CIR used. D is read from DGC_DECISION described in DGC_DBG register, see section
8.2.4.2.
Note: These readings will not be available if the CIA is configured to compute minimal diagnostics, see
MINDIAG bit in CIA_CONF register.
It is possible to calculate an estimate of the receive power level (in dBm). Depending on the receiver
configuration two different formulae are used to do this.
𝐶 × 221
𝑅𝑋 𝐿𝑒𝑣𝑒𝑙 = 10 × log10 ( ) + (6 × 𝐷) − 𝐴 𝑑𝐵𝑚
𝑁2
If the RX_TUNE_EN bit is not set in DGC_CFG register, described in 8.2.4.1 (no DGC):
𝐶 × 221
𝑅𝑋 𝐿𝑒𝑣𝑒𝑙 = 10 × log10 ( ) − 𝐴 𝑑𝐵𝑚
𝑁2
Where:
C= the Channel Impulse Response Power value,
N= the Preamble Accumulation Count value,
D= the DGC_DECISION, treated as an unsigned integer in range 0 to 7
A= is the constant:
• 113.8 for a PRF of 16 MHz, or
• 121.7 for a PRF of 64 MHz Ipatov preamble or
• 120.7 for a PRF of 64 MHz STS.
The values for C and N can be read from the register file described in 8.2.13. C can be found in: IP_DIAG_1,
STS_DIAG_1, or STS1_DIAG_1, and N can be read from: IP_DIAG_12 , STS_DIAG_12 or STS1_DIAG_12,
depending on the CIR used. D is read from DGC_DECISION described in DGC_DBG register, see section
8.2.4.2.
Figure 21 shows the typical relationship between the actual receive power and the power estimated by this
technique.
Note: Received signal power is sometimes referred by the term received signal strength indication (RSSI)
On the receive side, the DW3000 will validate the FCS of the received frame, and can parse frames
complying with IEEE802.15.4 standard [1] to validate and accept only those as configured by the frame
filtering configuration bits in the FF_CFG register (as described in section 5.4 below). The DW3000 can also
optionally respond to the acknowledgement request bit set in the frame control field, of correctly addressed
Data Frames or MAC Command frames, by sending an IEEE802.15.4 standard [1] acknowledgement frame
(as described in section 5.5 below). Note: This only applies to the immediate acknowledgment (Imm-Ack)
used to acknowledge Data frames or MAC command frames with the Frame Version field set to 0b00 or
0b01.
The DW3000 will deliver the received data frame in the RX_BUFFER_0 with its data length reported by the
RXFLEN field of the RX_FINFO, and other than the RX activities mentioned in the paragraph above the
DW3000 will not do any additional MAC level receive processing. It is up to the host system software to
correctly parse the received frame according to the IEEE802.15.4 standard [1] MAC definition and take
whatever additional action is prescribed by the standard, if this is required.
The MAC header is parsed by the DW3000 as part of the frame filtering function to determine if the
destination address matches the IC’s address information programmed in Sub-register 0x00:04 – Extended
Unique Identifier and Sub-register 0x00:0C – PAN Identifier and Short Address (or if the frame is a broadcast
message). This parsing of receive frame is based on the contents of the Frame Control field (at the start of
the MAC header).
PHY Payload
MAC Footer
MAC Header (MHR) MAC Payload
(MFR)
2 1 0 or 2 0, 2 or 8 0 or 2 0, 2 or 8 0, 5, 6 10 or 14 Variable number of 2
octets octet octets octets octets octets octets octets octets
The DW3000 also includes a CRC checking function capable of automatically calculating the 16-bit CRC frame
check sequence (FCS) during frame reception and comparing this calculated CRC with the final two octets of
the received frame to check that the calculated CRC matches with CRC transmitted by the frame’s originator.
A mismatch between received and calculated CRC typically indicates that the received frame contains errors
(generally handled by discarding the received frame). At the end of the frame reception as reported via the
RXFR event status bit, the result of the CRC comparison is reported by either RXFCG or the RXFCE status bit
being set, i.e. depending on whether or not the CRCs matched. These three status bits are SYS_STATUS.
Where a CRC is not required it is possible to disable the CRC transmission by employing the setting
DIS_FCS_TX (disable FCS transmission) bit in SYS_CFG. This might be done when using a different MAC layer
protocol.
1, 1, 1 Extended
The frame filtering functionality allows the IC to be placed into receive mode and only interrupt the host
processor when a frame arrives that passes the frame filtering criteria. When frame filtering is disabled all
frames with good CRC are accepted, typically to interrupt the host with event status indicating a frame has
been received with good CRC (i.e. the RXFR and RXFCG event status bits are set in SYS_STATUS). When
frame filtering is enabled the frame filtering rules have to be passed before these event status (interrupt)
bits are set. See section 4.1 PHY reception for general details of reception.
Frame filtering is enabled by the FFEN configuration bit in SYS_CFG register. The frame filter is further
configured by the various configuration bits in the FF_CFG register. This register contains ten additional
configuration bits (FFAB, FFAD, FFAA, FFAM, FFAR, FFAMP, FFAF, FFAE, FFBC and FFIB) for fine filtering
control of the frame types.
If frame filtering is enabled frames will be accepted or rejected based on the following rules:
• The particular frame type must be allowed for reception:
o The FFAB configuration bit must be set to allow a Beacon frame to be received.
o The FFAD configuration bit must be set to allow a Data frame to be received.
o The FFAA configuration bit must be set to allow an Acknowledgment frame to be received.
o The FFAM configuration bit must be set to allow a MAC command frame to be received.
o The FFAR configuration bit must be set to allow Reserved frames to be received, only a FCS
check is performed on these.
o The FFAMP configuration bit must be set to allow Multipurpose frames to be received.
o The FFAF configuration bit must be set to allow Fragmented/Frak frames to be received, only
a FCS check is performed on these.
o The FFAE configuration bit must be set to allow Extended frames to be received, only a FCS
check is performed on these
• If the frame is a Beacon frame then the Source PAN ID must match the PAN_ID programmed in
PANADR register, (or be 0xFFFF)
• If only the source address is present, in a data or MAC command frame, then the frame will only be
accepted if the IC is configured to be a coordinator, (via the FFBC configuration bit in FF_CFG) and
the Source PAN ID matches the PAN_ID programmed in PANADR register.
• If frame has no destination PAN ID and destination address, if will only be accepted (treated as
though it is addressed to the broadcast PAN ID and broadcast short (16-bit) address) if the device is
configured to allow implicit broadcast (via the FFIB configuration bit in FF_CFG).
The frame filtering does not take any notice of the Security Enabled field, in the frame control, so it is up to
the host software to decode any security information and accept/reject the frame is it sees fit.
The decisions on frame rejection/acceptance with respect to illegal frame control octets is made after the
first two octets of data are decoded, and at the end of reception of the address fields (as specified by the
frame control octets) for the relevant addressing rules. When a frame is rejected, the reception is aborted
immediately and the rejection is reported by the AFFREJ event bit in SYS_STATUS register.
While frame filtering can save some work on the part of the host system, prolonged listening with the
DW3000 receiver on is a relatively power-hungry activity best employed only on equipment with a mains
powered source.
All the configuration bits related to frame filtering are found in FF_CFG register.
Once the FFAA configuration bit is set, all acknowledgement frames are accepted, and the IC does not make
any distinction between the 5-octet Imm-Ack (with frame version of 0 or 1) or the more complex Enh-Ack
(with frame version of 2). It is up to the host software expecting an Enh-Ack to parse the received frame to
identify the Enh-Ack and validate its addressing and other fields accordingly.
When enhanced beacon frames are used, they will be accepted even if the beacon’s source PANID does not
match the one programmed in the device.
NOTE: For Multipurpose frames the IEEE standard [1] says that Frame version field values other than 0x00
are reserved. The DW3000 does not correctly check the Frame version field of received Multipurpose
frames. The host software MAC should validate the version of any Multipurpose frames received and handle
the frame accordingly.
• Frame filtering must be enabled and the received data or MAC command frame must be
correctly addressed and pass through the receive frame filtering, (see section 5.4 – Frame
filtering for details of frame filtering configuration).
• The ACK request bit in the frame control field of the received frame must be set.
• Auto-acknowledgement must be enabled by the AUTO_ACK configuration bit in SYS_CFG
register.
• The received frame is an Data frames or a MAC command frame with the Frame Version field set
to 0b00 or 0b01; the destination address and PAN ID matches the programmed PANID and
programmed short address or exrended addess; and, AR (Acknowledgement Request) bit is set.
When these conditions are met the DW3000 will at the end of the reception automatically transition into
transmit mode to send the 5-octet immediate acknowledgment (Imm-Ack) frame as defined by IEEE802.15.4
standard [1].
The enhanced acknowledgment (Enh-Ack) when called for by Data or a MAC command frames with the
Frame Version field set to 0b02, is not automatically generated. The host software is responsible for
decoding/desecuring these frame version 2 frames, interpreting any Information Elements (IEs), and
generating the Enh-Ack enhanced with any IEs necessary and securing it before transmission. The AAT bit
will not be set.
The IEEE802.15.4 standard [1] specifies a 12 symbol +/- 0.5 symbols turnaround time for ACK transmission.
In the DW3000 this period is configurable via the ACK_TIM parameter in ACK_RESP_T. It should also be
noted that running the CIA analysis will delay ACK response. To speed up ACK transmission FAST_AAT bit can
be set or where the RX timestamp is not required, the CIA analysis may be disabled by clearing both
CIA_IPATOV and CIA_STS configuration bits in Sub-register 0x00:10 – System configuration
The standard IEEE802.15.4 standard [1] MAC includes a frame pending bit in the frame control at the start
of each frame. This bit can be set to indicate more data is coming or in the case of acknowledging a Data
Request MAC command frame to indicate that the responding node has data to send to the node soliciting
the ACK. Please refer to the standard [1] for details of this. The DW3000 will automatically determine
whether to set the frame pending bit in the automatically-generated ACK frames based on:
Host notification
The AAT status bit (SYS_STATUS) indicates that an acknowledgement has been requested. When the
FAST_AAT bit is disabled the AAT bit is set at the same time as the RXFCG status event (indicating a good CRC
at the end of frame reception). However if FAST_AAT bit is enabled the AAT bit is set at the same time as the
RXFR status event.
If automatic acknowledgement is enabled then the AAT bit can be used during receive interrupt processing
to detect that acknowledgement is in progress and thus avoid taking any action until the transmission of the
acknowledgement is completed, and signalled by the TXFRS (Transmit Frame Sent) event.
Note: If automatic acknowledgement is not enabled, then the AAT status bit should be ignored.
Note: If the response that is received is a correctly addressed data (or MAC command) frame requesting an
acknowledgement, and assuming frame filtering and automatic acknowledgement are enabled, then the
DW3000 will transmit the ACK before it transitions into IDLE_PLL state.
DW3000 has a simple Clear Channel Assessment (CCA) mechanism feature that can be employed before a
packet transmission. It works by sample the air for a small amount of time (as configured by PRE_TOC) to see
if preamble can be detected, then if preamble is not seen the transmission is initiated, otherwise a failed
transmission is reported with CCA_FAIL event and the host can then defer the transmission typically for a
random back-off period after which transmission is again attempted with CCA.
DW3000 will return to IDLE_PLL for the back-off period and do not receive the packet whose preamble was
detected, since the MAC (and upper layer) wants to transmit and not receive at this time.
To transmit a packet with CCA check CMD_CCA_TX command is used. If the device has detected a clear
channel, the packet will be sent and TXFRS event reported. Although the detection of clear channel is as a
result of preamble timeout counter expiring, the RXPTO event will not be raised in this case.
Although the CCA can be used to avoid collisions with other packets on the air, the mechanism is only
looking for preamble thus will not detect PHR or data phases of the packet.
This CCA mechanism may have little benefit, but costs energy drain by turning on the receiver for a period
before every transmission. The aloha CCA mechanism of simply sending may be more efficient, since even in
collision cases message delivery can succeed. It is recommended that careful analysis and experimentation
be undertaken for the target use cases to decide on this point.
The AES engine performs encryption/decryption and authentication of data and can either perform the
operation within the same buffer or transfer the data (during the process) from one buffer to another (e.g.
from RX to TX, or from scratch buffer to TX or STS_KEY register).
The AES engine can also decrypt key data (i.e. an encrypted STS_KEY) into the STS_KEY register. This means
that the host can write encrypted STS_KEY over SPI into scratch RAM memory and then run the DW3000 AES
engine to decryp this into the STS_KEY register prior to use of the secure ranging modes (see6 Secure
ranging / timestamping).
RX buffer 0 RX buffer 0
(1024 B) (1024 B)
TX buffer TX buffer
(1024 B) (1024 B)
KEY selection
AES Configuration
Before the encryption or decryption of the data, the AES engine needs to be configured with:
• the MIC size (TAG_SIZE), which can be 0, 4, 6, 8, 10, 12, 14 or 16 bytes
• the KEY size (128, 192 or 256-bits) and location (KEY can be stored in DW3000 registers, or OTP, or
AES KEY RAM). If a KEY from DW3000 registers or AES KEY RAM is used then it needs to be written
to AES_KEY register or AES KEY RAM location.
• the type of operation (encryption or decryption)
• the type of AES core to use: GCM or CCM*
The following steps are taken to transmit an encrypted data (assuming above configuration steps are already
done):
• Write the IV value in the AES_IV registers: AES_IV0, AES_IV1, AES_IV2, and AES_IV3. GCM uses 96-bit
IV value and CCM* 128-bit.
• Specify source buffer (SRC_PORT) from which the plaintext data is taken and destination buffer
(DST_PORT) into which the encrypted data is placed.
• Load the selected AES key. When using CCM* mode, AES key must be loaded each time prior to
starting of AES engine. This key update is needed even if the key remains the same.
• Start the AES process (DMA + encryption) by setting the AES_START bit. Wait for AES_DONE or
AES_ERR status events.
© Decawave Ltd 2019 Version 1.1 Page 57 of 255
DW3000 User Manual
• Repeat the above steps to encrypt more data, e.g. when using the scratch buffer the max amount of
data that can be processed at a time is 127 bytes.
• Once complete, issue start TX command to transmit the encrypted data frame.
The following steps are taken to decrypt received encrypted data (assuming above configuration steps are
already done):
• Write the IV value in the AES_IV registers: AES_IV0, AES_IV1, AES_IV2, and AES_IV3. GCM uses 96-bit
IV value and CCM* 128-bit.
• Specify source buffer (SRC_PORT) from which the encrypted data is taken and destination buffer
(DST_PORT) into which the plain text data is placed. For example encrypted RX data is available in RX
buffer, which can then be decrypted into the same RX buffer.
• Load the selected AES key. When using CCM* mode, AES key must be loaded each time prior to
starting of AES engine. This key update is needed even if the key remains the same.
• Start the AES process (DMA + decryption) by setting the AES_START bit. Wait for AES_DONE or
AES_ERR status events.
• Read resulting plaintext RX data from the buffer
• Repeat the above steps to decrypt more data, e.g. when using the scratch buffer then the max amount
of data that can be processed at a time is 127 bytes.
• Configure the AES KEY, e.g. the host writes the desired AES KEY into the AES_KEY register.
• Configure the AES core type (CCM* or GCM), source and size of the KEY,
• Select encryption mode and MIC size
• Construct the nonce, and set up header and payload buffer pointers (source (SRC_PORT) and
destination (DST_PORT)). For example host can write plaintext data into the TX buffer and then
select the destination as the TX buffer and the data will be encrypted into the same buffer.
Otherwise host could write the plaintext data into the scratch memory and then instruct the AES
engine to encrypt it into the TX buffer.
• Run the AES engine and check status
• Transmit the encrypted packet
• Following good packet reception, the host needs to read the received data and check the frame
format, security and then configure the AES engine to decrypt the payload.
• Configure the AES KEY, e.g. the host writes the desired AES KEY into the AES_KEY register.
• Configure the AES core type (CCM* or GCM), source and size of the KEY,
• Select encryption mode and MIC size
• Construct the nonce, and set up header and payload buffer pointers (source (SRC_PORT) and
destination (DST_PORT)). For example host can set the destination to be the same as the source, i.e.
© Decawave Ltd 2019 Version 1.1 Page 58 of 255
DW3000 User Manual
the same RX buffer. This allows the encrypted data in the buffer to be overwritten by the decrypted
(plaintext) data.
• Run the AES engine and check status
• Read out the decrypted data
These are the steps to decrypt encrypted STS KEY (transferred over SPI into the scratch buffer) into the
STS_KEY register e.g. prior to transmission or reception of packets with STS:
• The host and DW3000 should have same AES KEYs programmed (they should be paired). The
DW3000 KEY is stored in OTP.
• The host would then encrypt the STS KEY and transfer it over SPI into the scratch buffer, there
should be no header but the MIC should be present
• Configure the AES core type (CCM* or GCM), source and size of the KEY, and the MIC size
• Construct the nonce, and set up header and payload buffer pointers (source and destination). The
source (SRC_PORT) is the scratch buffer and destination (DST_PORT) STS_KEY register.
• Run the AES engine and check AES status events (AES_DONE, AES_ERR)
Consider a following example. A Secure Element host (SE) which derives STS KEY (prior to encryption) as:
sts_key[16] = {0xaa, 0xbb, 0xcc, 0xdd, 0x11, 0x22, 0x33, 0x44 …. 0x55, 0x66, 0x77, 0x88}, i.e. the 128-bit
STS_KEY = 0xaabbcc.....667788.
The SE encrypts this STS_KEY (with STS KEY encryption KEY (STS_KEK)) and writes it into the device (scratch
buffer), then the device needs to decrypt it with a matching STS_KEK from e.g. OTP and write the decrypted
STS KEY into STS KEY registers (STS_KEY).
The DMA engine inside AES block can be configured as either big endian (CP_END_SEL = 0) or little endian
(CP_END_SEL = 1), see DMA_CFG register. When big endian is used, the MSB of the STS KEY is in the lowest
address otherwise the MSB is the highest address.
Considering, as an example, if sts_enc = {0xaa, 0xbb, 0xcc, 0xdd, 0x11, 0x22, 0x33, 0x44 …. 0x55, 0x66, 0x77,
0x88}, 0xaa is sent first to AES engine. Thus the data is with big endian format and is decrypted into STS_KEY
register as shown in Table 14 (0xaa is in the lowest address location):
Table 14: Decrypted STS KEY bytes (with big endian format)
Address Value
02:0C 0xaa 02:14 0x00
For the little endian format, the STS KEY data will look like, as shown in Table 15 (0xdd is in the lowest
address location):
Table 15: Decrypted STS KEY bytes (with little endian format)
But what wis actually required is that the STS KEY data looks like, as shown in Table 16:
Table 16: Decrypted STS KEY bytes (with little endian format and swapped by SE prior to encyption)
Thus the SE must re-arrange the data before encryption, the bytes (of the derived STS KEY) need to be
swapped: byte[15]=byte[0]; byte[14]=byte[1] etc... prior to encryption with STS KEK.
When specifying a source and destination buffer address (and offset within the buffer) the buffer size should
be sufficient for the DMA transfer. If the size is smaller than the transfer, the DMA transfer error (AES_ERR)
may not be correctly flagged by the device. In some circumstances the internal AES block can lock up and the
only way to recover is to perform a reset of the device (soft or hard)).
To avoid such errors it is require to always ensure that the buffers and sizes of transfers should be properly
configured, i.e.:
Header length + Payload length + MIC length < Total buffer size.
The timestamping ability of the DW1000 is based on accumulated correlation of the repeated symbols of the
802.15.4 standard preamble sequence. Please refer to the IEEE 802.15.4 standard [1], for more details of
the packet format. When the SFD is detected a coarse receive timestamp is taken and then the accumulator
state, which essentially provides the radio channel impulse response, CIR, is used to find the first arriving ray
of RF energy and adjust the RX timestamp to give the sub-nanosecond precision achieved by the IC.
Since the CIR accumulation is based on a repeated symbol of a known sequence of pulses defined by
preamble code, it is possible for an attacker to send this same symbol (set of pulses) with a time offset which
makes it appear like an earlier arriving ray in the CIR, and thus confuse the IC into reporting an earlier arrival
time for the message. This could, for instance, foreshorten a ranging result, thus fooling an access system
into thinking the user is closer than he actually is.
To remove the possibility of such an attack the DW3000 has the ability to include a scrambled sequence in
the packet, which can be used to obtain an RX timestamp that cannot be attacked in this way. This
scrambled timestamp sequence (STS) is generated in accordance with the IEEE 802.15.4z amendment [2],
and consists of a sequence of randomised pulses generated by an AES-128 CPRNG (cryptographic pseudo-
random number generator) block in counter mode. This is also termed a deterministic random bit generator
(DRBG). Only valid transmitters and receivers know the correct seed (i.e., key and data) to generate the
sequence for transmission and for reception to cross correlate and accumulate to produce a CIR estimate
from which to determine the RX timestamp.
When the STS modes are enabled the DW3000 transmitter will insert the STS in the position shown in Figure
13, and the receiver will expect it to be present accordingly. The STS is generated by the AES-128 block
output and is determined by a seed consisting of a 128-bit key, and a 128-bit nonce (a number that should
only be used once). The nonce is updated during the STS generation by incrementing the counter once for
every 128 pulses produced. When transmitting and receiving devices are using aligned seeds (i.e., same key
and nonce) with the counter values aligned, the receiver generates a secure version of the CIR by correlating
with the matching scrambled pulse sequence. The resultant timestamp is thus secure against attack.
As shown in Figure 24, the STS consists of an active segment bracketed at either end by a gap (of 512 chips
or approx. 1 μs). The length of the STS (active segment) is specified in units of 512 chips (~1 μs). In BPRF
mode, where the STS pulse spacing is 8 chips, the mandatory STS length of 64 units has an active segment of
4096 pulses. For convenience we sometimes call this 512-chip (~1 μs) period an STS symbol.
• STS Packet Configuration mode 1 has the STS directly after the SFD which means it is early (and in a
deterministic position). This allows the CIA to start processing the STS CIR earlier (assuming it is not
processing the preamble CIR), while the IC continues to receive the PHR and the data payload. This
mode saves time and energy (as compared to configuration mode 2). However data reception
performance may be poorer when there is a misalignment of the STS sequences, i.e., where the
transmitter’s seed info (including counter) does not match the receiver’s giving poor correlation.
• STS Packet Configuration mode 2 has the STS at the end of the packet. This has the benefit that the
receiver can receive the data as normal even if it has misalignment of the STS sequence generation
seeds between the transmitter and the receiver. Also the packets by a device using this mode can
be received by a device employing the original IEEE802.15.4 standard [1] UWB packet structure,
which might be an advantage in some circumstances. In using STS Packet Configuration mode 2 the
frame payload can carry information allowing the receiving node to determine the correct alignment
of the STS generation seed (key + nonce data) that it can use to achieve alignment for future
messages. Obviously, transmission of sensitive information like the STS key and nonce counter state
needs to be encrypted/protected so that an attacker cannot learn this secret.
N.B. In this mode, for correct operation it is required that the data length is non-zero.
Note: This mode can potentially be attacked. The mechanism has the attacker corrupting the true
PHR to signal a longer data payload than the true payload, adding data payload after the true
payload making sure that the CRC of the longer frame is correct, while also recording the true STS of
the valid transmitter and playing it at the end of the longer payload but altering its alignment so that
it appears to arrive earlier in time resulting in a shorter time-of-flight estimate than would otherwise
be the case. This attack can be easily thwarted by: (a) ensuring that the true message length always
known, i.e. the length is either a constant or is included securely encrypted in the frame data
payload, and then (b) having the receiver discard and ignore frames of the wrong length. Simply
encrypting the data payload should also be sufficient to thwart this attack, because, since the
attacker does not know the encryption key, it will be unable to generate a valid MIC (message
integrity check code) for the longer data payload, and then the receiver’s incoming security
processing should simply discard and ignore the invalid frame.
• STS Packet Configuration mode 3 has STS directly after the SFD (similar to configuration mode 1),
however in this mode the UWB packet ends with STS and there is no PHR or PHY payload (MAC
frame) following. This could save time and energy (as compared to configuration modes 1 and 2).
The STS packet configuration is configured via the CP_SPC field in Sub-register 0x00:10 – System
configuration.
The STS length is configured via the CPS_LEN field in the STS_CFG register. The STS length is programmable
in steps of 8 units (i.e., each step is ~8 µs, or 8 x 512 chips). The minimum length supported is 32 and the
maximum supported length is 2048. The IEEE 802.15.4z mandates only a single length of 64 x 512 chips, (or
64 x 64 pulses @ 64 MHz PRF), which is approximately 64 µs duration. As noted the equivalent PRF during
STS is 64 MHz.
The 128-bit STS key is programmed into STS_KEY, while the 128-bit initial value for the nonce is loaded into
the device via STS_IV.
When the DW3000 is enabled to transmit or receive a packet incorporating an STS, the AES-128 block
generates a randomised set of pulses of positive and negative polarity, the CPRGN is shown in Figure 25
below, advancing the counter by one step for every 128 pulses generated. The counter would thus advance
by 32 for each completed transmission, or reception, of the IEEE 802.15.4z mandated 64 x 64 pulse BPRF
mode STS.
To achieve secure ranging/timestamping both parties of a two-way ranging exchange should be configured
the same way, i.e. to use the same STS length and the same key and nonce values for the generation of their
STS sequences.
Incremented once
per 128 bits output
32bit counter
Since the counter automatically advances as the STS is generated in the transmitter and receiver, the
counter state in two units can remain aligned as messages are sent and received in a typical two-way ranging
exchange. Where alignment is lost, or to maintain alignment in multi-node systems the counter state
should be reprogrammed by the setting the new value into the STS_IV register. Optionally, the counter state
could be sent from one device to another to update the STS_IV register. Clearly any communication of the
seed (key and/or IV) would have to be done securely to avoid them becoming known to an attacker. Note
also that during transmission and reception of the STS the state of the counter may be in flux as it generates
the scrambled sequence, so before any reading or writing of the STS_IV register, it is recommended that the
DW3000 is not active with any transmission and reception activities.
When STS is included in the packet there are two separate accumulations of CIR in the receiver. The first
accumulation occurs during the preamble reception and the second occurs during the STS reception. Both
these CIR may be read through Register file: 0x15 – Accumulator CIR memory. Access to the CIR data is not
needed for ranging measurements, however this ACC_MEM may be of interest to the system design
engineers to visualise the radio channel for diagnostic purposes.
The accurate receive timestamp for a received packet is computed by finding the first arriving path or ray
within the accumulated CIR, which is the function of the leading edge algorithm, also called the channel
impulse analyser (CIA) algorithm. This algorithm processes the CIR (in the accumulator) to find the leading
edge and estimate the RX timestamp for a received packet. The CIA may be applied to CIR resulting from
preamble and/or STS sequences. The CIA is configured and controlled through the Sub-registers in
CP_CONF0, CP_CONF1, IP_CONF0 and IP_CONF1.
Assuming it is enabled, once both the preamble and STS CIRs have been received, the CIA begins running on
the preamble first followed by the analysis of the STS CIR. The CIA delivers the receive timestamp for a
received packet through the RX_STAMP field in Sub-register 0x00:64 – Receive time stamp. To ensure the
integrity of the receive timestamp based on the STS, the user must check that the CP_TOAST quality status
indicator (in CP_TS) is not indicating any issues with the STS CIR analysis.
NB: The host should not attempt to read ACC_MEM until the CIA has finished its processing, (as signalled by
the CIADONE event status flag), since this may give rise to a conflict with the CIA accesses to the CIR memory
which may interfere with the generation of a good RX timestamp result.
Note: It is also very important to assess that quality of the STS accumulation before accepting that a receive
timestamp CP_TOA value is sufficiently good enough to be trusted in a two-way ranging exchange. This is a
unitless value that summarizes the results of the STS quality algorithm that is monitoring the reception of
the STS. For high signal levels this measurement should be very high but its value will reduce as the signal
level reduces. An ACC_QUAL value (in STS_STS) that is <60% of the STS length indicates that the reception of
the STS was too poor for the first path analysis to obtain a reliable ToA and so the received timestamp based
on STS should not be trusted.
For example for a preamble sequence using 64 MHz PRF (i.e. TX_PCODE is in range 9-12) and an STS length of
128 (i.e. CPS_LEN is set to 15), the STS based receive timestamp (CP_TOA) value should only be trusted when
the STS accumulation quality (CPS_ACCQUAL) value is greater than ≥ 77 (i.e. 60 % of 128).
As mentioned above STS uses a continually varying sequence. This means that a colliding packet will not line
up with the desired signal. As a result, the ToA will be unaffected. If security is not a concern, then overhead
of key management and counter control is undesirable. For this reason, the DW3000 includes a special STS
mode that uses a code optimized for ToA performance. This is known as the Super Deterministic Code
(SDC). If SDC is enabled (by CP_SDC bit), then the STS will be populated with the SDC code. Since it is a time
varying sequence optimized for ToA performance it will better tolerate packet collisions without requiring
any key management.
It is important to remember that the SDC mode does not provide security but will increase confidence in the
ToA when the on-air packet density is high. For this reason, we would recommend that an SDC based STS is
used when security is not a requirement.
a) The ability to reset the internal system counter in a deterministic way with respect to the assertion
of the SYNC input pin and an external 38.4 MHz clock supplied on the EXTCLK pin.
b) The ability to initiate the transmission of a packet in a deterministic way with respect to the
assertion of the SYNC input pin and an external 38.4 MHz clock supplied on the EXTCLK pin.
SYNC
External
Clock
SYNC
The SYNC input pin must be source synchronous with an external 38.4 MHz frequency reference clock
supplied on the EXTCLK pin. The SYNC input pin is sampled on the rising edge of EXTCLK. Refer to the
DW3000 Datasheet for setup and hold times of the SYNC pin. The SYNC input provides a common reference
point in time to synchronise the DW3000 with the accuracy necessary to achieve high resolution location
estimation.
One Shot Timebase Reset (OSTR) mode allows a reset to be applied to the timebase counter used for
timestamping in DW3000 at a deterministic and predictable time relative to a synchronisation event. Any
given device will reset the counter at a repeatable time to within 300ps (typically less than 100ps) variation.
Process variation between parts introduces a deterministic error that can be calibrated out as part of the
necessary calibration process to compensate for cable transmission delays in a wired synchronization
system. When several DW3000s are driven by the same reference clock and an external SYNC signal, their
internal timebases can be synchronised very accurately (allowing for the deterministic delays associated with
the distribution network for the reference clock and SYNC signal).
To configure DW3000 for OSTR mode, the OSTR_M bit in the EC_CTRL register is set and the OSTS_WAIT
value is set to the desired delay value. When a counter running on the 38.4 MHz external clock and initiated
© Decawave Ltd 2019 Version 1.1 Page 66 of 255
DW3000 User Manual
on the rising edge of the SYNC signal equals the OSTS_WAIT programmed value, the DW3000 timebase
counter will be reset. See Register file: 0x04 – External sync control and RX calibration for register details.
At the time the SYNC signal is asserted, the clock PLL dividers generating the DW3000 124.8 MHz system
clock are reset to ensure that a deterministic phase relationship exists between the system clock and the
asynchronous 38.4 MHz external clock. For this reason, the OSTS_WAIT value programmed will dictate the
phase relationship and should be chosen to give the desired phase relationship, as given by OSTS_WAIT
modulo 4. An OSTS_WAIT value of 33 decimal is recommended, but if a different value is chosen it should be
chosen so that OSTS_WAIT modulo 4 is equal to 1, i.e. 29, 37, and so on.
Care should be taken when using this feature to ensure that necessary regulatory requirements have been
fulfilled.
There is a separate application note giving details of the external power amplification. This includes the
circuit diagram, details of configuration and various design considerations that apply. Please consult with
Decawave’s applications support team for details.
For example, an OTP memory area is reserved for customers to programme the EUI that is loaded into
EUI_64 as the IC comes out of reset (see EUI_64 for details of the EUI functionality).
This section lists the OTP memory areas defining their functionality and describes the algorithm for
programming values into the OTP memory, and how to read values from the OTP memory. Access to OTP
memory is achieved using Register file: 0x0B – OTP memory interface.
The OTP memory locations are as defined in Table 17. The OTP memory locations are each 32-bits wide, OTP
addresses are word addresses so each increment of address specifies a different 32-bit word.
Address Size Byte [3] Byte [2] Byte [1] Byte [0] Programmed
(Used By
Bytes)
0x00 4
64 bit EUID Customer
0x01 4
0x02 4
Alternative 64bit EUID (Selected via reg/SR register) Customer
0x03 4
0x04 4
LDOTUNE_CAL Prod Test
0x05 4
0x06 4 {“0001,0000,0001”, “CHIP ID 5 nibbles (20 bits)”} Prod Test
0x07 4 {“0001” , “LOT ID – 7 nibbles (28bits)”} Prod Test
0x08 4 - Vbat @ 3.0 V Vbat @ Vbat @ 1.62 V
[23:16] 3.62 V [15:8] [7:0] Prod Test
0x09 2 Temp @ 22 °C
+/- 2 °C [7:0] Prod Test
0x0A 0 BIASTUNE_CAL Prod Test
0x0B 4 Antenna Delay – RFLoop
Prod Test
0x0C 4 AoA Iso CH9 AoA Iso CH9 AoA Iso CH5 AoA Iso CH5
RF2->RF1 RF1->RF2 RF2 -> RF1 RF1->RF2 Prod Test
0x0D 0 W.S. Lot ID [3] W.S. Lot ID W.S. Lot ID W.S. Lot ID [0]
[2] [1] Prod Test
0x0E 0 W.S. Lot ID W.S. Lot ID [4]
[5] Prod Test
0x0F 0 W.S. Wafer
W.S. Y Loc W.S. X Loc
Number Prod Test
0x10 4 Customer
0x11 4 Customer
0x12 4 Customer
0x13 4 Customer
0x14 4 Customer
0x15 4 Customer
0x16 4 Customer
0x17 4 Customer
0x18 4 Customer
0x19 4 Customer
0x1A 4 Customer
0x1B 4 Customer
0x1C 4 Customer
0x1D 4 Customer
0x1E 2 XTAL_Trim[6:0] Customer
0x1F OTP Revision Customer
0x20 4 RX_TUNE_CAL: DGC_CFG0 Prod Test
0x21 4 RX_TUNE_CAL: DGC_CFG1 Prod Test
0x22 4 RX_TUNE_CAL: DGC_CFG2 Prod Test
0x23 4 RX_TUNE_CAL: DGC_CFG3 Prod Test
The QSR (“Special function register”) is a 32-bit segment of OTP that is directly readable via the register
interface upon power up. To program the SR register follow the normal OTP programming method but set
the OTP address to 0x60. As this is part of OTP boot sequence the new value will be present in the QSR
register following the next boot up sequence.
The various tune values (LDOTUNE_CAL, BIASTUNE_CAL etc.) can be automatically loaded from OTP into the
respective registers. This will ensure the device is using optimal calibration and tuning parameters for given
configurations. The automatic loading (kicking) of these values is described insection 8.2.12.3 Sub-register
0x0B:08 – OTP configuration.
It is left up to the customer, but in Decawave’s evaluation kits which have been calibrated, the XTAL_Trim
and OTP Revision values are programmed into OTP memory addresses 0x1e and 0x1f. Then in the
dwt_initialise() API [3] the XTAL trim value is copied to XTAL_TRIM.
The programming of the OTP requires a sequence of steps please see API functions [3].
The reading of an OTP memory address consists of a number of steps. Please see the API function [3]:
dwt_otpread(uint16 address, uint32 *array, uint8 length) of how to read OTP memory.
• The VWARN event flag bit in SYS_STATUS. If a brownout event is detected this bit will get set and it
will remain set until it is explicitly cleared by writing a 1 to it, or the IC is reset.
• The VWARN event can also be used to trigger an interrupt to the host microprocessor if the
corresponding mask bit, VWARN_EN, is set in Sub-register 0x00:3C – System event enable mask.
Enabling the voltage comparator will set the VWARN event flag bit in SYS_STATUS register. This initial
VWARN event should be ignored and the event flag should be cleared (by writing 1 to VWARN). Subsequent
VWARN events will signal drop in the supply voltage.
Note: When writing to any of the DW3000 registers care must be taken not to write beyond the
documented length of the selected register and not to write to any of the reserved register locations. Doing
so may cause the device to malfunction.
ID Mnemonic Description
0x00 GEN_CFG_AES This is the main register bank and
– Advanced Encryption Standard
0x01 configuration set of registers
0x02 STS_CFG Scrambled timestamp sequence
configuration
0x03 RX_TUNE RX tuning register
0x04 EXT_SYNC External synchronisation control
0x05 GPIO_CTRL GPIO control registers
0x06 DRX Digital receiver tuning and configuration
0x07 RF_CONF Analog RF configuration
0x08 RF_CAL Transmitter calibration block
0x09 FS_CTRL Frequency synthesiser control block
0x0A AON Always-On register set
0x0B OTP_IF One Time Programmable memory interface
0x0C CIA Channel Impulse Analysis control and
– diagnostic block
0x0E
0x0F DIG_DIAG Digital diagnostics
0x11 PMSC Power Management System Control block
0x12 RX_BUFFER_0 Receive data buffer
0x13 RX_BUFFER_1 Second receive data buffer
0x14 TX_BUFFER Transmit data buffer
ID Mnemonic Description
0x15 ACC_MEM Read access to Channel Impulse Response
data
0x16 SCRATCH_RAM Scratch RAM
0x17 AES RAM AES key RAM
0x18 SET_1, SET_2 Double buffer diagnostic sets
0x1D INDIRECT_PTR_A Indirect pointer A buffer
0x1E INDIRECT_PTR_B Indirect pointer B buffer
0x1F IN_PTR_CFG Indirect pointer access configuration, and
“fast” status register
Section 8.1 gives an overview of the DW3000 register set presenting all top level register file addresses in
Table 18. This section describes in detail the contents and functionality of these register files and their sub-
registers in separate sub sections. In each case the row from Table 18 is reproduced with a hexadecimal
register ID, its length, type, mnemonic and one line description as follows:
Length
ID Type Mnemonic Description
(octets)
This is followed by a description of the parameters within that register file. All parameters are presented
with format REG:RR:SS, where RR is register file ID (5-bits) and SS (7-bits) is the sub address. Where a
register is made up of individual bits or bit-fields these are identified with mnemonic and default values as
follows:
Because many parameters are 4-octets long, the default presentation of the register values is as a 32-bit
value. This may be sub-divided into fields of various bit widths down to single bit values. It should be noted
that when reading these values via the SPI interface the octets are output least significant octet first. Also of
note is that the indexed addressing modes allow individual octets to be accessed – a technique that may be
employed to reduce SPI traffic when only part of a register needs to be read or written to.
Note: unused or reserved registers return 0xDEADDEAD when read. Unused or reserved bits/ bit fields
within registers return the appropriate bits / bit fields from 0xDEADDEAD.
Length
ID Type Mnemonic Description
(octets)
0x00 – 121 - GEN_CFG_AES This is the part of the main register bank and Advanced
0x01 Encryption Standard configuration
Register map register files 0x00 and 0x01 are concerned with the use of the various device configurations
and AES block configuration. It contains a number of sub-registers. An overview of these is given by Table 19.
Each of these sub-registers is separately described in the sub-sections below.
Register OFFSET
file ID in Mnemonic Description
Register
0x00 0x00 DEV_ID Device Identifier
0x00 0x04 EUI_64 Extended Unique Identifier
0x00 0x0C PANADR PAN Identifier and Short Address
0x00 0x10 SYS_CFG System Configuration
0x00 0x14 FF_CFG Frame Filter Configuration
0x00 0x18 SPI_RD_CRC SPI CRC read status
0x00 0x1C SYS_TIME System Time Counter
0x00 0x24 TX_FCTRL Transmit Frame Control
0x00 0x2C DX_TIME Delayed Send or Receive time
0x00 0x30 DREF_TIME Delayed Send or Receive Reference time
0x00 0x34 RX_FWTO Receive Frame Wait Timeout period
0x00 0x38 SYS_CTRL System Control
0x00 0x3C SYS_ENABLE System Event Enable Mask
0x00 0x44 SYS_STATUS System Event Status Register
0x00 0x4C RX_FINFO RX Frame Information
0x00 0x64 RX_TIME Receive Time Stamp
0x00 0x74 TX_TIME Transmit Time Stamp
0x01 0x00 TX_RAWST Unadjusted/raw TX timestamp
0x01 0x04 TX_ANTD 16-bit Delay from Transmit to Antenna
0x01 0x08 ACK_RESP_T Acknowledgement Time and Response Time
0x01 0x0C TX_POWER TX Power Control
0x01 0x14 CHAN_CTRL Channel Control Register
0x01 0x18 LE_PEND_01 Low Energy device address 0 and 1
0x01 0x1C LE_PEND_23 Low Energy device address 2 and 3
0x01 0x20 SPI_COLLISION SPI Collision Status
Register OFFSET
file ID in Mnemonic Description
Register
0x01 0x24 RDB_STATUS RX Double Buffer Status
0x01 0x28 RDB_DIAG RX Double Buffer Diagnostic Configuration
0x01 0x30 AES_CFG AES Configuration
0x01 0x34 AES_IV0 The 3rd IV word for the AES GCM/CCM* core
0x01 0x38 AES_IV1 The 2nd IV word for the AES GCM/CCM* core
0x01 0x3C AES_IV2 The 1st IV word for the AES GCM/CCM* core
0x01 0x40 AES_IV3 The 4th IV word for the AES GCM/CCM* core
0x01 0x44 DMA_CFG The DMA Configuration Register
0x01 0x4C AES_START Start AES operation
0x01 0x50 AES_STS The AES Status
0x01 0x54 AES_KEY The 128-bit KEY for the AES GCM/CCM* core
Length
ID Type Mnemonic Description
(octets)
00:00 4 RO DEV_ID Device Identifier – includes device type and revision
information
Register file: 0x00-0x1 – General configuration registers, sub-register 0x00 is the device identifier. This is
hard-coded into the silicon. The value in this register is read-only and cannot be overwritten by the host
system. The device ID will be changed for any silicon updates. It is expected that the host system will
validate that the device ID is the expected value, supported by its software, before proceeding to use the IC.
The DEV_ID register contains the following sub-fields:
The fields of the DEV_ID register identified above are individually described below:
RIDTAG Register Identification Tag. It is planned that this will remain constant for all Decawave
parts. The value is 0xDECA in hex.
reg:00:00
bits:31–16
For the production DW3000 the Device ID is set to 0xDECA0312 or 0xDECA0302. The register descriptions
in this user manual relate to that DW3000 device and are not valid for any earlier sample parts.
Length
ID Type Mnemonic Description
(octets)
00:04 8 RW EUI_64 Extended Unique Identifier – the 64-bit IEEE device address
Register file: 0x00-0x1 – General configuration registers, sub-register 0x04 of register file 0x00 is the
Extended Unique Identifier register. For IEEE802.15.4 standard [1] compliance every device should have a
unique 64-bit device identifier. The high-order 24-bits of the EUI are a company identifier assigned by the
IEEE Registration Authority, (see http://standards.ieee.org/develop/regauth/oui/), to the manufacturer. The
low 40-bits of the EUI are the extension identifier uniquely chosen by the manufacturer for each device
manufactured and never repeated. The resultant EUI is a globally unique identifier. It is expected that
manufacturers who need to comply with this requirement will register with the IEEE Registration Authority
and generate and maintain their own EUI extension identifier numbering space to ensure its uniqueness for
every device made.
Manufacturers may store the EUI externally to the DW3000 or as an alternative the DW3000 has a one-time-
programmable memory area that may be programmed with the EUI during product manufacturing. Please
refer to section 7.3 – Using the on-chip OTP memory for details of programming values into OTP.
If needed the host can read the value from the OTP and program it into this EUI register.
Certain IEEE802.15.4 standard [1] defined frames use a 64-bit source address. The software (MAC)
generating such frames is expected to insert the EUI within the frame before the frame is written to the
DW3000’s transmit buffer.
The EUI register is used by the Receive Frame Filtering function, see section 5.4 details. When frame filtering
is operational the DW3000 decodes each received frame according to the IEEE802.15.4 standard [1] MAC
rules and any 64-bit destination address present must match the EUI register before the frame will be
accepted.
The 8-octets of the Extended Unique Identifier may be accessed as a single 8-octet access to the EUI register
file starting at index 0. The bytes of the EUI are output/input in the following order:
The ordering of octets read from the Extended Unique Identifier register is designed to be directly
compatible with the octet ordering of the 64-bit source address fields of IEEE802.15.4 standard [1] MAC
frames easing the task of inserting it into a frame for transmission.
Length
ID Type Mnemonic Description
(octets)
00:0C 4 RW PANADR PAN Identifier and Short Address
Register file: 0x00-0x1 – General configuration registers, sub-register 0x0C of register file 0x00 contains two
16-bit parameters, the PAN Identifier and the Short Address. When the DW3000 is powered up or reset both
the PAN Identifier and the Short Address in this register are reset to the value 0xFFFF. The host software
(MAC) should program the appropriate values into this register if it wishes to use the DW3000’s receive
frame filtering or automatic acknowledgement generation functions.
In an IEEE802.15.4 standard [1] personal area network (PAN), the PAN coordinator node determines the PAN
Identifier for the network, and assigns it and short 16-bit addresses to devices (nodes) associating with the
PAN. The nodes in the PAN then should (at the MAC layer) use their assigned short address as the source
address and include it along with the PAN Identifier in the frames they transmit. When a node receives a
frame it should only process those with a destination address and PAN Identifier which matches their
assigned node address and network ID.
When the receive frame filtering and automatic acknowledgement functionality is operational the DW3000
decodes each received frame according to the IEEE802.15.4 standard [1] MAC specification and when it
determines that a 16-bit destination address is present in the frame, the DW3000 will compare the
destination address with the short address value programmed in this register before
accepting/acknowledging the frame, and will similarly only accept received frames when the PAN Identifier
in the frame matches the PAN Identifier programmed in this register. See sections 5.4 and 5.5 for details of
the frame filtering and automatic acknowledgement functionality.
The host software (MAC) only needs to program this register if it is using the DW3000’s receive frame
filtering and automatic acknowledgement generation functions. The sub-fields are:
Field Description of fields within Sub-register 0x00:0C – PAN Identifier and Short Address
SHORTADDR Short Address. The host software needs to program this register if it is using the
DW3000’s receive frame filtering functionality, with or without the automatic
reg:00:0C
bits:15–0
acknowledgement generation function. The short address is typically assigned to a node
by the coordinator function at MAC (or higher) layer as part of network association. The
value may alternatively be pre-defined in a closed network where the network association
phase is being skipped.
PAN_ID PAN Identifier. The host software needs to program this register if it is using the
DW3000’s receive frame filtering functionality, with or without the automatic
reg:00:0C
bits:31–16
acknowledgement generation function. The PAN ID is typically assigned as part of
network association. A predefined PAN ID might be used in a closed network where the
network association phase is being skipped.
Length
ID Type Mnemonic Description
(octets)
00:10 4 RW SYS_CFG System configuration bitmap
Register file: 0x00-0x1 – General configuration registers, sub-register 0x10 of register file 0x00 is the system
configuration register. This is a bitmapped register. Each bit field is separately identified and described
below. The SYS_CFG register contains the following bitmapped sub-fields:
CIA_IPATOV
PHR_MODE
DIS_FCS_TX
AUTO_ACK
SPI_CRCEN
FAST_AAT
DIS_DRXB
PHR_6M8
RXWTOE
RXAUTR
DIS_FCE
CIA_STS
CP_SDC
CP_SPC
FFEN
- - - - - - - - - - - - -
-
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0
The fields of the SYS_CFG register identified above are individually described below:
The RX timestamp estimate resulting from running the CIA on the preamble CIR is written
to the IP_TOA field in Sub-register 0x0C:00 – Preamble receive time stamp and status,
and also to the RX_STAMP field in Sub-register 0x00:64 – Receive time stamp but in
packet configurations containing an STS, (and when CIA_STS is set), this RX_STAMP value
in may be overwritten by the STS based RX timestamp estimate.
CIA_STS Select CIA processing of the STS CIR. For more details of this see § 6 – Secure ranging /
timestamping. This CIA_STS configuration bit applies when STS is included in the packet
reg:00:10
as configured via the CP_SPC configuration. In that case when CIA_STS is 1 (default) it
bit:8
configures the CIA algorithm to analyse the STS CIR and compute an RX timestamp
estimate from it. Upon receipt of a packet, the CIA will be automatically run, assuming
CIARUNE in Sub-register 0x11:08 – Sequencing control is set to 1 (default). This will occur
after the STS part of the packet has been received and after the CIA has finished analysis
of the preamble sequence based CIR if this is enabled by the CIA_IPATOV configuration bit
above. When CIA_STS is 0, the CIA will not analyse the STS CIR. If CIARUNE is 0, the
CIA_RUN bit, in DIAG_TMC register, may be used to run the CIA after the packet is
received.
The RX timestamp estimate resulting from running the CIA on the STS CIR is written to
the STS_TOA field in Sub-register 0x0C:08 – STS receive time stamp and status, and also
to the RX_STAMP field in Sub-register 0x00:64 – Receive time stamp.
RXWTOE Receive Wait Timeout Enable. When set RX Enable will initialise an RX_FWTO down count
which will disable the receiver if no valid frame is received before the timeout occurs. The
reg:00:10
bit:9
timeout period is set in Sub-register 0x00:34 – Receive frame wait timeout period. The
occurrence of the timeout is signalled by the RXFTO event status bit in Sub-register 0x00:44
– System event status.
CP_SDC This bit, when set, configures the Super Deterministic Code (SDC) mode. If RX timestamp
security is not a concern, then overhead of key management and counter control is
reg:00:10 undesirable. For this reason, the DW3000 includes a special STS mode that uses a code
bit:15
optimized for ToA performance. When this is set the STS KEY/IV values are ignored. The
STS generation is using a pre-programmed sequence in the transmitter and the receiver.
When this bit is clear, standard IEEE 802.15.4z counter mode is used.
PDOA_MODE PDoA mode is configured with this setting:
0x0: this disables the PDoA operation in the DW3000 receiver
reg:00:10 0x1: this configures the receiver for PDoA Mode 1
bits:17-16
0x2: this configuration is reserved/not supported
0x3: this configures the receiver for PDoA Mode 3
These are further described in 4.2 TDoA and PDoA support
FAST_AAT Enable fast RX to TX turn around mode. When this bit is set the receiver will not wait for
CIADONE before it signals end of reception (RXFR). The host can then start processing the
reg:00:10 received frame. If AUTO_ACK has been configured the AAT bit will also be set to signal ACK
bit:18
is being sent, assuming it has been requested and other frame filtering rules pass.
© Decawave Ltd 2019 Version 1.1 Page 80 of 255
DW3000 User Manual
Length
ID Type Mnemonic Description
(octets)
00:14 2 RW FF_CFG Frame filter configuration bitmap
Register file: 0x00-0x1 – General configuration registers, sub-register 0x14 of register file 0x00 is the
IEEE802.15.4 standard [1] MAC frame address filter configuration register. This is a bitmapped register. Each
bit field is separately identified and described below. The FF_CFG register contains the following bitmapped
sub-fields:
LE3_PEND
LE2_PEND
LE1_PEND
LE0_PEND
FFAMULTI
FFAM
FFAD
FFAA
FFAB
FFAR
FFBC
FFAE
FFAF
FFIB
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Note: For any of these bits to apply FFEN bit in SYS_CFG must also be set.
Length
ID Type Mnemonic Description
(octets)
00:18 1 RO SPI_RD_CRC SPI CRC read status
Register file: 0x00-0x1 – General configuration registers, sub-register 0x18 of register file 0x00 is the status
register for the SPI read CRC value of the SPI CRC function. This is the CRC value resulting from each SPI read
when SPI CRC mode is enabled via the SPI_CRCEN bit in Sub-register 0x00:10 – System configuration. For
more details of SPI CRC operation please refer to § 2.3.1.3 – SPI CRC mode.
Length
ID Type Mnemonic Description
(octets)
00:1C 4 RO SYS_TIME System time counter (32-bit)
Register file: 0x00-0x1 – General configuration registers, sub-register 0x1C of register file 0x00 is the System
Time Counter register. The device’s system time and time stamps are designed to be based on the time
units which are nominally at 64 GHz, or more precisely 499.2 MHz × 128 = 63.8976 GHz.
The SYS_TIME register only counts in the IDLE_PLL, RX and TX states (were the digital PLL enabled), and it
only contains the 32 most significant bits of the device’s system time. In all other states the system time
counter is disabled and this register is not updated. When it is active the SYS_TIME register is incremented
at a rate of 125 MHz and in units of 2. The least significant bit of SYS_TIME is always zero. The internal
device’s counter wrap period is 240 ÷ (128×499.2 MHz) = 17.2074 seconds.
Note: once this register is read the system time value is latched and any subsequent read will return the
same value. To clear the current value in the register an SPI write transaction is necessary, the following
read of the SYS_TIME register will return a new value.
Length
ID Type Mnemonic Description
(octets)
00:24 6 RW TX_FCTRL Transmit frame control
Register file: 0x00-0x1 – General configuration registers, sub-register 0x24 of register file 0x00, the transmit
frame control register, contains a number of TX control fields. Each field is separately identified and
described below. (For a general discussion of transmission please refer to section 3 Message transmission)
The fields of the TX_FCTRL register identified above are individually described below:
Note: The FINE_PLEN field below gives additional control of the preamble length (PSR).
The choice of preamble length has a bearing on operating range and system performance.
The TXPSR bit values not defined in the table above are reserved and should not be used.
When auto ACK feature is used, see AUTO_ACK, the ACK frame will have its PSR set based
on this field.
TXB_OFFSET Transmit buffer index offset. This 10-bit field is used to specify an index in the transmit
buffer of the first octet to be transmitted. The TX frame begins with the octet at the
reg:00:24
TXB_OFFSET index and continues for the number octets specified by the frame length
bits:25–16
(TXFLEN) less 2 for the CRC. Care should be taken that the TXB_OFFSET plus the frame
length does not extend past the end of the TX_BUFFER.
Note: Due to an errata in DW3000, when configuring the TXB_OFFSET index to greater
than 127, a value of 128 needs to be added (this will be internally subtracted by the
device). To allow the device to load this correct offset value internally the host needs to
execute a register read of address 0x08:00 (Sub-register 0x08:00 – SAR control), after
configuration of this TX_FCTRL register. This is automatically done in the published
DW3000 dwt_writetxfctrl() API function [3].
3 The duration of preamble symbols is 993.59 ns with the 16 MHz PRF setting and 1017.63 ns with for 64 MHz PRF.
Length
ID Type Mnemonic Description
(octets)
00:2C 4 RW DX_TIME Delayed send or receive time (32-bit)
Register file: 0x00-0x1 – General configuration registers and AES, sub-register 0x2C of register file 0x00, the
Delayed Send or Receive Time, is used to specify a time in the future to either turn on the receiver to be
ready to receive a packet, or to turn on the transmitter and send a packet. The units are one half of the
499.2 MHz fundamental frequency, (~ 4 ns). The least significant bit of this register is ignored, i.e. the
smallest value that can be specified is 2, i.e. 8 ns. Delayed send can be initiated by any of the following
commands: CMD_DTX , CMD_DTX_TS, CMD_DTX_RS, CMD_DTX_W4R, CMD_DTX_TS_W4R or
CMD_DTX_RS_W4R similarly the delayed receive can be initiated by any of the following commands:
CMD_DRX, CMD_DRX_TS or CMD_DRX_RS. For more information see sections 3.3 Delayed transmission and
4.3 Delayed receive
Length
ID Type Mnemonic Description
(octets)
00:30 4 RW DREF_TIME Delayed send or receive reference time (32-bit)
Register file: 0x00-0x1 – General configuration registers and AES, sub-register 0x30, the Delayed Send or
Receive Reference Time, is used to specify a time (at which an an event happened, e.g. Beacon was sent) and
any value in DX_TIME is added to this register before either the receiver or transmitter are turned on. The
unit is one half of the 499.2 MHz fundamental frequency, (~ 4 ns). The least significant bit of this register is
ignored, i.e. the smallest value that can be specified is 2, i.e. ~ 8 ns. Delayed send with respect to reference
time is initiated by CMD_DTX_REF or CMD_DTX_REF_W4R. Delayed receive with respect to reference time is
initiated by CMD_DRX_REF. For more information see section 3.3 Delayed transmission and 4.3 Delayed
receive.
Length
ID Type Mnemonic Description
(octets)
00:34 3 RW RX_FWTO Receive frame wait timeout period
Register file: 0x00-0x1 – General configuration registers, sub-register 0x34 of register file 0x00 is the receive
frame wait timeout period. It is a 20-bit wide register with a unit of 512/499.2 MHZ (~ 1.0256 µs). The
receive frame wait timeout function is provided to allow the host processor to enter a low power state
awaiting a valid receive frame and be woken up by the DW3000 when either a frame is received or the
programmed timeout has elapsed. While many host systems like microcontrollers have timers that might be
used for this purpose, including this RX timeout functionality in the DW3000 allows additional flexibility to
the system designer in selecting the microcontroller to optimise the solution. The frame wait timeout is
enabled by the RXWTOE in Sub-register 0x00:10 – System configuration.
When the receiver is enabled (and begins hunting for the preamble sequence) and RXWTOE is set, then the
frame wait timeout counter starts counting the timeout period programmed. Thereafter, assuming no
action is taken to change the operation, one of two things should happen:
a) The Receive Frame Wait Timeout period elapses. This disables the receiver and sets the RXFTO
(Receiver Frame Wait Timeout) bit in the status register, (and resets the counter).
b) A valid receive frame arrives and sets the RXFR and RXFCG bits in the status register. This stops the
receive frame wait timer counter so RXFTO will not be set.
c) Host can issue transceiver off command (CMD_TRXOFF) at anytime to stop the RX and disable
RXFTO.
The RX frame wait timeout period should only be programmed when the IC is in IDLE_PLL state, before the
receiver is enabled. Programming the RXFTO at other times (e.g. in RX state) is not prevented but may result
in unpredictable behaviour.
Length
ID Type Mnemonic Description
(octets)
00:38 1 RW SYS_CTRL System control
Register file: 0x00-0x1 – General configuration registers, sub-register 0x38 of register file 0x00 is the system
control register. This register is used when testing Continuous Frame test mode (see TX_PSTM), to start the
transmissions. Bit 0 needs to be set to 1 to start the transmissions.
Length
ID Type Mnemonic Description
(octets)
00:3C 6 RW SYS_ENABLE System event enable mask register
Register file: 0x00-0x1 – General configuration registers, sub-register 0x3C of register file 0x00 is the system
event mask register. These are aligned with the event status bits in the SYS_STATUS register. Whenever a
bit in the SYS_ENABLE is set (to 1) and the corresponding bit in the SYS_STATUS register is also set, then an
interrupt will be generated asserting the hardware IRQ output line. The interrupt condition may be removed
by clearing the corresponding bit in this SYS_ENABLE register (by setting it to 0) or by clearing the
corresponding latched bit in the SYS_STATUS register (generally by writing a 1 to the bit – please refer to
individual SYS_STATUS register bit definitions for details).
The SYS_ENABLE register contains the system event mask bits identified and described below:
PLL_HILO_EN
CIADONE_EN
RXOVRR_EN
SPICRCE_EN
VWARN_EN
RXSFDD_EN
CPLOCK_EN
CIAERR_EN
RXRFSL_EN
SPIRDY_EN
RXPHD_EN
RXPTO_EN
RXPRD_EN
RCINIT_EN
RXPHE_EN
RXFCG_EN
RXSTO_EN
RXFTO_EN
CPERR_EN
TXPHS_EN
RXFCE_EN
TXPRS_EN
TXFRB_EN
TXFRS_EN
ARFE_EN
RXFR_EN
AAT_EN
- - -
-
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_DONE_EN
CMD_ERR_EN
CCA_FAIL_EN
AES_ERR_EN
SPI_UNF_EN
GPIOIRQ_EN
SPI_OVF_EN
VT_DET_EN
RXPREJ_EN
SPIERR_EN
- - -
0 1 1 1 1 0 0 0 0 0 0 0 0
The system event mask bits of the SYS_ENABLE register identified above are individually described below:
Field Description of fields within Sub-register 0x00:3C – System event enable mask
– Bits marked with ‘-’ are reserved.
reg:00:3C
CPLOCK_EN Mask clock PLL lock event. When CPLOCK_EN is 0 the CPLOCK event status bit will not
generate an interrupt. When CPLOCK_EN is 1 and the CPLOCK event status bit is 1, the
reg:00:3C
bit:1
hardware IRQ interrupt line will be asserted to generate an interrupt.
SPICRCE_EN Mask SPI CRC Error event. When SPICRCE_EN is 0 the SPICRCE event status bit will not
generate an interrupt. When SPICRCE_EN is 1 and the SPICRCE event status bit is 1, the
reg:00:3C
bit:2 hardware IRQ interrupt line will be asserted to generate an interrupt.
Field Description of fields within Sub-register 0x00:3C – System event enable mask
AAT_EN Mask automatic acknowledge trigger event. When AAT_EN is 0 the AAT event status
bit will not generate an interrupt. When AAT_EN is 1 and the AAT event status bit is 1,
reg:00:3C
bit:3 the hardware IRQ interrupt line will be asserted to generate an interrupt.
AAT should be masked when the automatic acknowledge is not enabled so that
spurious interrupts cannot affect system behaviour.
TXFRB_EN Mask transmit frame begins event. When TXFRB_EN is 0 the TXFRB event status bit will
not generate an interrupt. When TXFRB_EN is 1 and the TXFRB event status bit is 1, the
reg:00:3C
bit:4 hardware IRQ interrupt line will be asserted to generate an interrupt.
TXPRS_EN Mask transmit preamble sent event. When TXPRS_EN is 0 the TXPRS event status bit will
not generate an interrupt. When TXPRS_EN is 1 and the TXPRS event status bit is 1, the
reg:00:3C
bit:5 hardware IRQ interrupt line will be asserted to generate an interrupt.
TXPHS_EN Mask transmit PHY Header Sent event. When TXPHS_EN is 0 the TXPHS event status bit
will not generate an interrupt. When TXPHS_EN is 1 and the TXPHS event status bit is 1,
reg:00:3C
bit:6 the hardware IRQ interrupt line will be asserted to generate an interrupt.
TXFRS_EN Mask transmit frame sent event. When TXFRS_EN is 0 the TXFRS event status bit will
not generate an interrupt. When TXFRS_EN is 1 and the TXFRS event status bit is 1, the
reg:00:3C
bit:7 hardware IRQ interrupt line will be asserted to generate an interrupt.
RXPRD_EN Mask receiver preamble detected event. When RXPRD_EN is 0 the RXPRD event status
bit will not generate an interrupt. When RXPRD_EN is 1 and the RXPRD event status bit
reg:00:3C
bit:8 is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
RXSFDD_EN Mask receiver SFD detected event. When RXSFDD_EN is 0 the RXSFDD event status bit
will not generate an interrupt. When RXSFDD_EN is 1 and the RXSFDD event status bit
reg:00:3C
bit:9 is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
CIADONE_EN Mask CIA processing done event. When CIADONE_EN is 0 the CIADONE event status bit
will not generate an interrupt. When CIADONE_EN is 1 and the CIADONE event status
reg:00:3C
bit:10 bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
RXPHD_EN Mask receiver PHY header detect event. When RXPHD_EN is 0 the RXPHD event status
bit will not generate an interrupt. When RXPHD_EN is 1 and the RXPHD event status bit
reg:00:3C
bit:11 is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
RXPHE_EN Mask receiver PHY header error event. When RXPHE_EN is 0 the RXPHE event status bit
will not generate an interrupt. When RXPHE_EN is 1 and the RXPHE event status bit is 1,
reg:00:3C
bit:12 the hardware IRQ interrupt line will be asserted to generate an interrupt.
RXFR_EN Mask receiver data frame ready event. When RXFR_EN is 0 the RXFR event status bit
will not generate an interrupt. When RXFR_EN is 1 and the RXFR event status bit is 1,
reg:00:3C
bit:13 the hardware IRQ interrupt line will be asserted to generate an interrupt.
RXFCG_EN Mask receiver FCS good event. When RXFCG_EN is 0 the RXFCG event status bit will not
generate an interrupt. When RXFCG_EN is 1 and the RXFCG event status bit is 1, the
reg:00:3C
bit:14 hardware IRQ interrupt line will be asserted to generate an interrupt.
RXFCE_EN Mask receiver FCS error event. When RXFCE_EN is 0 the RXFCE event status bit will not
generate an interrupt. When RXFCE_EN is 1 and the RXFCE event status bit is 1, the
reg:00:3C
bit:15 hardware IRQ interrupt line will be asserted to generate an interrupt.
RXRFSL_EN Mask receiver Reed Solomon Frame Sync Loss event. When RXRFSL_EN is 0 the RXFSL
event status bit will not generate an interrupt. When RXRFSL_EN is 1 and the RXFSL
reg:00:3C
bit:16 event status bit is 1, the hardware IRQ interrupt line will be asserted to generate an
interrupt.
Field Description of fields within Sub-register 0x00:3C – System event enable mask
RXFTO_EN Mask Receive Frame Wait Timeout event. When RXFTO_EN is 0 the RXFTO event status
bit will not generate an interrupt. When RXFTO_EN is 1 and the RXFTO event status bit
reg:00:3C
bit:17 is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
CIAERR_EN Mask leading edge detection processing error event. When CIAERR_EN is 0 the CIAERR
event status bit will not generate an interrupt. When CIAERR_EN is 1 and the CIAERR
reg:00:3C
bit:18 event status bit is 1, the hardware IRQ interrupt line will be asserted to generate an
interrupt.
VWARN_EN Mask Voltage warning event. When VWARN_EN is 0 the VWARN event status bit will
not generate an interrupt. When VWARN_EN is 1 and the VWARN event status bit is 1,
reg:00:3C
rxoverbit:19 the hardware IRQ interrupt line will be asserted to generate an interrupt.
RXOVRR_EN Receiver overrun. When RXOVRR_EN is 0 the RXOVRR event status bit will not generate
an interrupt. When RXOVRR_EN is 1 and the RXOVRR event status bit is 1, the hardware
reg:00:3C
bit:20 IRQ interrupt line will be asserted to generate an interrupt
RXPTO_EN Mask Preamble detection timeout event. When RXPTO_EN is 0 the RXPTO event status
bit will not generate an interrupt. When RXPTO_EN is 1 and the RXPTO event status bit
reg:00:3C
bit:21 is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
Note: Perfroming a soft reset (SOFTRESET) may cause a glitch on the interrupt line when
this event is configured to generate interrupt. The interrupt will be triggered, but when
the host goes to read the status register (SYS_STATUS) it will be in the reset state as the
device has reset.
reserved
reg:00:3C
bit:22
SPIRDY_EN Mask SPI ready event. When SPIRDY_EN is 0 the SPIRDY event status bit will not
generate an interrupt. When SPIRDY_EN is 1 and the SPIRDY event status bit is 1, the
reg:00:3C
bit:23 hardware IRQ interrupt line will be asserted to generate an interrupt. Figure 8 shows
the host interrupt that is generated from the SPIRDY event.
RCINIT_EN Mask IDLE RC event. When RCINIT_EN is 0 the RCINIT event status bit will not generate
an interrupt. When RCINIT_EN is 1 and the RCINIT event status bit is 1, the hardware
reg:00:3C
bit:24 IRQ interrupt line will be asserted to generate an interrupt. The RCINIT event will be
generated when device enters IDLE_RC state as shown in Figure 8.
PLL_HILO_EN Mask PLL Losing Lock warning event. When PLL_HILO_EN is 0 the PLL_HILO event status
bit will not generate an interrupt. When PLL_HILO_EN is 1 and the PLL_HILO event
reg:00:3C
bit:25 status bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
RXSTO_EN Mask Receive SFD timeout event. When RXSTO_EN is 0 the RXSTO event status bit will
not generate an interrupt. When RXSTO_EN is 1 and the RXSTO event status bit is 1, the
reg:00:3C
bit:26 hardware IRQ interrupt line will be asserted to generate an interrupt.
HPDWARN_EN Mask Half Period Delay Warning event. When HPDWARN_EN is 0 the HPDWARN event
status bit will not generate an interrupt. When HPDWARN_EN is 1 and the HPDWARN
reg:00:3C
bit:27 event status bit is 1, the hardware IRQ interrupt line will be asserted to generate an
interrupt.
CPERR_EN Mask Scramble Timestamp Sequence (STS) error event. When CPERR_EN is 0 the CPERR
event status bit will not generate an interrupt. When CPERR_EN is 1 and the CPERR
reg:00:3C
bit:28 event status bit is 1, the hardware IRQ interrupt line will be asserted to generate an
interrupt.
ARFE_EN Mask Automatic Frame Filtering rejection event. When ARFE_EN is 0 the ARFE event
status bit will not generate an interrupt. When ARFE_EN is 1 and the ARFE event status
reg:00:3C
bit:29 bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
Field Description of fields within Sub-register 0x00:3C – System event enable mask
RXPREJ_EN Mask Receiver Preamble Rejection event. When RXPREJ_EN is 0 the RXPREJ event
status bit will not generate an interrupt. When RXPREJ_EN is 1 and the RXPREJ event
reg:00:40
bit:1 status bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
VT_DET_EN Mask Voltage/Temperature variation dtection interrupt event. When VT_DET_EN is 0
the VT_DET event status bit will not generate an interrupt. When VT_DET_EN is 1 and
reg:00:40
bit:4 the VT_DET event status bit is 1, the hardware IRQ interrupt line will be asserted to
generate an interrupt.
GPIOIRQ_EN Mask GPIO interrupt event. When GPIOIRQ_ENGPIOIRQ_EN is 0 the GPIOIRQ event
status bit will not generate an interrupt. When GPIOIRQ_EN is 1 and the GPIOIRQ event
reg:00:40
bit:5 status bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
AES_DONE_EN Mask AES done interrupt event. When AES_DONE_EN is 0 the AES_DONE event status
bit will not generate an interrupt. When AES_DONE_EN is 1 and the AES_DONE event
reg:00:40
bit:6 status bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
AES_ERR_EN Mask AES error interrupt event. When AES_ERR is 0 the AES_ERR event status bit will
not generate an interrupt. When AES_ERR is 1 and the AES_ERR event status bit is 1,
reg:00:40
bit:7 the hardware IRQ interrupt line will be asserted to generate can interrupt.
CDM_ERR_EN Mask CMD error interrupt event. When CMD_ERR_EN is 0 the CMD_ERR event status
bit will not generate an interrupt. When CMD_ERR_EN is 1 and the CMD_ERR event
reg:00:40
bit:8 status bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
SPI_OVF_EN Mask SPI overflow interrupt event. When SPI_OVF_EN is 0 the SPIOVF event status bit
will not generate an interrupt. When SPI_OVF_EN is 1 and the SPIOVF event status bit is
reg:00:40
bit:9 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
SPI_UNF_EN Mask SPI underflow interrupt event. When SPI_UNF_EN is 0 the SPIUNF event status bit
will not generate an interrupt. When SPI_UNF_EN is 1 and the SPIUNF event status bit
reg:00:40
bit:10 is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
SPI_ERR_EN Mask SPI error interrupt event. When SPIERR is 0 the SPIERR event status bit will not
generate an interrupt. When SPIERR is 1 and the SPIERR event status bit is 1, the
reg:00:40
bit:11 hardware IRQ interrupt line will be asserted to generate an interrupt.
CCA_FAIL_EN Mask CCA fail interrupt event. When CCA_FAIL_EN is 0 the CCA_FAIL event status bit
will not generate an interrupt. When CCA_FAIL_EN is 1 and the CCA_FAIL event status
reg:00:40
bit:12 bit is 1, the hardware IRQ interrupt line will be asserted to generate an interrupt.
Length
ID Type Mnemonic Description
(octets)
00:44 6 SRW SYS_STATUS System event status register
Register file: 0x00-0x1 – General configuration registers, sub-register 0x44 of register file 0x00 is the system
event status register, SYS_STATUS. It contains status bits that indicate the occurrence of different system
events or status changes. It is possible to enable particular events as interrupt sources, by employing the
SYS_ENABLE, Sub-register 0x00:3C – System event enable mask, so that the setting of the event status bit will
generate an interrupt, asserting the hardware IRQ output line. This can be used, for example, to allow the
host processor to enter a low-power state during packet transmission or reception awaiting an interrupt to
wake upon the completion of the TX or RX activity.
© Decawave Ltd 2019 Version 1.1 Page 92 of 255
DW3000 User Manual
Reading the SYS_STATUS register returns the state of the status bits. Generally these event status bits are
latched so that the event is captured. Such latched bits need to be explicitly cleared by writing ‘1’ to the bit
position (writing ‘0’ has no effect).
The SYS_STATUS register contains the system event status bits identified and described below:
CIADONE
RXOVRR
PLLHILO
SPICRCE
VWARN
RXSFDD
CPLOCK
CIAERR
SPIRDY
RXPHD
RXPTO
RXPRD
RXFCG
RCINIT
RXPHE
RXSTO
RXFTO
CPERR
TXPHS
TXFRB
RXFCE
TXPRS
TXFRS
RXFSL
ARFE
RXFR
IRQS
AAT
-
-
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
AES_DONE
CMD_ERR
CCA_FAIL
AES_ERR
GPIOIRQ
SPI_UNF
SPI_OVF
VT_DET
RXPREJ
SPIERR
-
-
-
0 0 0 0 0 0 0 0 0 0 0 0 0
The system event status bits of the SYS_STATUS register identified above are individually described below:
If automatic acknowledgement is not enabled, then the AAT status bit must be ignored.
In order to ensure that the receive timestamp information is valid before any receive
interrupt processing takes place, the setting of RXFR is delayed until the CIA adjustments
of the timestamp have completed, at which time the CIADONE event status bit will be set
(or possibly CIAERR). The RXFR event status flag bit is cleared by writing a 1 to it.
Note: when configured to use packet format configuration 3 (see Figure 13) then this
event should be used as the main “Receive” (interrupt). The RXFCG and RXFCE events
should not be used in packet format configuration 3.
RXFCG Receiver FCS Good. This event status bit reflects the result of the frame CRC checking. It
is set (or not) at the end of frame reception coincidentally with the setting of the RXFR
reg:00:44
bit:14 event status flag.
When RXFCG is set to 1 it indicates that the CRC check result generated on the received
data matches with the 2-octet FCS sequence at the end of the frame. RXFR with RXFCG
then indicates the correct reception a valid frame. The RXFCG bit is cleared by writing a
1 to it.
The preamble detection timeout may be useful to save power by turning off the receiver if
an expected response packet does not begin. If a response message is expected with a
certain fixed timing and preamble is not detected at the appropriate time then this is likely
to mean that the response will not come. Reception can thus be aborted early, saving
power.
Note: Perfroming a soft reset (SOFTRESET) may cause a glitch on the interrupt line when
this event is configured to generate interrupt. The interrupt will be triggered, but when the
host goes to read the status register (SYS_STATUS) it will be in the reset state as the device
has reset
- reserved
reg:00:44
bit:22
SPIRDY SPI ready for host access. This event status bit is set to indicate that the DW3000 has
completed the activities associated with power on and has transitioned from OFF or
reg:00:44
bit:23 awaking from SLEEP (or DEEPSLEEP) and is now in the IDLE_RC state. For more details on
DW3000 states see section 2.4 and 2.5 where Figure 8 shows the host interrupt that is
generated from the SPIRDY event. The SPIRDY bit is cleared by writing a 1 to it.
RCINIT RC INIT. This event status bit is set to indicate that the DW3000 has completed the
activities associated with power on and has transitioned from OFF or awaking from SLEEP
reg:00:44
bit:24 (or DEEPSLEEP) and is now in the INIT_RC state. For more details on DW3000 states see
section 2.4. The RCINIT bit is cleared by writing a 1 to it.
PLL_HILO Clock PLL Losing Lock. This event status bit is set to indicate that the system’s digital
clock PLL is having locking issues. This should not happen in healthy devices operating in
reg:00:44
bit:25 their normal range. Its occurrence may indicate a bad configuration, a faulty part or a
problem in the power or clock inputs to the device. If this bit is set it may be advisable to
turn off the transmitter to avoid sending spurious signals. The PLL_HILO bit is cleared by
writing a 1 to it.
For delayed send/receive the send/receive time is programmed into Sub-register 0x00:2C
– Delayed send or receive time and then the delayed sending/receiving is initiated by the
following commands: CMD_DTX , CMD_DTX_TS, CMD_DTX_RS, CMD_DTX_W4R,
CMD_DTX_TS_W4R, CMD_DTX_RS_W4R, CMD_DRX, CMD_DRX_TS or CMD_DRX_RS.
The delayed transmit and receive functionality is described in detail in sections 3.3 –
Delayed transmission and 4.3 – Delayed receive
The HPDWARN event status flag gets set if the time left to actually beginning
transmission / reception is more than half a period of the system clock (SYS_TIME) away.
Assuming that the intent was not to schedule transmission/reception at a time that is
over 8 seconds in the future, the HPDWARN status flag can be polled after a delayed
transmission or reception is commanded, to check whether the delayed send/ receive
invocation was given in time (HPDWARN ==0) or not (HPDWARN == 1).
Typically when the HPDWARN event is detected the host controller will abort the delayed
TX/RX by issuing a transceiver off command (CMD_TRXOFF) and then take whatever
remedial action is deemed appropriate for the application.
HPDWARN events are counted in Sub-register 0x0F:18 – Half period warning counter,
assuming counting is enabled by the EVC_EN bit in Sub-register 0x0F:00 – Event counter
control.
CPERR Scramble Timestamp Sequence (STS) error. The CPERR event status flag will get set if the
STS_TOAST bits are non-zero.
reg:00:44
bit:28 The CPERR events are counted in EVC_CPQE field in Sub-register 0x0F:28 – STS quality
error counter. The CPERR status bit can be cleared by writing a 1 to it.
ARFE Automatic Frame Filtering rejection. The ARFE event status flag bit is set to indicate
when a frame has been rejected in receiver due to it not passing through the frame
reg:00:44
bit:29 filtering. See section 5.4 – Frame filtering for details of the operation of frame filtering.
The ARFE event status bit can be cleared by writing a 1 to it. Frame Filtering rejection
events are also counted in Sub-register 0x0F:0C – Frame filter rejection counter, assuming
counting is enabled by the EVC_EN bit in Sub-register 0x0F:00 – Event counter control.
CCA_FAIL This event will be set as a result of failure of CMD_CCA_TX to transmit a packet. When
CMD_CCA_TX is invoked the device initially enters preamble hunt, and if no preamble is
reg:00:48
bit:12 found within the time specified by PRE_TOC, the device will proceed to transmit the
packet. However, if the preamble is detected, then the device will go back to IDLE and
report CCA_FAIL event. The CCA_FAIL bit is cleared by writing a 1 to it.
Length
ID Type Mnemonic Description
(octets)
00:4C 4 ROD RX_FINFO RX frame information
Register file: 0x00-0x1 – General configuration registers, sub-register 0x4C of register file 0x00 gives
information on the received frame. It is updated after the reception of a good PHR, i.e. PHR where the
SECDED has not flagged a non-correctable error (see section 2.9).
This RX_FINFO register contains a number of fields, separately identified and described below:
RXNSPL
RXPSR
RXPRF
RXBR
RXPACC RNG - RXFLEN
-
0 0 0 0 0 0 0 0 0
Table 21 below lists the preamble lengths that can be reported by considering RXNSPL and
the RXPSR fields together:
Where preamble length is not predetermined and hard coded in the application, the
received preamble length information may be used to select the preamble length for any
response message, by copying RXNSPL and RXPSR fields into the TXPSR configuration
respectively (TXPSR = RXNSPL << 2 + RXNSPL).
This value is updated when a good PHR is detected (when the RXPHD status bit is set).
RXBR Receive Bit Rate report. This field reports the received bit rate. This information is signalled
in the received packet’s PHR (see 2.9 for details): 0 = 850 kb/s, and 1 = 6.8Mb/s
reg:00:4C
bit:13 This value is updated when a good PHR is detected (when the RXPHD status bit is set).
- This bit is reserved.
reg:00:4C
bit:14
RNG Receiver Ranging. This reflects the ranging bit in the received PHY header identifying the
frame as a ranging frame.
reg:00:4C
bit:15 This value is updated when a good PHR is detected (when the RXPHD status bit is set).
RXPRF RX Pulse Repetition Rate report. This field reports the PRF being employed in the receiver.
This is determined by the RX_PCODE programmed in CHAN_CTRL register. The values are: 01
reg:00:4C
= 16 MHz, 10 = 64 MHz
bits:17,16
In addition to these standard preamble lengths, the DW3000 also supports the transmission
of non-standard preamble lengths. These non-standard lengths cannot be signalled in the
PHR; instead the DW3000 gives an estimate of the preamble length based on the RXPSR from
the PHR and the RXPACC value. The estimate is reported using RXPSR and RXNSPL fields
together as per Table 21 above.
This value is updated when a good PHR is detected (when the RXPHD status bit is set).
RXPACC Preamble Accumulation Count. This reports the number of symbols of preamble and SFD
that are accumulated. The value is updated/available after a good PHR is detected (when the
reg:00:4C RXPHD status bit is set).
bits:31–20
RXPACC will usually be slightly smaller than the transmitted preamble length because
detecting the presence of the preamble consumes several symbols (a PAC size) and they do
not contribute to the CIR estimate.
Note: This value is similar but not the same as the IP_NACC from the CIA interface. IP_NACC
allows for the effect of negative and zero symbols in the SFD to produce an effective
accumulated symbol count and it should be used when determining RSSI.
Length
ID Type Mnemonic Description
(octets)
00:64 16 ROD RX_TIME Receive time stamp
Register file: 0x00-0x1 – General configuration registers, sub-register 0x64 of register file 0x00 reports the
receive time stamp. The IEEE802.15.4 standard [1] defines a point during a packet reception which is
timestamped (shown in Figure 13), this point is called the RMARKER. DW3000 takes a coarse timestamp of
the symbol in which the RMARKER event occurs and to this adds various correction factors to give a resultant
time stamp value. Please refer to section 4.1.7 – RX message timestamp for more details of the corrections
applied.
NOTE: these registers 0x64->0x73 cannot be read in a single SPI transaction. A single SPI read from address
0x64 of 16 bytes will not return correct data.
Length
ID Type Mnemonic Description
(octets)
00:74 5 RO TX_TIME Transmit time stamp
Register file: 0x00-0x1 – General configuration registers, sub-register 0x74 of register file 0x00 reports the
transmit time stamp information. The IEEE802.15.4 standard [1] defines a point during a packet
transmission which is timestamped (shown in Figure 13), this point is called the RMARKER. The DW3000
takes a timestamp of the symbol in which the RMARKER event occurs and to this adds the antenna delay to
give a resultant time stamp value, of when the RMARKER is launched from the antenna.
The sub fields of TX_TIME register are laid out above. It is possible to read a variable number of bytes any
byte index. The individual sub-fields are described below:
Length
ID Type Mnemonic Description
(octets)
01:00 4 RO TX_RAWST Transmit time stamp raw
Register file: 0x00-0x1 – General configuration registers, sub-register 0x00 of register file 0x01 reports the
raw transmit time stamp information. The IEEE802.15.4 standard [1] defines a point during a packet
reception which is timestamped (shown in Figure 13), this point is called the RMARKER. The DW3000 takes a
timestamp of the symbol in which the RMARKER event occurs. This is a 32-bt register which contains 39-8
bits of the TX_TIME register prior to addition of antenna delay.
Length
ID Type Mnemonic Description
(octets)
01:04 2 RW TX_ANTD 16-bit delay from transmiter to the antenna
Register file: 0x00-0x1 – General configuration registers, sub-register 0x04 of register file 0x01, the
Transmitter Antenna Delay, is used to account for the delay between the internal digital timestamp of the
RMARKER and the time the RMARKER is at the antenna. The value programmed here is automatically added
to the raw timestamp TX_RAWST to get the TX_STAMP reported in Sub-register 0x00:74 – Transmit time
stamp. Refer to section 10.3 – IC calibration – antenna delay for details of calibration of antenna delay. The
units here are the same as those used for system time and time stamps, i.e. 499.2 MHz × 128, so the least
significant bit is about 15.65 picoseconds. The default antenna delay is 0x4015, which is approx. 256.74 ns.
Length
ID Type Mnemonic Description
(octets)
01:08 4 RW ACK_RESP_T Acknowledgement delay time and response time
Register file: 0x00-0x1 – General configuration registers, sub-register 0x08 of register file 0x01 is a
configuration register used for specifying turn-around times for DW3000 to use when automatically
switching between TX mode and RX modes. The ACK_RESP_T register contains the following bitmapped sub-
fields:
Field Description of fields within Sub-register 0x01:08 – Acknowledgement time and response
time
W4R_TIM Wait-for-Response turn-around Time. This 20-bit field is used to configure the turn-around
time between TX complete and RX enable when the wait for response function is being used.
reg:01:08 This function is enabled by any of the TX and wait-4-response commands (TXW4R, TXW4RCCA,
bits:19–0
TXW4RDLY, TXW4RDLYREF, TXW4RDLYTS, and TXW4RDLYRS). The time specified by this
W4R_TIM parameter is in units of approximately 1 µs, or 128 system clock cycles. This
configuration may be used to save power by delaying the turn-on of the receiver, to align with
the response time of the remote system, rather than turning on the receiver immediately after
transmission completes. For more details see section 5.6 – Transmit and automatically wait
for response.
Field Description of fields within Sub-register 0x01:08 – Acknowledgement time and response
time
ACK_TIM Auto-Acknowledgement turn-around Time. This 8-bit field is used to configure the turn-
around time between the correct receipt of a data frame (or a MAC command frame) and
reg:01:08 the transmission by the DW3000 of the acknowledgement frame. The time here is specified
bits:31–24
in units of preamble symbols. (This resultant time is slightly different depending on whether
the PRF is 16 or 64 MHz, see Table 9 for details the preamble symbol lengths).This timer only
applies if auto-acknowledgement is in use and then only acts when the frame is correctly
received, passing through the RX frame filtering rules, and when the ACK bit in the frame’s
MAC header is set to request acknowledgement. Please refer to section 5.5 – Automatic
acknowledgement Automatic for details of the Acknowledgement function. To ensure that
the receiver is ready for the first preamble symbol, and assuming that the remote DW3000
has a its W4R_TIM parameter set to 0, the recommended minimum ACK_TIM settings are as
follows:
Recommend min.
Data Rate
ACK_TIM
850 kb/s 2
6.8 Mb/s 3
This is most important at the 6.8 Mb/s data rate, where preamble sequences are generally
short, and losing even a few preamble symbols could potentially compromise ACK reception.
Where the W4R_TIM parameter is larger than zero, the ACK_TIM setting should be increased
also to ensure that none of the packet is sent before the remote receiver is listening.
Note: When the CIA algorithm is being run, the frame reception RXFR (and RXFCG) event
status flags are delayed until the CIA algorithm completes. This is done to ensure that the
receive timestamp information is valid when the interrupt is asserted. This delay is incurred
by the Auto-Acknowledgement function, since it is initiated by the frame reception RXFR
event also. The CIA processing delay is around 70 µs for a non-PDoA STS mode (35 µs each
for preamble and STS CIR analysis). Any programmed ACK_TIM will act in addition to this,
i.e. the delay timer will only start running when the RXFR event is asserted. Clearly, where a
remote device is waiting for the ACK response it will need to take this extra delay into
account in its turnaround receiver enablement and any timeouts it may be implementing.
To speed up Auto-Acknowledgement transmission, FAST_AAT bit can be set or where the RX
timestamp is not required, the CIA analysis may be disabled by clearing both CIA_IPATOV
and CIA_STS configuration bits in Sub-register 0x00:10 – System configuration.
- Bits marked ‘-’ are reserved and should always be written as zero.
Length
ID Type Mnemonic Description
(octets)
01:0C 4 RW TX_POWER TX power control
Register file: 0x00-0x1 – General configuration registers, sub-register 0x0C of register file 0x01 is used for
configuration and control of the transmitter output power.
The transmitter output power can be adjusted using this Sub-register 0x01:0C – Transmit power control.
Register, which contains the four octets each of which specifies a separate transmit power setting. Each
power control octet, specifies the power as a combination of a coarse gain parameter and a fine gain
parameter.
For the best current consumption performance, the coarse steps should be minimised for
the desired output power.
PHR_PWR This octet is used to control the TX power applied during the transmission of the PHY header
(PHR) part of the TX packet (see Figure 13). When PHR is configured to be sent at higher
reg:01:0C
bits:15–8 datarate (see PHR_6M8) then the power setting in this octet should match the DATA_PWR
above.
Note:
The BPRF PHR is peak-power-limited. To optimise the output TX power profile, it is
recommended to reduce the PHR_PWR setting in comparison to the DATA_PWR, SHR_PWR
and STS_PWR settings.
For example, if the DATA_PWR is set to 0xFF, it is recommended to set PHR_PWR to 0xFC.
SHR_PWR This octet is used to control the TX power applied during the transmission of the
synchronisation header (SHR), which consists of the preamble and SFD, (see Figure 13).
reg:01:0C
bits:23–16
The gain control is as specified in DATA_PWR above.
STS_PWR This octet is used to control the TX power applied during the STS part of the TX packet (see
Figure 13).
reg:01:08
bits:31–24
The gain control is as specified in DATA_PWR above.
Note: For optimum performance, manufacturers have to calibrate the TX power of each unit/DW3000 IC
board/module to account for IC to IC variations and different IC to antenna losses. Usually the TX power is
set to the maximum allowed by spectral emission regulations (-41.3 dBm/MHz) and such that no other out-
of-band limits are exceeded.
The register default values may be too high for the use case. In order to comply with regional spectrum
regulations the resultant output power spectrum should be checked.
DW3000 provides functionality to exercise power control over various parts of the transmit packet
individually. Please refer to section 3 Message transmission, for details of packet structure. If a packet is
short, it is possible to boost the power for the packet while staying within the regulatory limits. Each part of
the packet may be controlled separately so that the power can be boosted without violating the regulatory
limits for peak power. However, in general, the power settings for all parts of the packet should be
programmed to the same value.
8.2.2.21.2 Transmit power variation across coarse and fine gain steps
Figure 27 below, shows typical TX power variation over coarse and fine gain steps, for the two channels.
-5
-10
Power (dB)
-15
-20
-40
0 5 10 15 20 25 30 35 40 45 50 55 60
Fine Gain Setting
-5
-10
Power (dB)
-15
-20
-25
Coarse Gain = 0
Coarse Gain = 1
-30
Coarse Gain = 2
-35 Coarse Gain = 3
-40
0 5 10 15 20 25 30 35 40 45 50 55 60
Fine Gain Setting
Figure 27: Typical TX power variation with coarse and fine gain
Note:
Channel 9: the maximum coarse gain setting is 2, and the setting 3 should not be used.
Channel 5: the recommended coarse gain setting is 2. There is only a marginal increase in TX
power using coarse gain setting of 3, but there is a relatively large increase in current when it is
applied. For further details see the Datasheet [5].
Length
ID Type Mnemonic Description
(octets)
01:14 2 RW CHAN_CTRL Channel control register
Register file: 0x00-0x1 – General configuration registers, sub-register 0x14 of register file 0x01 is the channel
control register. This is used to select transmit and receive channels, and configure preamble codes and
some related parameters.
SFD_TYPE
RF_CHAN
- - - RX_PCODE TX_PCODE
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0
For correct operation of the DW3000 and compliance to the IEEE802.15.4 standard [1], the
preamble code should be set according to the operating channel. For details of centre
frequencies and preamble codes for the supported channels, please refer to section 2.6 – UWB
channels and preamble codes.
SFD_TYPE Thise bits select the SFD type. Four different SFD types are supported. These are listed in the
Table 22.
reg:01:14
bit:2-1 Table 22: SFD types
Length
ID Type Mnemonic Description
(octets)
01:18 4 RW LE_PEND_01 Low Energy device address 0 and 1
Register file: 0x00-0x1 – General configuration registers, sub-register 0x18 of register file 0x01 is a register
used for specifying the 16-bit addresses of LE devices for which there is data and PEND bit should be set in
the ACK frame (as a response to a MAC Data Request command from that node). See also section 5.5.2
Frame pending bit. The LE_PEND_01 register contains the following bitmapped sub-fields:
LE_ADDR1 LE_ADDR0
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
01:1C 4 RW LE_PEND_23 Low Energy device address 2 and 3
Register file: 0x00-0x1 – General configuration registers, sub-register 0x1C of register file 0x01 is a register
used for specifying the 16-bit addresses of LE devices for which there is data and PEND bit should be set in
the ACK frame (as a response to a MAC Data Request command from that node). See also section 5.5.2
Frame pending bit. The LE_PEND_23 register contains the following bitmapped sub-fields:
LE_ADDR3 LE_ADDR2
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
01:20 1 RW SPI_COLLISION SPI collision status
Register file: 0x00-0x1 – General configuration registers, sub-register 0x20 of register file 0x01 is a status
register used for specifying which DW3000 internal block caused the SPI collision error event. The
SPI_COLLISION register contains the following bitmapped sub-fields:
- - - SPI_COLLISION
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
01:24 1 RW RDB_STATUS RX double buffer status
Register file: 0x00-0x1 – General configuration registers, sub-register 0x24 of register file 0x01 is a status
register used for indicating the events following a reception of a frame when operating in double buffer
mode. It contains a sub section of status bits which happen as a result of frame reception. More details on
the operation of double buffering are given in section 4.4 Double receive buffer. The RDB_STATUS register
contains the following bitmapped sub-fields:
CIADONE1
CIADONE0
CP_ERR1
CP_ERR0
RXFCG1
RXFCG0
RXFR1
RXFR0
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
01:28 1 RW RDB_DIAG RX double buffer diagnostic configuration
Register file: 0x00-0x1 – General configuration registers, sub-register 0x28 of register file 0x01 is a
configuration register used for specifying the level of diagnostic data available after each receive event when
operating in double buffer mode. More details on the operation of double buffering are given in section 4.4
Double receive buffer. The RDB_DIAG register contains the following bitmapped sub-fields:
- - - - -
0 0 0 0 0 0 0 0
RDB_DMODE RX double buffer diagnostic mode. The are 3 levels of diagnostic data that can be logged
while RX double buffer mode is enabled:
reg:01:28 0x1 – Minimal set (logs 7 registers as shown in Table 44)
bits:2-0
0x2 – Medium set (logs 13 registers as shown in Table 44) and
0x4 – Full set. (logs all registers as shown in Table 44)
More details on the operation of double buffering are given in section 4.4 Double receive
buffer.
Note: The registers saved into the double buffer sets (SET_1 and SET_2) will depend on the
CIA diagnostic level as set by MINDIAG.
- Bits marked ‘-’ are reserved.
reg:01:28
bits:7–3
Length
ID Type Mnemonic Description
(octets)
01:30 2 RW AES_CFG AES configuration
Register file: 0x00-0x1 – General configuration registers, sub-register 0x30 of register file 0x01 is a
configuration register used for the configuration of the DW3000 AES block. The AES_CFG register contains
the following bitmapped sub-fields:
TAG_SIZE
KEY_SIZE
KEY_OTP
KEY_SRC
MODE
- - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
reg:01:30
bits:5-3
KEY_LOAD Load the AES KEY from AES KEY source (e.g. AES_KEY) into the AES core engine. This is done at
the start of a session and all packets in the same session use the same pre-loaded key.
reg:01:30 When using CCM mode, AES key should be loaded each time prior to starting of AES engine.
bit:6
This key update is needed even if the key remains the same.
KEY_SRC AES key source: This bit selects if the AES KEY to be used for AES operation is the one stored
in AES_KEY register (when this bit is set to 0) or (when this bit is set to 1) one of the KEYs
reg:01:30 stored in OTP memory or in AES RAM, as specified by the KEYOTP bit.
bit:7
TAG_SIZE Size of AES tag field. This is also known as the message integrity code size field. The AES tag
field can be configured to be one of the following:
reg:01:30 0x0: 0 bytes
bits:10-8
0x1: 4 bytes
0x2: 6 bytes
0x3: 8 bytes
0x4: 10 bytes
0x5: 12 bytes
0x6: 14 bytes
0x7: 16 bytes
CORE_SEL AES Core select. DW3000 supports two AES engine cores: GCM and CCM*. This bit selects
which AES core is used, when set to 0, the GCM is used; when set to 1 CCM* is used.
reg:01:30
bit:11
KEY_OTP AES key Memory source. When this bit is set to 0, the AES KEY used for the AES operation is
taken from RAM (can be one of the 8 AES KEYs as specified by the KEYADDR) or when set to 1
reg:01:30 the AES KEY will be the one stored in the OTP (see 7.3.1 OTP memory map). Note KEYSRC
bit:12
needs to also be set to 1.
- Bits marked ‘-’ are reserved.
reg:01:30
bits:15–13
Length Mnemoni
ID Type Description
(octets) c
The 1st IV 32-bit word for AES GCM core mode, or
when AES-CCM* core is used, the 4-bytes of the 13
01:34 4 RW AES_IV0 byte nonce (e.g. iv[12]) should be written into this
register: i.e. iv[10], iv[9], iv[8], iv[7], where iv[10] is
the least significant byte.
Register file: 0x00-0x1 – General configuration registers, sub-register 0x34 of register file 0x01, this is the 1st
IV 32-bit word for AES GCM core mode, or when AES-CCM* core is used, the 4-bytes of the 13 byte nonce
(e.g. iv[12]) should be written into this register: i.e. iv[10], iv[9], iv[8], iv[7], where iv[10] is the least
significant byte.
Length Mnemoni
ID Type Description
(octets) c
The 2nd IV 32-bit word for AES GCM core mode, or
when AES-CCM* core is used, the 4-bytes of the 13
01:38 4 RW AES_IV1 byte nonce (e.g. iv[12]) should be written into this
register: i.e. iv[6], iv[5], iv[4], iv[3], where iv[6] is the
least significant byte
Register file: 0x00-0x1 – General configuration registers, sub-register 0x38 of register file 0x01, this is the 2nd
IV 32-bit word for AES GCM core mode, or when AES-CCM* core is used, the 4-bytes of the 13 byte nonce
(e.g. iv[12]) should be written into this register: i.e. iv[6], iv[5], iv[4], iv[3], where iv[6] is the least significant
byte.
Length
ID Type Mnemonic Description
(octets)
The 3rd IV 32-bit word for AES GCM core
mode, or when AES-CCM* core is used, the 4-
bytes of the 13 byte nonce (e.g. iv[12])
01:3C 4 RW AES_IV2
should be written into this register: i.e. iv[2],
iv[1], iv[0], don’t care, where iv[2] is the least
significant byte
Register file: 0x00-0x1 – General configuration registers, sub-register 0x3C of register file 0x01 this is the 3rd
IV 32-bit word for AES GCM core mode, or when AES-CCM* core is used, the 4-bytes of the 13 byte nonce
(e.g. iv[12]) should be written into this register: i.e. iv[2], iv[1], iv[0], don’t care, where iv[2] is the least
significant byte.
Length
ID Type Mnemonic Description
(octets)
When AES-CCM* core is used, the payload
01:40 2 RW AES_IV3 length needs to be programmed here.
This is not used in the AES GCM core mode.
Register file: 0x00-0x1 – General configuration registers, sub-register 0x40 of register file 0x01, is a 16-bit
register which needs to contain the length of the payload which the AES engine is going to decrypt/encrypt.
This register is not used in the AES GCM core mode.
Length
ID Type Mnemonic Description
(octets)
The two bytes of the 13 byte nonce (e.g.
iv[12]) should be written into this register:
01:42 2 RW AES_IV4 i.e. iv[12], iv[11], where iv[12] is the least
significant byte.
This is not used in the AES GCM core mode.
Register file: 0x00-0x1 – General configuration registers, sub-register 0x42 of register file 0x01, is a 16-bit
register which contains two bytes of the 13 byte nonce (e.g. iv[12]): i.e. iv[12], iv[11], where iv[12] is the
least significant byte. This register is not used in the AES GCM core mode.
Length
ID Type Mnemonic Description
(octets)
01:44 8 RW DMA_CFG The DMA configuration register
Register file: 0x00-0x1 – General configuration registers, sub-register 0x44 of register file 0x01, this is the
configuration register for the AES-DMA engine. The AES-DMA Engine performs encryption/authentication of
packets and transfers data from/to the RAMs/buffers.
DST_ADDR
SRC_ADDR
DST_PORT
SRC_PORT
- - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
HDR_SIZE
- - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
reg:01:48 Note, the payload length does not include MIC (TAG_SIZE) and FCS lengths. Thus if RX or TX
bits:6-0
frame length is 100 bytes and header length is 10 bytes, MIC is 16 bytes and FCS is 2 bytes
then payload length is 100-10-16-2 = 72 bytes.
PYLD_SIZE Size of payload field in the packet to be transferred via the DMA (0 to 1023 bytes)
reg:01:48 Note, the payload length does not include MIC (TAG_SIZE) and FCS lengths. Thus if RX or TX
bits:16:7
frame length is 100 bytes and header length is 10 bytes, MIC is 16 bytes and FCS is 2 bytes
then payload length is 100-10-16-2 = 72 bytes.
- Bits marked ‘-’ are reserved.
reg:01:48
bits:23–17
Length
ID Type Mnemonic Description
(octets)
01:4C 1 RW AES_START Start AES operation
Register file: 0x00-0x1 – General configuration registers, sub-register 0x4C of register file 0x01, this is the
AES core operation register. The AES_START register contains the following bitmapped sub-fields:
AES_START
- - - - -
-
-
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
01:50 4 RW AES_STS The AES Status
Register file: 0x00-0x1 – General configuration registers, sub-register 0x50 of register file 0x01, this is the
AES core status register. The AES_STS register contains the following bitmapped sub-fields:
AES_DONE
AUTH_ERR
RAM_FULL
- -
0 0 0 1 0 0 0 0
reg:01:50
bit:0
AUTH_ERR AES authentication error. Write 1 to clear.
0: The tag/MIC that was supplied with the encrypted data has been validated correctly.
reg:01:50 1: The tag/MIC that was supplied with the encrypted data has not been validated correctly,
bit:1
therefore the protected (frame) content should not be trusted.
TRANS_ERR Indicates error with DMA transfer to memory. Write 1 to clear.
This will occur when writing more data to a buffer than the buffer can hold. Size of data is
reg:01:50 too big for the destination buffer.
bit:2
MEM_CONF Indicates access conflict between multiple masters (SPI host, CIA engine and AES-DMA
engine) trying to access same memory. Write 1 to clear.
reg:01:50
bit:3
RAM_EMPTY Indicates AES scratch RAM is empty. Write 1 to clear.
reg:01:50
bit:4
RAM_FULL Indicates AES scratch RAM is full. Write 1 to clear.
reg:01:50
bit:5
- Bits marked ‘-’ are reserved.
reg:01:50
bits:7–6
Length
ID Type Mnemonic Description
(octets)
01:54 16 RW AES_KEY The 128-bit KEY for the AES GCM/CCM* core
Register file: 0x00-0x1 – General configuration registers, sub-register 0x54 of register file 0x01, this is the
128-bit key (four 32-bit words) for the AES GCM/CCM* core.
Length
ID Type Mnemonic Description
(octets)
0x02 55 - STS_CONFIG Scrambled Timestamp Sequence configuration and status
registers
Register map register file 0x02 is concerned with the use of the DW3000 STS block. It contains a number of
sub-registers. An overview of these is given by Table 23. Each of these sub-registers is separately described
in the sub-sections below.
Table 23: Register file: 0x02 – STS configuration and status overview
Length
ID Type Mnemonic Description
(octets)
0x02:00 2 RW STS_CFG The STS configuration
Register file: 0x02 – STS configuration and status , sub-register 0x00, this contains the configuration settings
for STS generation. The STS_CFG register contains the following bitmapped sub-fields:
- - - - - - - - CPS_LEN
0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1
Length
ID Type Mnemonic Description
(octets)
Register file: 0x02 – STS configuration and status , sub-register 0x04, this contains the control bits of STS
generation. The STS_CTRL register contains the following bitmapped sub-fields:
RST_LAST
LOAD_IV
- - - - - -
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
02:08 2 RW STS_STS The STS status
Register file: 0x02 – STS configuration and status , sub-register 0x08, this contains the status of STS
reception. The STS_STS register contains the following bitmapped sub-fields:
- - - - ACC_QUAL
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
02:0C 16 RW STS_KEY The 128-bit KEY for the STS
Register file: 0x02 – STS configuration and status , sub-register 0x0C, this is the 128-bit key (four 32-bit
words) used by the AES-128 block for the generation of the scrambled timestamp sequence (STS). (The
lower order octets are at lower offset addresses). Please refer to in § 6 – Secure ranging / timestamping for
more details on this process. The default value is 0x738123B B5E5A4ED 8DF43A20 C9A375FA.
Length
ID Type Mnemonic Description
(octets)
02:1C 16 RW STS_IV The 128-bit IV for the STS
Register file: 0x02 – STS configuration and status , sub-register 0x1C, this is the 128-bit IV (four 32-bit words)
used by the AES-128 block for the generation of the scrambled timestamp sequence (STS). (The lower order
octets are at lower offset addresses). Please refer to in § 6 – Secure ranging / timestamping for more details
on this process. Default value is 0x1.
Note: Sub-register 0x0F:48 – Counter debug contains the current value of the low 32-bits of the STS_IV.
Length
ID Type Mnemonic Description
(octets)
0x03 RW RX_TUNE Receiver tuning parameters
Register map register file 0x03 is for control and configuration of the DW3000 receiver. The following tuning
parameters should be configured depending on the channel used. They optimise the receiver performance,
when 64 MHz PRF has been configured. Other sub-registers in this Register file are reserved and should not
be modified.
© Decawave Ltd 2019 Version 1.1 Page 125 of 255
DW3000 User Manual
Note: When 16 MHz PRF is used, then the RX_TUNE_EN bit (bit 0 in register DGC_CFG) needs to be cleared.
Length
ID Type Mnemonic Description
(octets)
03:18 2 RW DGC_CFG The RX tuning configuration register
Register file: 0x03 – Receiver tuning parameters, sub-register 0x18, this is a RX tune configuration register, it
contains the following bitmapped sub-fields:
RX_TUNE_EN
- THR_64
1 1 1 1 0 0 0 0 1 1 1 1 0 1 0 1
Length
ID Type Mnemonic Description
(octets)
03:60 4 RW DGC_DBG Reports DGC information
Register file: 0x03 – Receiver tuning parameters, sub-register 0x60, this is a DGC reporting register, it
contains the following bitmapped sub-fields:
- - - - - - - - - - - - - - - - - - - - - - - - - - -
-
The individual DGC_DBG register sub-fields are described below:
reg:03:60
bits:30-28
- Bits marked ‘-’ are reserved.
reg:03:18
bits: various
Length
ID Type Mnemonic Description
(octets)
0x04 12 RW EXT_SYNC External synchronisation control and RX calibration
Register map register file 0x04 is for control of the DW3000 synchronisation hardware, and RX calibration
function.
There is a separate application note giving details of the external synchronisation. Please consult with
Decawave applications support team for details. The capabilities of the DW3000 with respect to external
synchronisation are described briefly in section 7.1- External Synchronisation.
Length
ID Type Mnemonic Description
(octets)
04:00 4 RW EC_CTRL External clock synchronisation counter configuration
Register file: 0x04 – External sync control and RX calibration, sub-register 0x00 is the External clock
synchronisation counter configuration register, EC_CTRL. The EC_CTRL register is used to configure the
external synchronisation mode. The EC_CTRL register contains the following sub-fields:
- - - - - - - - - - - - - - - - - - - - OSTS_WAIT - -
-
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
The fields of the EC_CTRL register identified above are individually described below:
Field Description of fields within Sub-register 0x04:00 External clock sync control
- Bits marked ‘-’ are reserved.
reg:04:00
bits:various
OSTS_WAIT Wait counter used for external timebase reset. See 7.1.1 – One Shot Timebase Reset (OSTR)
Mode.
reg:04:00
bits:10:3
OSTR_MODE External timebase reset mode enable bit. For details of use, please refer to section 7.1.1 –
One Shot Timebase Reset (OSTR) Mode.
reg:04:00
bit:11
Length
ID Type Mnemonic Description
(octets)
04:0C 4 RW RX_CAL RX calibration block configuration
Register file: 0x04 – External sync control and RX calibration, sub-register 0x0C is RX calibration block
configuration register, RX_CAL. The RX_CAL register is used to configure the RX calibration block prior to
enabling the RX operation. The RX_CAL register contains the following sub-fields:
CAL_MODE
CAL_EN
- - - - - - - - - - - - COMP_DLY - - - - - - - - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The fields of the RX_CAL register identified above are individually described below:
reg:04:0C
bits:various
CAL_MODE RX calibration mode:
0 = normal mode, should be set to this for normal receiver operation
reg:04:0C 1 = calibration mode, needs to be set when RX calibration is perfomed
bits:1:0
2, 3 = reserved vaues
CAL_EN RX calibration enable.
Set this to 1 to start RX calibration. The bit will self-clear when calibration is finished. The
reg:04:0C RX_CAL_STS will be set when calibration is complete.
bit:4
COMP_DLY RX calibration tuning value. The host should set this to 0x2, for optimal performance. Other
values should not be used.
reg:04:0C
bits:19:16
Length
ID Type Mnemonic Description
(octets)
04:14 4 RW RX_CAL_RESI RX calibration block result I
Register file: 0x04 – External sync control and RX calibration, sub-register 0x14 is RX calibration block result
register. This register reports the result once the RX calibration is complete. It is a 29-bit register. If a value of
0x1fffffff is read back then the calibration has failed and the host should not use receiver function. The
device RX calibration should be repeated. If either RX_CAL_RESI or RX_CAL_RESQ report failure the RX cal
should be repeated.
Length
ID Type Mnemonic Description
(octets)
04:1C 4 RW RX_CAL_RESQ RX calibration block result Q
Register file: 0x04 – External sync control and RX calibration, sub-register 0x1C is RX calibration block result
register. This register reports the result once the RX calibration is complete. It is a 29-bit register. If a value of
0x1fffffff is read back then the calibration has failed and the host should not use receiver function. The
device RX calibration should be repeated. If either RX_CAL_RESI or RX_CAL_RESQ report failure the RX cal
should be repeated.
Length
ID Type Mnemonic Description
(octets)
04:20 1 RW RX_CAL_STS RX calibration block status
Register file: 0x04 – External sync control and RX calibration, sub-register 0x20 is RX calibration block status
register. This register reports the status once the RX calibration is complete. It is a single bit register. If bit 0
is set, the RX calibration is complete, host can write 1 to clear.
Length
ID Type Mnemonic Description
(octets)
0x05 47 - GPIO_CTRL General Purpose Input-Output control registers
Register map register file 0x05 is concerned with the use of the GPIO. It contains a number of sub-registers.
An overview of these is given by Table 25. Each of these sub-registers is separately described in the sub-
sections below.
Note: the GPIO clocks need to be turned on, before enabling or disabling the GPIO mode or value. The
GPIO clocks are enabled by setting GPIO_CLK_EN, GPIO_DCLK_EN and GPIO_DRST_N in Sub-register
0x11:04 – Clock control
Table 25: Register file: 0x05 – GPIO control and status overview
OFFSET in Register
Mnemonic Description
0x05
0x00 GPIO_MODE GPIO Mode Control Register
0x04 GPIO_PULL_EN GPIO Drive Strength and Pull Control
0x08 GPIO_DIR GPIO Direction Control Register
0x0C GPIO_OUT GPIO Data Output Register
0x10 GPIO_IRQE GPIO Interrupt Enable
OFFSET in Register
Mnemonic Description
0x05
0x14 GPIO_ISTS GPIO Interrupt Status
0x18 GPIO_ISEN GPIO Interrupt Sense Selection
0x1C GPIO_IMODE GPIO Interrupt Mode (Level / Edge)
0x20 GPIO_IBES GPIO Interrupt “Both Edge” Select
0x24 GPIO_ICLR GPIO Interrupt Latch Clear
0x28 GPIO_IDBE GPIO Interrupt De-bounce Enable
0x2C GPIO_RAW GPIO Raw State
Length
ID Type Mnemonic Description
(octets)
05:00 4 RW GPIO_MODE GPIO mode control register
Register file: 0x05 – GPIO control and status, sub-register 0x00 is the GPIO Mode Control Register,
GPIO_MODE. The GPIO_MODE register is used to select whether the GPIO is operating as a GPIO or has
another special function. The GPIO_MODE register contains the following sub-fields:
MSGP7
MSGP6
MSGP5
MSGP4
MSGP3
MSGP2
MSGP1
MSGP0
-
-
-
-
-
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The fields of the GPIO_MODE register identified above are individually described below:
Length
ID Type Mnemonic Description
(octets)
05:04 2 RW GPIO_PULL_EN GPIO drive strength and pull control
Register file: 0x05 – GPIO control and status, sub-register 0x04 can be used to lower the drive strength of the
GPIOs. Setting to 0 will lower the drive strength.
GPEN0
-
-
-
-
-
-
-
0 0 1 1 0 0 0 1 1 1 1 1 1 1 1 1
Length
ID Type Mnemonic Description
(octets)
05:08 2 RW GPIO_DIR GPIO direction control register
Register file: 0x05 – GPIO control and status, sub-register 0x08 is the GPIO Direction Control Register,
GPIO_DIR. The GPIO_DIR register applies to the GPIO pins when they are selected to operate as GPIOs via
the GPIO_MODE register. It contains a bit for each GPIO to individually configure that GPIO as an input or
an output. A GDP direction bit value of 1 means the pin is an input. A GDP bit value of 0 means the pin is an
output.
GDP8
GDP7
GDP6
GDP5
GDP4
GDP3
GDP2
GDP1
GDP0
-
-
-
-
-
-
-
0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
The fields of the GPIO_DIR register identified above are individually described below:
Length
ID Type Mnemonic Description
(octets)
05:0C 2 RW GPIO_OUT GPIO data output configuration register
Register file: 0x05 – GPIO control and status, sub-register 0x0C is the GPIO data output register. The
GPIO_OUT register applies to the GPIO pins when they are selected to operate as GPIO outputs via the
GPIO_MODE and GPIO_DIR registers. It contains a bit for each GPIO pin to individually select the data to
output on the GPIO output pin. When reading from the GPIO_OUT register output value bits will show the
current output setting for the GPIO pins. Note, this does not mean this is being output since that depends
also on the appropriate selection of the GPIO_MODE and GPIO_DIR registers.
GOP8
GOP7
GOP6
GOP5
GOP4
GOP3
GOP2
GOP1
GOP0
-
-
-
-
-
-
-
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The fields of the GPIO_OUT register identified above are individually described below:
Field Description of fields within Sub-register 0x05:0C – GPIO data output configuration
GOP0 Output state setting for the GPIO0 output. Reading this bit shows the current setting for
reg:05:0C GPIO0. Value: 1 = logic 1 voltage high output and, value 0 = logic 1 voltage low output.
bit:0
GOP1 Output state setting for GPIO1. (See GOP0).
reg:05:0C
bit:1
GOP2 Output state setting for GPIO2. (See GOP0).
reg:05:0C
bit:2
GOP3 Output state setting for GPIO3. (See GOP0).
reg:05:0C
bit:3
GOP4 Output state setting for GPIO4. (See GOP0).
reg:05:0C
bit:4
GOP5 Output state setting for GPIO5. (See GOP0).
reg:05:0C
bit:5
GOP6 Output state setting for GPIO6. (See GOP0).
reg:05:0C
bit:6
GOP7 Output state setting for GPIO7. (See GOP0).
reg:05:0C
bit:7
GOP8 Output state setting for GPIO8. (See GOP0).
reg:05:0C
bit:8
- Bits marked ‘-’ are reserved.
reg:05:08
bits:15–9
Length
ID Type Mnemonic Description
(octets)
05:10 2 RW GPIO_IRQE GPIO interrupt enable
Register file: 0x05 – GPIO control and status, sub-register 0x10 is the GPIO interrupt enable register. The
GPIO_IRQE register allows a GPIO input pin to be selected as an interrupt source into the DW3000.
Additional configuration registers GPIO_IMODE, GPIO_ISEN, GPIO_IBES and GPIO_IDBE allow the interrupt
to be set as level sensitive with control of whether it is the low or high state that generates the interrupt, or
as edge sensitive with control of the edge(s) that generates the interrupt, and includes a configurable de-
bounce circuit that can be used to ignore transients on the input. The GPIO_IRQE register contains a bit for
each GPIO pin to allow each to be individually selected as interrupt source. Setting the appropriate bit to 1
enables the corresponding GPIO input as an interrupt source, a value of 0 disables that interrupt. When a
GPIO interrupt is triggered it is signalled to the host via the GPIOIRQ event status bit in Sub-register 0x00:44
– System event status. The bits of the GPIO_IRQE register are as following:
GIRQ E4
GIRQ E3
GIRQE8
GIRQE7
GIRQE6
GIRQE5
GIRQE2
GIRQE1
GIRQE0
- - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
05:14 2 RW GPIO_ISTS GPIO interrupt status
Register file: 0x05 – GPIO control and status, sub-register 0x14 is the GPIO interrupt status register. The
GPIO_ISTS register acts to set the state/event that gives rise to a GPI interrupt. Assuming that the GPIO is an
input and that it is enabled as an interrupt via the GPIO_IRQE register, then the GPIO_IMODE register
together with GPIO_ISEN selects whether the interrupt is level or edge sensitive, and this GPIO_ISTS register
selects which level or edge is the state/event that causes the interrupt. The GPIO_ISTS bits are as follows:
GISTS8
GISTS7
GISTS6
GISTS5
GISTS4
GISTS3
GISTS2
GISTS1
GISTS0
- - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The bits of the GPIO_ISTS register identified above are individually described below:
GISTS0 Value 1 means GPIO0 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:0
GISTS1 Value 1 means GPIO1 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:1
GISTS2 Value 1 means GPIO2 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:2
GISTS3 Value 1 means GPIO3 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:3
GISTS4 Value 1 means GPIO4 gave rise to the GPIOIRQ SYS_STATUS event..
reg:05:14
bit:4
GISTS5 Value 1 means GPIO5 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:5
GISTS6 Value 1 means GPIO6 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:6
GISTS7 Value 1 means GPIO7 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:7
GISTS8 Value 1 means GPIO8 gave rise to the GPIOIRQ SYS_STATUS event.
reg:05:14
bit:8
Length
ID Type Mnemonic Description
(octets)
05:18 2 RW GPIO_ISEN GPIO interrupt sense selection
Register file: 0x05 – GPIO control and status, sub-register 0x18 is the GPIO interrupt sense selection register.
The GPIO_ISEN register acts to set the state/event that gives rise to a GPI interrupt. Assuming that the GPIO
is an input and that it is enabled as an interrupt via the GPIO_IRQE register, then the GPIO_IMODE register
selects whether the interrupt is level or edge sensitive, and this register GPIO_ISENGPIO_ISEN selects which
level or edge is the state/event that causes the interrupt. The GPIO_ISEN register contains a bit for each
GPIO pin to allow each to be individually configured. The bits are as follows:
GISEN8
GISEN7
GISEN6
GISEN5
GISEN4
GISEN3
GISEN2
GISEN1
GISEN0
- - - - - - - - - - - - - - - - - - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The bits of the GPIO_ISEN register identified above are individually described below:
Field Description of fields within Sub-register 0x05:18 – GPIO interrupt sense selection
GISEN0 GPIO IRQ Sense selection GPIO0 input. Value 0 = Active high level sensitive interrupt or rising-
reg:05:18 edge triggered interrupt. Value 1 = Active low level sensitive interrupt or falling-edge
bit:0
triggered interrupt.
GISEN1 GPIO IRQ sense for GPIO1 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:1
GISEN2 GPIO IRQ sense for GPIO2 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:2
GISEN3 GPIO IRQ sense for GPIO3 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:3
GISEN4 GPIO IRQ sense for GPIO4 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:4
GISEN5 GPIO IRQ sense for GPIO5 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:5
Field Description of fields within Sub-register 0x05:18 – GPIO interrupt sense selection
GISEN6 GPIO IRQ sense for GPIO6 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:6
GISEN7 GPIO IRQ sense for GPIO7 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:7
GISEN8 GPIO IRQ sense for GPIO8 input. Value 0 = High or Rising-Edge, 1 = Low or falling-edge.
reg:05:18
bit:8
- Bits marked ‘-’ are reserved and should be written as zero.
reg:05:18
bits:31–9
Length
ID Type Mnemonic Description
(octets)
05:1C 2 RW GPIO_IMODE GPIO interrupt mode (level/edge)
Register file: 0x05 – GPIO control and status, sub-register 0x1C is the GPIO interrupt mode selection register.
Assuming that the GPIO is an input and enabled as an interrupt via the GPIO_IRQE register, then this
GPIO_IMODE register acts to select whether the interrupt is level sensitive or edge triggered. The
GPIO_IMODE register contains a bit for each GPIO pin to allow each to be individually configured. The bits
are as follows:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The bits of the GPIO_IMODE register identified above are individually described below:
Length
ID Type Mnemonic Description
(octets)
05:20 2 RW GPIO_IBES GPIO interrupt “Both Edge” selection
Register file: 0x05 – GPIO control and status, sub-register 0x20 is the GPIO interrupt “Both Edge” selection
register. This only applies when edge sensitive interrupts are enabled in the GPIO_IMODE register. In this
case the GPIO_ISEN register normally acts to select which edge triggers the interrupt. This GPIO_IBES
register overrides the GPIO_ISEN register to select both edges as which edge triggers the interrupt. The
GPIO_IBES register contains a bit for each GPIO pin to allow each to be individually configured. The bits are
as follows:
- - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The bits of the GPIO_IBES register identified above are individually described below:
Field Description of fields within Sub-register 0x05:20 – GPIO interrupt “Both-Edge” selection
GIBES0 GPIO IRQ “Both Edge” selection for GPIO0 input. Value 0 = GPIO_IMODE register selects the
reg:05:20 edge. Value 1 = Both edges trigger the interrupt.
bit:0
GIBES1 GPIO IRQ “Both Edge” selection for GPIO1 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:1
Field Description of fields within Sub-register 0x05:20 – GPIO interrupt “Both-Edge” selection
GIBES2 GPIO IRQ “Both Edge” selection for GPIO2 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:2
GIBES3 GPIO IRQ “Both Edge” selection for GPIO3 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:3
GIBES4 GPIO IRQ “Both Edge” selection for GPIO4 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:4
GIBES5 GPIO IRQ “Both Edge” selection for GPIO5 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:5
GIBES6 GPIO IRQ “Both Edge” selection for GPIO6 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:6
GIBES7 GPIO IRQ “Both Edge” selection for GPIO7 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:7
GIBES8 GPIO IRQ “Both Edge” selection for GPIO8 input. Value 0 = use GPIO_IMODE, 1 = Both Edges.
reg:05:20
bit:8
- Bits marked ‘-’ are reserved and should be written as zero.
reg:05:20
bits:15–9
Length
ID Type Mnemonic Description
(octets)
05:24 4 RW GPIO_ICLR GPIO interrupt latch clear
Register file: 0x05 – GPIO control and status, sub-register 0x24 is the GPIO interrupt clear register. When a
GPIO interrupt occurs that meets the configured criteria (edge/level etc.) that event is latched in an internal
interrupt latch. To clear the interrupt the host needs to write a 1 to the appropriate bit of this GPIO_ICLR
register. There is no way to read the interrupt latch, which means that only one GPIO can be enabled to
interrupt at a time, unless the host has some other external way to distinguish events. Although level
sensitive interrupts are latched, if the active level persists, then clearing the latch will be ineffective, since
the interrupt will occur again immediately. The GPIO_ICLR register contains a bit for each GPIO pin as
follows:
- - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The bits of the GPIO_ICLR register identified above are individually described below:
Field Description of fields within Sub-register 0x05:24 – GPIO interrupt latch clear
GICLR0 GPIO IRQ latch clear for GPIO0 input. Write 1 to clear the GPIO0 interrupt latch. Writing 0
reg:05:24 has no effect. Reading returns zero.
bit:0
GICLR1 GPIO IRQ latch clear for GPIO1 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:1
GICLR2 GPIO IRQ latch clear for GPIO2 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:2
GICLR3 GPIO IRQ latch clear for GPIO3 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:3
GICLR4 GPIO IRQ latch clear for GPIO4 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:4
GICLR5 GPIO IRQ latch clear for GPIO5 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:5
GICLR6 GPIO IRQ latch clear for GPIO6 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:6
GICLR7 GPIO IRQ latch clear for GPIO7 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:7
GICLR8 GPIO IRQ latch clear for GPIO8 input. Write 1 to clear the interrupt latch.
reg:05:24
bit:8
- Bits marked ‘-’ are reserved and should be written as zero.
reg:05:24
bits:15–9
Length
ID Type Mnemonic Description
(octets)
05:28 4 RW GPIO_IDBE GPIO interrupt de-bounce enable
Register file: 0x05 – GPIO control and status, sub-register 0x28 is the GPIO interrupt de-bounce enable
register. The GPIO_IDBE controls a filtering function that operates on the GPIO inputs prior to their
presentation into the GPIO interrupt logic. This de-bounce filter circuit removes short transients by using the
kilohertz clock (as enabled by the LP_CLK_EN bit in Sub-register 0x11:04 – Clock control) to sample the input
signal. See LP_CLK_DIV in Sub-register 0x11:08 – Sequencing control for a description of the kilohertz clock.
The de-bounce filter is active when a state change of the GPIO input needs to persist for two cycles of this
clock before it will be seen by the interrupt handling logic. The GPIO_IDBE register contains a bit for each
GPIO pin as follows:
GIDBE8
GIDBE7
GIDBE6
GIDBE5
GIDBE4
GIDBE3
GIDBE2
GIDBE1
GIDBE0
- - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The bits of the GPIO_IDBE register identified above are individually described below:
Field Description of fields within Sub-register 0x05:28 – GPIO interrupt de-bounce enable
GIDBE0 GPIO IRQ de-bounce enable for GPIO0. Value 1 = de-bounce enabled. Value 0 = de-bounce
reg:05:28 disabled.
bit:0
GIDBE1 GPIO1 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:1
GIDBE2 GPIO2 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:2
GIDBE3 GPIO3 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:3
GIDBE4 GPIO4 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:4
GIDBE5 GPIO5 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:5
GIDBE6 GPIO6 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:6
GIDBE7 GPIO7 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:7
GIDBE8 GPIO8 IRQ de-bounce configuration. Value 1 = de-bounce enabled, 0 = de-bounce disabled.
reg:05:28
bit:8
- Bits marked ‘-’ are reserved and should be written as zero.
reg:05:28
bits:15–9
Length
ID Type Mnemonic Description
(octets)
05:2C 2 RO GPIO_RAW GPIO raw state
Register file: 0x05 – GPIO control and status, sub-register 0x2C allows the raw state of the GPIO pin to be
read. The GPIO_RAW register contains a bit for each GPIO pin as follows:
GRAWP8
GRAWP7
GRAWP6
GRAWP5
GRAWP4
GRAWP3
GRAWP2
GRAWP1
GRAWP0
- - - - - - -
- - - - - - - 0 0 0 0 0 0 0 0 0
The bits of the GPIO_RAW register identified above are individually described below:
Length
ID Type Mnemonic Description
(octets)
0x06 - - DRX_CONF Digital receiver configuration
Register map register file 0x06 is concerned with the low-level digital receiver configuration. It contains a
number of sub-registers. An overview of these is given by Table 26. Each of these sub-registers is separately
described in the sub-sections below.
OFFSET in Register
Mnemonic Description
0x06
0x00 DTUNE0 PAC configuration
0x02 RX_SFD_TOC SFD timeout
0x04 PRE_TOC Preamble detection timeout
0x0C DTUNE3 Receiver tuning register
0x14 DTUNE_5 Digital Tuning Reserved register
0x29 DRX_CAR_INT Carrier recovery integrator register
Length
ID Type Mnemonic Description
(octets)
06:00 2 RW DTUNE0 Digital tuning register 0
Register file: 0x06 – Digital receiver configuration, sub-register 0x00 is a tuning register. The value here
needs to change depending on a number of parameters. Please take care not to write other values to this
register as doing so may cause the DW3000 to malfunction.
DT0B4
PAC
- - - - - - - - - - - - -
0 0 0 1 0 0 0 0 0 0 0 1 1 1 0 0
The bits of the DTUNE0 register identified above are individually described below:
Preamble Table 12 gives the recommended PAC size configuration for each preamble
length.
0x00 – is used for a PAC of 8
0x01 – is used for a PAC of 16
0x02 – is used for a PAC of 32
0x03 – is used for a PAC of 4.
DT0B4 Tuning bit 4 of digital tuning reg0. This bit should be cleared to zero for best performance.
reg:06:00
bit:4
- Bits marked ‘-’ are reserved and should not be modified.
reg:06:00
bits:15–2
Length
ID Type Mnemonic Description
(octets)
06:02 2 RW RX_SFD_TOC SFD detection timeout count
Register file: 0x06 – Digital receiver configuration, sub-register 0x02 is used to set the 16-bit SFD detection
timeout counter period, in units of preamble symbols. The SFD detection timeout starts running as soon as
preamble is detected. If the SFD sequence is not detected before the timeout period expires then the
timeout will act to abort the reception currently in progress, and set RXSTO event status bit. SFD timeout
events are also counted in Sub-register 0x0F:10 – SFD timeout error counter, assuming that counting is
enabled by the EVC_EN bit in Sub-register 0x0F:00 – Event counter control.
The purpose of the SFD detection timeout is to recover from the occasional false preamble detection events
that occur. By default this value is 65 symbols (64+8-8+1), which is set to match the default preamble, SFD
length and PAC size. When it is known that a shorter or longer preamble is being used then the RX_SFD_TOC
value can be reduced or increased appropriately. It is recommended to set it according to formula: preamble
length + 1 – PAC size + SFD length. (The reduction of the RX_SFD_TOC value by the PAC size is done because
one PAC size of the preamble length will be lost as part of the preamble detection).
WARNING: Please do NOT set RX_SFD_TOC to zero (disabling SFD detection timeout), because in the event
of false preamble detection, the IC will remain in receive mode until commanded to do otherwise by the
external microcontroller, which can lead to significant reduction in battery life.
Length
ID Type Mnemonic Description
(octets)
06:04 2 RW PRE_TOC Preamble detection timeout count
Register file: 0x06 – Digital receiver configuration, sub-register 0x04 is used to set the 16-bit preamble
detection timeout period, in units of PAC size symbols. The default/reset value is zero which disables the
preamble detection timeout. The preamble detection timeout starts running as soon as the receiver is
enabled to hunt for preamble. In the case of delayed receive (as commanded using the CMD_DRX) the
preamble detection timeout starts after the delay when the receiver actually turns on to hunt for preamble.
If a preamble sequence in not detected before the timeout period expires then the timeout will act to abort
the reception currently in progress, and set the RXPTO event status bit in Sub-register 0x00:44 – System
event status.
In cases where a response is expected at a particular time, this timeout can be used to flag that the expected
response is not starting on time and hence to turn off the receiver earlier than would otherwise be the case,
(i.e. if just employing the frame wait timeout). This can give a good power saving, in situations of sending a
message and awaiting a response that often does not come.
The PRE_TOC is programmed in units of PAC size, which can be 4, 8, 16 or 32 symbols. Table 9 gives the
preamble symbol lengths. The PAC size is set in DTUNE0. As this is a 16-bit counter the maximum preamble
detection timeout possible is 65535 × (PAC size), a period of over 250 ms for the smallest PAC size. A value
of zero disables the preamble detection timeout.
Example: Supposing our preamble length is 1024 symbols and the PAC size is set to 32 (in line with Table 12)
and, we send a message and know that the response (if present) will come after exactly 30 ms (because the
responder is using delayed send to begin the response exactly 30 ms after receiving our message). We can
command a 30 ms delayed receive (timed from our message transmission time) and have PRE_TOC
programmed to a value of 32, which is the preamble length (1024) divided by the PAC size (32).
Length
ID Type Mnemonic Description
(octets)
06:0C 4 RW DTUNE3 Digital receiver tuning register 3
Register file: 0x06 – Digital receiver configuration, sub-register 0x0C is a 32-bit tuning register. The value
here needs to change from the default 0xAF5F584C to 0xAF5F35CC for optimal receiver performance.
Length
ID Type Mnemonic Description
(octets)
06:14 4 RO DTUNE_5 Digital Tuning Reserved register
Register file: 0x06 – Digital receiver configuration, sub-register 0x14 is a reserved register.
Length
ID Type Mnemonic Description
(octets)
06:29 3 RO DRX_CAR_INT Carrier recovery integrator register
Register file: 0x06 – Digital receiver configuration, sub-register 0x29 is a read-only register estimate of the
remote transmitter’s frequency offset. This is generated during the reception of each packet as the receiver
locks on and compensates for the frequency offset of the transmitting device to successfully receive a
packet. This is a 21-bit signed number with the lower 17 bits (fractional part), and the upper 4 bits as the
integer portion of the number. When a packet is successfully received, this register can be read and
converted to the frequency error (in Hz) using the formula:
𝐶𝑖𝑛𝑡 × 2−17
𝐹𝑜𝑓𝑓𝑠𝑒𝑡 = 𝑁𝑠𝑎𝑚𝑝𝑙𝑒𝑠
2( 𝐹𝑠
)
𝑤ℎ𝑒𝑟𝑒
𝐶𝑖𝑛𝑡 = 𝑐𝑎𝑟𝑟𝑖𝑒𝑟 𝑖𝑛𝑡𝑒𝑔𝑟𝑎𝑡𝑜𝑟 𝑣𝑎𝑙𝑢𝑒
8192 𝑓𝑜𝑟 110𝑘𝑏/𝑠
𝑁𝑠𝑎𝑚𝑝𝑙𝑒𝑠 = {
1024 𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒
𝐹𝑠 = 998.4 × 106
Foffset is the absolute frequency error in Hz. It can be converted to a clock offset (in ppm) by scaling by the
carrier frequency as follows
𝐹𝑜𝑓𝑓𝑠𝑒𝑡
𝑂𝑓𝑓𝑠𝑒𝑡𝑝𝑝𝑚 = −106 ×
𝐹𝑐
𝑤ℎ𝑒𝑟𝑒
𝐹𝑜𝑓𝑓𝑠𝑒𝑡 = 𝑓𝑟𝑒𝑞𝑢𝑒𝑛𝑐𝑦 𝑜𝑓𝑓𝑠𝑒𝑡 𝑖𝑛 𝐻𝑧
𝐹𝑐 = 6489.6𝑀𝐻𝑧 𝑓𝑜𝑟 𝑐ℎ𝑎𝑛𝑛𝑒𝑙 5
The minus sign is produced by the process of measuring the clock offset.
For a particular channel, the formulas reduce to multiplying the content of the carrier integrator register
with the appropriate constant from the table below:
NOTE: The carrier recovery algorithm continues to run during the reception of the whole packet so that, in
processing a receive interrupt say, the DRX_CAR_INT register value reflects the value at the end of reception.
An alternative value is given in CIA_DIAG_0 register.
Length
ID Type Mnemonic Description
(octets)
0x07 - - RF_CONF Analog RF configuration
Register map register file 0x07 is concerned with the low-level configuration of the IC analog blocks. It
contains a number of sub-registers. An overview of these is given by Table 28. Each of these sub-registers is
separately described in the sub-sections below.
OFFSET
in
Mnemonic Description
Register
0x07
0x00 RF_ENABLE RF enable
0x04 RF_CTRL_MASK RF enable mask
0x14 RF_SWITCH RF switch configuration
0x1A RF_TX_CTRL_1 RF transmitter configuration
0x1C RF_TX_CTRL_2 RF transmitter configuration
0x28 TX_TEST Transmitter test configuration
0x34 SAR_TEST Transmitter Calibration – SAR temperature
sensor read enable
Length
ID Type Mnemonic Description
(octets)
07:00 4 RW RF_ENABLE RF control enable
Register file: 0x07 – Analog RF configuration block, sub-register 0x00 is a 32-bit configuration register for the
transceiver. This register can be used to enable TX RF blocks when exercising certain test modes (e.g.
Continuous Wave mode). Table 29: RF_ENABLE and RF_CTRL_MASK values shows the value to program to
this register when we want to force the transmitter on even when a packet is not being transmitted. Please
take care not to write other values to the reserved area of this register as doing so may cause the DW3000
to malfunction. Note: the same value should be written into RF_CTRL_MASK register.
Length
ID Type Mnemonic Description
(octets)
07:04 4 RW RF_CTRL_MASK RF control mask
Register file: 0x07 – Analog RF configuration block, sub-register 0x04 is a 32-bit configuration register for the
transceiver. This register can be used to enable TX RF blocks when exercising certain test modes (e.g.
Continuous Wave mode). Table 29: RF_ENABLE and RF_CTRL_MASK values shows the value to program to
this register when we want to force the transmitter on even when a packet is not being transmitted. Please
take care not to write other values to the reserved area of this register as doing so may cause the DW3000
to malfunction. Note: this register should match the value written into RF_ENABLE register.
Length
ID Type Mnemonic Description
(octets)
07:14 4 RW RF_SWITCH TX RX switch control
Register file: 0x07 – Analog RF configuration block, sub-register 0x14 is a 32-bit control register for the TXRX
switch. The RF_SWITCH register contains the following bitmapped sub-fields:
ANTSWEN
TRXSWEN
- - - - - - - - - - - - - - - - - - -
0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
reg:07:14
bits:various
Length
ID Type Mnemonic Description
(octets)
07:1A 1 RW RF_TX_CTRL_1 Analog TX control register
Register file: 0x07 – Analog RF configuration block, sub-register 0x1A is an 8-bit control register for the
transmitter. The value here needs to be set to 0x0E for the optimal performance.
Length
ID Type Mnemonic Description
(octets)
07:1C 4 RW RF_TX_CTRL_2 Analog TX control register
Register file: 0x07 – Analog RF configuration block, sub-register 0x1C is a 32-bit control register for the
transmitter. The value here needs to be set depending on the TX channel selected by the RF_CHAN
configuration in Sub-register 0x01:14 – Channel control. The values required are given in Table 30. Please
take care not to write other values to this register as doing so may cause the DW3000 to malfunction.
Field Description
PG_DELAY the Pulse Generator Delay value. Sets the width of the transmitted pulses thereby setting
the transmit bandwidth . The value used here depends on the TX channel selected by the
reg:07:1C RF_CHAN configuration in Sub-register 0x01:14 – Channel control. Recommended values
bits:5:0
are given in Table 31 below; note however that these values may need to be tuned for
spectral regulation compliance depending on external circuitry.
Reserved These fields are reserved. Program only as directed in Table 30.
reg:07:1C
bits:various
Length
ID Type Mnemonic Description
(octets)
07:28 1 RW TX_TEST Transmitter test register
Register file: 0x07 – Analog RF configuration block, sub-register 0x28, is used for configuring transmitter test
modes. It contains the following bitmapped sub-fields:
- - - - - - - - - - - - TX_ENTEST
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
07:34 1 RW SAR_TEST SAR temperature sensor read enable
Register file: 0x07 – Analog RF configuration block, sub-register 0x34, contains the following bitmapped sub-
fields:
SAR_RDEN
- - - - - - - - - - - - - - -
0 0 0 0 0 0 0 0
Field Description of fields within Sub-register 0x07:34 – SAR temperature sensor read enable
SAR_RDEN Writing 1 enables the SAR temperature sensor reading
reg:07:34
bit:2
- Bits marked ‘-’ in this register are reserved and should always be written as zero to avoid
any malfunction of the DW3000.
reg:07:34
bits:various
Length
ID Type Mnemonic Description
(octets)
07:40 8 RW LDO_TUNE Internal LDO voltage tuning parameter
Register file: 0x07 – Analog RF configuration block, sub-register 0x40 is the LDO voltage tuning register.
Please take care not to write to this register unless you are loading the calibrated value from OTP.
Note: When programming OTP memory the LDO_TUNE bits [15-12] need to be set to 0xf.
Length
ID Type Mnemonic Description
(octets)
07:48 4 RW LDO_CTRL LDO control
Register file: 0x07 – Analog RF configuration block, sub-register 0x48 is a 32-bit configuration register for the
transceiver. This register can be used to enable LDO blocks when excercising certain test modes (e.g.
Continuous Wave mode), please see DW3000 APIs for details [3]
Length
ID Type Mnemonic Description
(octets)
07:51 1 RW LDO_RLOAD LDO tuning register
Register file: 0x07 – Analog RF configuration block, sub-register 0x51 is a 8-bit tuning register for the
transceiver. This register should be set to 0x14 for optimal operation.
Length
ID Type Mnemonic Description
(octets)
0x08 - - TX_CAL Transmitter calibration block
Register file: 0x08 is the transmit calibration block concerned with ensuring the optimum configuration of
the transmit signal. It contains a number of sub-registers. An overview of these is given by Table 32. Each
of these sub-registers is separately described in the sub-sections below.
OFFSET in Register
Mnemonic Description
0x08
0x00 SAR_CTRL Transmitter Calibration – SAR control
0x04 SAR_STATUS Transmitter Calibration – SAR status
0x08 SAR_READING Transmitter Calibration – Latest SAR readings
0x0C SAR_WAKE_RD Transmitter Calibration – SAR readings at last wake-up
0x10 PGC_CTRL Transmitter Calibration – Pulse Generator control
0x14 PGC_STATUS Transmitter Calibration – Pulse Generator status
0x18 PG_TEST Transmitter Calibration – Pulse Generator test
0x1C PG_CAL_TARGET Transmitter Calibration – Pulse Generator count target value
Length
ID Type Mnemonic Description
(octets)
08:00 1 RW SAR_CTRL Transmitter Calibration – SAR control
Register file: 0x08 – Transmitter calibration block, sub-register 0x00, contains the following bitmapped sub-
fields:
SAR_START
- - - - - - - - - - - - - - -
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
08:04 1 RW SAR_STATUS Transmitter Calibration – SAR status
Register file: 0x08 – Transmitter calibration block, sub-register 0x04, contains the following bitmapped sub-
fields:
SAR_DONE
- - - - - - - - - - - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
08:08 3 RO SAR_READING Transmitter Calibration –Latest SAR readings
Register file: 0x08 – Transmitter calibration block, sub-register 0x08, contains the following bitmapped sub-
fields:
This uses the stored 22°C reading in the OTP that was recorded during production test.
For additional details please refer to section 7.4 – Measuring IC temperature and voltage.
Length
ID Type Mnemonic Description
(octets)
08:0C 2 RO SAR_WAKE_RD Transmitter Calibration – SAR readings at last wake-up
Register file: 0x08 – Transmitter calibration block, sub-register 0x06, is a 16-bit status register that contains
the following bitmapped sub-fields:
Length
ID Type Mnemonic Description
(octets)
08:10 2 RW PGC_CTRL Transmitter Calibration – Pulse Generator control
Register file: 0x08 – Transmitter calibration block, sub-register 0x10, is a 16-bit control register that controls
the pulse generator calibration. There are two modes of operation:
1. PGC_CNT: calculation of PG_COUNT value from a given PG_DELAY
2. PGC_DLY: auto-calibration which updates the PG_DELAY given a reference PG_COUNT value.
When operating in PGC_CNT mode when the calibration is compete it will report new pulse generator count
value based on the current PG_DELAY value. When operating in PGC_DLY mode and the calibration is
complete, a new pulse generator delay will be generated based on the current PG_TARGET value.
The count value is then stored automatically into the PGC_STATUS register. This delay count gives a
consistent reflection of the bandwidth regardless of temperature.
PGC_AUTO_CAL
PGC_TMEAS
PG_START
- -
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
PGC_TMEAS Number of clock cycles over which to run the pulse generator calibration counter.
These are the 4 most significant bits of a 10 bit counter clocked by the system clock.
reg:08:10
bit5:2
- Bits marked ‘-’ in register PGC_CTRL are reserved and should not be changed to avoid
reg:08:10 any malfunction of the DW3000.
Length
ID Type Mnemonic Description
(octets)
08:14 2 RO PGC_STATUS Transmitter Calibration – PG calibration status
Register file: 0x08 – Transmitter calibration block, sub-register 0x09, is a 16-bit status register.
The reference value that is required for temperature bandwidth compensation is the contents of the
PGC_STATUS register, PG_DELAY_CNT, which represents a counter incremented with every pulse generated
by the DW3000 IC’s internal pulse generator. Intuitively, this count value (referred to as PG_COUNT) will vary
inversely with the PG_DELAY value – if the delay between pulses increases, the number of pulses within a
given timeframe will decrease, and vice versa. PG_DELAY_CNT represents a counter that increments with
every pulse generated by the DW3000 IC’s internal pulse generator.
The PG_DELAY value will not give the same bandwidth for varying temperatures. The PG_COUNT value,
however, will give a stable bandwidth across all temperatures. It is taken as a reference as the DW3000 has a
pulse generator auto-calibration procedure; the procedure takes a PG_COUNT value and calculates the
PG_DELAY value from this. This PG_DELAY value can then be programmed in to give the desired bandwidth.
PG_DELAY_CNT
- - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
08:18 2 RW PG_TEST Transmitter Calibration – Pulse Generator test
Register file: 0x08 – Transmitter calibration block, sub-register 0x18 is an 16-bit configuration register for use
in setting the transmitter into continuous wave (CW) mode. This CW mode is employed during the crystal
trimming operation which may be done at module manufacturing stage as part of calibrating the crystal
oscillator’s operating frequency. At all other times, for normal operation, the value in this register should be
left in its default power on value of 0x0000. Table 33 shows the values to write to this register in either
mode.
For more details of crystal trimming please refer to section 10.1 – IC calibration – crystal oscillator trim.
Length
ID Type Mnemonic Description
(octets)
08:1C 2 RO PG_CAL_TARGET Transmitter Calibration – PG count target value
Register file: 0x08 – Transmitter calibration block, sub-register 0x1C, is a 16-bit register that contains
PG_TARGET value. Target value of PG_COUNT at which point PG auto cal will complete. The device will
return a count value as close as possible to the target. The register contains the following bitmapped sub-
fields:
Length
ID Type Mnemonic Description
(octets)
0x09 - - FS_CTRL Frequency synthesiser control block
Register map register file 0x09 is the frequency synthesiser control block. Its main functionality is the
generation of the carrier frequency necessary for the operating channel. It contains a number of sub-
registers. An overview of these is given by Table 34. Each of these sub-registers is separately described in
the sub-sections below.
Table 34: Register file: 0x09 – Frequency synthesiser control block overview
Length
ID Type Mnemonic Description
(octets)
09:00 2 RW PLL_CFG PLL configuration
Register file: 0x09 – Frequency synthesiser control block, sub-register 0x00 is the PLL configuration register.
This allows per channel configuration of the PLL.
Length
ID Type Mnemonic Description
(octets)
09:04 1 RW PLL_CC PLL coarse code – starting code for calibration procedure
Register file: 0x09 – Frequency synthesiser control block, sub-register 0x04 is the PLL configuration register.
It sets the starting code for PLL calibration. If OTP address 0x35 (PLL_LOCK_CODE) has a non-zero value, it
should be copied to this register, prior to PLL calibration, the USE_OLD bit should also be set.
22
21
20
19
18
17
16
15
14
13
12
11
10 7 6 5 4 3 2 1 0
24
23
9
8
- CH5_CODE CH9_CODE
0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1
The bits of the PLL_CC register identified above are individually described below:
Length
ID Type Mnemonic Description
(octets)
09:08 2 RW PLL_CAL PLL calibration configuration
Register file: 0x09 – Frequency synthesiser control block, sub-register 0x08 is the PLL calibration register.
15
14
13
12
11
10
7 6 5 4 3 2 1 0
9
8
USE_OLD
CAL_EN
PLL_CFG_LD
0 0 0 1 1 0 0 0 1
The bits of the PLL_CAL register identified above are individually described below:
Length
ID Type Mnemonic Description
(octets)
09:14 1 RW XTAL Frequency synthesiser – Crystal trim
Register file: 0x09 – Frequency synthesiser control block, sub-register 0x14 is the crystal trim register. This
allows a fine control over the crystal oscillator to tune the DW3000 operating frequencies quite precisely.
For details of the use of this register please refer to section 10.1 – IC calibration – crystal oscillator trim.
- - XTAL_TRIM
0 0 0 0 0 0 0 0
The bits of the XTAL register identified above are individually described below:
Length
ID Type Mnemonic Description
(octets)
0x0A 23 - AON Always on system control interface block
Register map register file 0x0A is the Always-On system control block, (AON).
The AON block contains a low-power configuration array that remains powered-up as long as power (from
the battery, for example) is supplied to the DW3000 via the VDD1 pin. User configurations, from SPI
accessible host interface registers, can be automatically saved in the AON memory when the DW3000 enters
SLEEP or DEEPSLEEP states and automatically restored from the AON memory when the DW3000 wakes
from sleeping. Additional discussion of these modes may be found in section 2.5.1 – SLEEP and DEEPSLEEP.
This Register file: 0x0A – Always-on system control interface, controls the functions that remain on when the
IC enters its low-power SLEEP or DEEPSLEEP states, and configures the activities the DW3000 should take as
the IC wakes from these sleep states. It contains a number of Sub-registers. An overview of these is given by
Table 36. Each of these Sub-registers is separately described in the sub-sections below.
OFFSET in Register
Mnemonic Description
0x0A
0x00 AON_DIG_CFG AON wake up configuration
register
0x04 AON_CTRL AON control register
0x08 AON_RDATA AON direct access read data result
0x0C AON_ADDR AON direct access address
0x10 AON_WDATA AON direct access write data
0x14 AON_CFG AON configuration register
Length
ID Type Mnemonic Description
(octets)
0A:00 3 RW AON_DIG_CFG AON wake up configuration register
Register file: 0x0A – Always-on system control interface, sub-register 0x00 is a 24-bit configuration register
that is used to control what the DW3000 IC does as it wakes up from low-power SLEEP or DEEPSLEEP states.
The AON_DIG_CFG register contains the following bitmapped sub-fields:
ONW_AON_DLD
ONW_RUN_SAR
ONW_PGFCAL
ONW_GO2RX
ONW_GO2IDLE
- - - - - - - - - - - - - - -
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
0A:04 1 RW AON_CTRL AON control register
Register file: 0x0A – Always-on system control interface, sub-register 0x04 is an 8-bit control register. The
bits in this register in general cause direct activity within the AON block with respect to the stored AON
memory. The bits then act like commands that are processed by the DW3000 and the bits are automatically
cleared as the activity is taken.
DCA_WRITE_HI
CFG_UPLOAD
DCA_WRITE
DCA_READ
RESTORE
DCA_ENAB
SAVE
-
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
0A:08 1 RW AON_RDATA AON direct access read data result
Register file: 0x0A – Always-on system control interface, sub-register 0x08 is an 8-bit register used to return
the result of a direct access read of a location in the AON memory array. The location to read from is
specified by Sub-register 0x0A:0C – AON memory address and the read is initiated using the DCA_READ
control bit in Sub-register 0x0A:04 – AON control register.
Figure 28 shows the procedural flow for reading from specified address in AON memory:
YES Want to do
another read
?
NO
DONE:
Return Result read from Address
Length
ID Type Mnemonic Description
(octets)
0A:0C 2 RW AON_ADDR AON direct access address
Register file: 0x0A – Always-on system control interface, sub-register 0x0C is an 16-bit register used to
specify the address (9-bits) for a direct access read of the AON memory array. The read is initiated using the
DCA_READ control bit in Sub-register 0x0A:04 – AON control register and the read result is returned in Sub-
register 0x0A:08 – AON read data.
Length
ID Type Mnemonic Description
(octets)
0A:10 1 RW AON_WDATA AON direct access write data
Register file: 0x0A – Always-on system control interface, sub-register 0x10 is is an 8-bit register used to
provide the data for the direct write access of the AON memory array, to the address specified by Sub-
register 0x0A:0C – AON memory address. The write is initiated using the DCA_WRITE control bit in Sub-
register 0x0A:04 – AON control register.
Figure 29 shows the procedural flow for writing to specified address in AON memory:
Write Data to
Register 0A:10 – AON_WDATA
NO
Address >= 0x100?
YES
YES
Want to do
another write
?
NO
DONE:
Length
ID Type Mnemonic Description
(octets)
0A:14 1 RW AON_CFG AON configuration register
Register file: 0x0A – Always-on system control interface, sub-register 0x14 is an 8-bit configuration register
for the always on block. The fields of this register are interpreted inside the AON block, which can only
happen after these are loaded into the AON block via the CFG_UPLOAD command in Sub-register 0x0A:04 –
AON control register. The AON_CFG register contains the following fields:
WAKE_WUP
PRES_SLEEP
WAKE_CSN
WAKE_CNT
BROUT_EN
SLEEP_EN
-
-
0 0 0 0 1 1 0 0
The fields of the AON_CFG register identified above are individually described below:
Note:
There are three mechanisms to wake the DW3000:
• using the WAKEUP line when the WAKE_WUP configuration is set to 1
• using SPICSn when the WAKE_CSN configuration is set to 1,
• using the sleep timer when the WAKE_CNT configuration is 1 and the sleep counter is
enabled via the WAKE_CNT bit in AON_CFG.
• Full chip reset
If none of these wake up mechanisms are enabled and the DW3000 is put into DEEPSLEEP state then to take
DW3000 out of sleep a reset needs to be performed with RSTn pin, or by removing power to the device.
The sleep counter time (SLEEP_TIM) is 16-bits wide, but represents the upper 16-bits of a 28-bit counter, i.e.
the low order bit is equal to 4096 counts. For example, if the low power oscillator frequency is 20000 Hz
then programming the SLEEP_TIM with a value of 24 would yield a sleep time of 24 × 4096 ÷ 20000, which is
approximately 4.92 seconds.
The SLEEP_TIM is located in AON memory space at the address 0x102 (low 8-bits) and 0x103 (high 8-bits).
To write data to this space see 8.2.11.5.1 above.
Note: When programming sleep counter time, the host must delay enabling the sleep counter by at least 32
µs, following the programming of the timer duration for the newly programmed value to apply. Otherwise
the counter will use the previously programmed value.
Length
ID Type Mnemonic Description
(octets)
0x0B 23 - OTP_IF One Time Programmable memory interface
Register map register file 0x0B is the OTP memory interface. This allows read access to parameters stored in
the OTP memory, and it is also the interface via which parameters are programmed into the OTP memory.
The OTP memory interface contains a number of sub-registers. An overview of these sub-registers is given
by Table 37, and each is then separately described in the sub-sections below.
Note: Programming OTP memory is a one-time only activity, any values programmed in error cannot be
corrected. Also, please take care when programming OTP memory to only write to the designated areas –
programming elsewhere may permanently damage the DW3000’s ability to function normally. The OTP
memory is programmed 32-bits at a time, e.g. programming of a single 8-bit, 16-bit or 24-bit word is not
supported.
For more details of the OTP memory please refer to section 7.3 – Using the on-chip OTP memory.
OFFSET in
Mnemonic Description
Register 0x0B
0x00 OTP_WDATA OTP write data
0x04 OTP_ADDR OTP address
0x08 OTP_CFG OTP configuration
0x0C OTP_STAT OTP status
0x10 OTP_RDATA OTP read data
0x14 OTP_SRDATA OTP Special Register (SR) read data
Length
ID Type Mnemonic Description
(octets)
0B:00 4 RW OTP_WDATA OTP data to program to a particular address
Register file: 0x0B – OTP memory interface, sub-register 0x00 is a 32-bit register. This register is used to
configure the OTP memory block for memory writing operations and also to store the data value to be
programmed into an OTP location. Writing to OTP memory is an involved procedure. For details of this
please refer to section 7.3.2 – Programming a value into OTP memory.
Length
ID Type Mnemonic Description
(octets)
0B:04 2 RW OTP_ADDR OTP address to which to program the data
Register file: 0x0B – OTP memory interface, sub-register 0x04 is a 16-bit register used to select the address
within the OTP memory block that is being accessed (for read or write) this OTP memory interface. The
OTP_ADDR register contains the following fields:
reg:0B:04 For details of the OTP memory map and the procedures to read and write OTP memory, please
bits:10 –0
refer to section 7.3 – Using the on-chip OTP memory.
Length
ID Type Mnemonic Description
(octets)
0B:08 2 RW OTP_CFG OTP configuration register
Register file: 0x0B – OTP memory interface, sub-register 0x08 is a 16-bit register used to select and load
special receiver operational parameter sets. See 8.2.12.7 – Receiver operating parameter sets for details.
The OTP_CFG register contains the following fields:
OTP_WRITE_MR
OTP_WRITE
OTP_READ
OTP_MAN
DGC_KICK
LDO_KICK
OPS_KICK
DGC_SEL
OPS_SEL
- - - - - -
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
See section 8.2.12.7 – Receiver operating parameter sets below for details of use of
these operating parameter sets.
DGC_SEL RX_TUNE parameter set selection. This selects the RX_TUNE_CAL parameter set to
load when the DGC_KICK is invoked. If DGC_SEL bit is set to 0 channel 5 parameter set
reg:0B:08 is selected otherwise, setting to 1 will select channel 9 parameter set.
bit:13
Length
ID Type Mnemonic Description
(octets)
0B:0C 1 RW OTP_STAT OTP memory programming status register
Register file: 0x0B – OTP memory interface, sub-register 0x0C is a 16-bit register used to give status
information about the progress of the OTP programming activity. The OTP_STAT register contains the
following fields:
OTP_PROG_DONE
OTP_VPP_OK
- - - - - -
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
0B:10 4 R OTP_RDATA OTP data read from given address
Register file: 0x0B – OTP memory interface, sub-register 0x10 is a 32-bit register. The data value read from
an OTP location will appear here after invoking the OTP read function. For details of the OTP memory map
and the procedures to read OTP memory, please refer to section 7.3 – Using the on-chip OTP memory.
Length
ID Type Mnemonic Description
(octets)
0B:14 4 RW OTP_SRDATA OTP Special Register (SR) read data
Register file: 0x0B – OTP memory interface, sub-register 0x14 is a 32-bit register. The data value stored in the
OTP SR (0x60) location will appear here after power up. For details of the OTP memory map and the
procedures to read OTP memory, please refer to section 7.3 – Using the on-chip OTP memory.
The DW3000 receiver has the capability of operating with specific parameter sets that relate to how it
acquires the preamble signal and decodes the data. Three distinct operating parameter sets are defined
within the IC for selection by the host system designer depending on system characteristics. Table 38 below
lists and defines these operating parameter sets indicating their recommended usages.
Set Description
10 – Default / This is the default operating parameter set. This parameter set is designed to give good
Short performance for very short preambles, i.e. the length 64 preamble.. It is however not
optimum for long preambles.
00 – Long This operating parameter set is designed to give good performance for long (>= 256)
preambles (size including the SFD and STS length).
01 – reserved reserved
For most applications the default operating parameter set is the best choice.
Length
ID Type Mnemonic Description
(octets)
0x0C – 0x0E - - CIA_IF Channel Impulse Response Analyser (CIA) Interface
Register map register file 0x0C is the CIA control and status interface. The Channel Impulse response
Analyser (CIA) function is responsible for analysing the accumulator data, (available through Register file:
0x15 – Accumulator CIR memory). Depending on the exact configuration, there are up to 3 channel impulse
response (CIR) estimates in the accumulator memory. One based on the preamble code and two based on
the STS sequence.
The CIA identifies the first path in any given CIR estimate. It can then use this to calculate the RX timestamp
written to Sub-register 0x00:64 – Receive time stamp. The CIA interface contains a number of sub-registers.
An overview of these sub-registers in this Register files: 0x0C, 0x0D, 0x0E – CIA Interface is given by Table 39
and each is then separately described in the sub-sections below (0x0C and 0x0D are CIA outputs, while 0x0E
is the CIA configuration control). The control and configuration of the STS is achieved via the sub-registers in
CP_CFG and SYS_CFG. Please also refer to § 6 – Secure ranging / timestamping for details of the operation
of the STS for secure ranging operations.
Table 39: Register files: 0x0C, 0x0D, 0x0E – CIA Interface overview
Register OFFSET in
Mnemonic Description
file Register
0x0C 0x00 IP_TS Preamble sequence receive time stamp and status
0x0C 0x08 STS_TS STS receive time stamp and status
0x0C 0x10 STS1_TS 2nd STS receive time stamp and status
0x0C 0x18 TDOA The TDoA between the two CIRs
0x0C 0x1E PDOA The PDoA between the two CIRs
0x0C 0x20 CIA_DIAG_0 CIA Diagnostic 0
0x0C 0x28 IP_DIAG_0 Preamble Diagnostic 0 – peak
0x0C 0x2C IP_DIAG_1 Preamble Diagnostic 1 – power indication
0x0C 0x30 IP_DIAG_2 Preamble Diagnostic 2 – magnitude @ FP + 1
0x0C 0x34 IP_DIAG_3 Preamble Diagnostic 3 – magnitude @ FP + 2
0x0C 0x38 IP_DIAG_4 Preamble Diagnostic 4 – magnitude @ FP + 3
0x0C 0x48 IP_DIAG_8 Preamble Diagnostic 8 – first path
0x0C 0x58 IP_DIAG_12 Preamble Diagnostic 12 – symbols accumulated
0x0C 0x5C STS_DIAG_0 STS Diagnostic 0 – STS CIR peak
0x0C 0x60 STS_DIAG_1 STS 0 Diagnostic 1 – STS CIR power indication
0x0C 0x64 STS_DIAG_2 STS 0 Diagnostic 2 – STS CIR magnitude @ FP + 1
0x0C 0x68 STS_DIAG_3 STS 0 Diagnostic 3 – STS CIR magnitude @ FP + 2
0x0D 0x00 STS_DIAG_4 STS 0 Diagnostic 4 – STS CIR magnitude @ FP + 3
0x0D 0x10 STS_DIAG_8 STS 0 Diagnostic 8 – STS CIR first path
0x0D 0x20 STS_DIAG_12 STS 0 Diagnostic 12 – STS CIR accumulated STS length
0x0D 0x38 STS1_DIAG_0 STS 1 Diagnostic 0 – STS CIR peak
0x0D 0x3C STS1_DIAG_1 STS 1 Diagnostic 1 – STS CIR power indication
0x0D 0x40 STS1_DIAG_2 STS 1 Diagnostic 2 – STS CIR magnitude @ FP + 1
0x0D 0x44 STS1_DIAG_3 STS 1 Diagnostic 3 – STS CIR magnitude @ FP + 2
0x0D 0x48 STS1_DIAG_4 STS 1 Diagnostic 4 – STS CIR magnitude @ FP + 3
0x0D 0x58 STS1_DIAG_8 STS 1 Diagnostic 8 – STS CIR first path
0x0D 0x68 STS1_DIAG_12 STS 1 Diagnostic 11 – STS CIR accumulated STS length
0x0E 0x00 CIA_CONF CIA general configuration
0x0E 0x04 FP_CONF First path temp adjustment and thresholds
0x0E 0x0C IP_CONF Preamble Config 0 – CIA preamble configuration
0x0E 0x12 STS_CONF_0 STS Config 0 – CIA STS configuration
0x0E 0x16 STS_CONF_1 STS Config 1 – CIA STS configuration
0x0E 0x1A CIA_ADJUST User adjustment to the PDoA
Length
ID Type Mnemonic Description
(octets)
0C:00 8 RO IP_TS Preamble receive time stamp and status
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x00 of register file 0x0C is an 8-octet register
reporting the 40-bit preamble Time of Arrival estimate along with status diagnostic octet relating to it.
REG:0C:00 – IP_TS – Preamble receive time stamp and status (Octets 0 to 3, 32-bits)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IP_TOA (low 32 bits of 40-bit value)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
REG:0C:04 – IP_TS – Preamble receive time stamp and status (Octets 4 to 7, 32-bits)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
IP_TOAST - - IP_POA IP_TOA (high 8 bits of 40)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Field Description of fields within Sub-register 0x0C:00 – Preamble receive time stamp and status
IP_TOA Preamble sequence Time of Arrival estimate. This 40-bit (5-octet) field reports the. The fully
adjusted time of reception as estimated by the CIA algorithm operating on the CIR
reg:0C:00 accumulated using the preamble sequence. Please refer to section 4.1.7 – RX message
bits:39-0
timestamp for more details of the adjustments applied. The units of the low order bit are
approximately 15.65 picoseconds. The actual unit may be calculated as 1/ (128*499.2×106)
seconds. The IP_TOA value is available here when the leading edge determination and
timestamp adjustments are completed (when the CIADONE status bit is set).
The IP_TOA value is also written to the RX_STAMP field in Sub-register 0x00:64 – Receive
time stamp, but that may be overwritten by the STS_TOA value if this is being computed by
the CIA algorithm.
IP_POA Phase of arrival as computed from the preamble CIR. It is adjusted by the state of the carrier
recovery algorithm’s correction when the CIR is finalized. This register is used when
reg:0C:04 implementing a two-chip PDoA system.
bits:21–8
- These bits are unused / reserved.
reg:0C:04
bits:23–22
IP_TOAST Preamble sequence Time of Arrival status indicator. The low order 5-bits of this octet are a
set of error flags indicating various conditions in the CIA algorithm that mean that the
reg:0C:04 IP_TOA value is not reliable and should not be used.
bits:31–24
Length
ID Type Mnemonic Description
(octets)
0C:08 8 RO STS_TS STS receive time stamp and status
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x08 of register file 0x0C is an 8-octet register
reporting the 40-bit STS based Time of Arrival estimate along with status diagnostic octet relating to it.
REG:0C:08 – STS_TS – STS receive time stamp and status (Octets 0 to 3, 32-bits)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
STS_TOA (low 32 bits of 40-bit value)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
REG:0C:0C – STS_TS – STS receive time stamp and status (Octets 4 to 7, 32-bits)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
STS_TOAST - STS_POA STS_TOA (high 8 bits of 40)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Field Description of fields within Sub-register 0x0C:08 – STS receive time stamp and status
STS_TOA STS Time of Arrival estimate. This 40-bit (5-octet) field reports the time of reception as
estimated by the CIA algorithm operating on the CIR accumulated using the STS sequence.
reg:0C:08 The units of the low order bit are approximately 15.65 picoseconds. The actual unit may be
bits:39-0
calculated as 1/ (128*499.2×106) seconds. The STS_TOA value is available here when the
leading edge determination and timestamp adjustments are completed (when the CIADONE
status bit is set). Note the STS_TOA value is also written into the RX_STAMP field in Sub-
register 0x00:64 – Receive time stamp. This will overwrite an existing value in the
RX_STAMP field. So CP_TOA takes precedence over IP_TOA.
STS_POA Phase of arrival as computed from the STS CIR and is adjusted by the state of the carrier
recovery algorithm’s correction when the CIR estimate is complete. It can be used in a two-
reg:0C:0C chip PDoA system.
bits:21–8
– These bits are unused / reserved.
reg:0C:0C
bit:22
STS_TOAST STS sequence Time of Arrival status indicator. These bits are a set of error flags indicating
various conditions in the CIA algorithm. If STS_TOAST is non-zero it means that the CIR has
reg:0C:08 failed one or more confidence tests. As a result, the STS_TOA and STS_POA value is not
bits:31-23
reliable and should not be used.
Status bits from the STS analysis:
[31] : STS_PGR_EN test fail.
[30] : STS_SS_EN test fail.
[29] : STS_CQ_EN test fail.
[28] : First path too close to the end to be plausible.
[27] : Coarse first path estimate too close to end to be plausible.
[26] : CIR too weak to get any estimate.
[25] : Noise threshold had to be artificially lowered to find any first path.
[24] : No strong rising edge on the first path so estimate is vulnerable to noise.
[23] : Reserved.
Length
ID Type Mnemonic Description
(octets)
0C:10 8 RO STS1_TS STS second receive time stamp and status (valid in PDoA
Mode 3 only)
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x08 of register file 0x0C is an 8-octet register
reporting the 40-bit STS second Time of Arrival estimate along with status diagnostic octet relating to it. This
is only valid when operating in PDoA Mode 3.
REG:0C:10 – STS1_TS – STS second receive time stamp and status (Octets 0 to 3, 32-bits)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
STS1_TOA (low 32 bits of 40-bit value)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
REG:0C:14 – STS1_TS – STS second receive time stamp and status (Octets 4 to 7, 32-bits)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
STS1_TOAST - STS1_POA STS1_TOA (high 8 bits of 40)
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Field Description of fields within Sub-register 0x0C:10 – STS second RX time stamp and status
STS1_TOA STS second Time of Arrival estimate. This 40-bit (5-octet) field reports the time of
reception as estimated by the CIA algorithm operating on the CIR accumulated using the
reg:0C:10 STS. The units of the low order bit are approximately 15.65 picoseconds. The actual unit
bits:39-0
may be calculated as 1/ (128*499.2×106) seconds. The STS1_TOA value is available here
when the leading edge determination and timestamp adjustments are completed (when
the CIADONE status bit is set).
STS1_POA Phase of arrival as computed from the STS based CIR estimate and is adjusted by the state
of the carrier recovery algorithm’s correction when the CIR estimate is complete. It can be
reg:0C:14 used in a two-chip PDoA system.
bits:21–8
– These bits are unused / reserved.
reg:0C:14
bit:22
STS1_TOAST STS second Time of Arrival status indicator. These bits are a set of error flags indicating
various conditions in the CIA algorithm. If STS_TOAST is non-zero it means that the CIR has
reg:0C:14 failed one or more confidence tests. As a result, the STS1_TOA and STS1_POA value is not
bits:31-23
reliable and should not be used.
Status bits from the STS1 analysis:
[31] : STS_PGR_EN test fail.
[30] : STS_SS_EN test fail.
[29] : STS_CQ_EN test fail.
[28] : First path too close to the end to be plausible.
[27] : Coarse first path estimate too close to end to be plausible.
[26] : CIR too weak to get any estimate.
[25] : Noise threshold had to be artificially lowered to find any first path.
[24] : No strong rising edge on the first path so estimate is vulnerable to noise.
[23] : Reserved.
Length
ID Type Mnemonic Description
(octets)
0C:18 6 RO TDOA The TDoA between two CIRs
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x18 of register file 0x0C is 41-bit TDoA between
two CIR TOAs. The bit 40 is a sign bit. If PDoA Mode 1 is selected (see PDOA_MODE) then this TDoA refers to
the TDoA between the IP_TOA and the STS_TOA value. In PDoA Mode 3 this is the TDoA between the
STS_TOA and the STS1_TOA value. All three CIRs are estimates of the same (or a very similar) channel so the
TDoA should be small. Its value can help when determining how reliable the PDoA/ToA estimate is. TDoA is
described in 4.2 - TDoA and PDoA support.
Length
ID Type Mnemonic Description
(octets)
0C:1E 2 RO PDOA PDoA and First Path (FP) threshold status
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x1E of register file 0x0C is a 2-octet register
reporting the phase difference of arrival. This is only valid when operating one of PDoA modes
(PDOA_MODE). The PDOA register contains the following bitmapped sub-fields:
- PDOA
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Field Description of fields within Sub-register 0x0C:1E – Phase difference of arrival result
PDOA Phase difference result. This is further described in 4.2 TDoA and PDoA support.
reg:0C:1E
bits: 13–0
FP_TH_MD First path threshold test mode.
0 - > absolute difference of two first paths is smaller or equal the FP_AGREED_TH
reg:0C:1E 1 - > absolute difference is larger than FP_AGREED_TH
bit: 14
– These bits are unused / reserved.
reg:0C:1E
bit:15
Length
ID Type Mnemonic Description
(octets)
0C:20 4 RO CIA_DIAG_0 CIA diagnostic 0
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x20 of register file 0x0C is a 4-octet register
reporting CIA diagnostics after CIR analysis. The CIA_DIAG_0 register contains the following bitmapped sub-
fields:
Length
ID Type Mnemonic Description
(octets)
0C:24 4 RO CIA_DIAG_1 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x24 of register file 0x0C is a 4-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0C:28 4 RO IP_DIAG_0 Preamble diagnostic 0 – peak
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x28 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the preamble sequence. The IP_DIAG_0 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:2C 4 RO IP_DIAG_1 Preamble diagnostic 1 –power indication
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x2C of register file 0x0C is a 4-octet register
reporting diagnostics relating to the preamble sequence. The IP_DIAG_1 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:30 4 RO IP_DIAG_2 Preamble diagnostic 2 –magnitude @ FP + 1
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x30 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the preamble sequence. The IP_DIAG_2 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:34 4 RO IP_DIAG_3 Preamble diagnostic 3 – magnitude @ FP + 2
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x34 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the preamble sequence. The IP_DIAG_3 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:38 4 RO IP_DIAG_4 Preamble Diagnostic 4 –magnitude @ FP + 3
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x38 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the preamble sequence. The IP_DIAG_4 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:3C 12 RO IP_DIAG_RES1 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x3C of register file 0x0C is a 12-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0C:48 4 RO IP_DIAG_8 Preamble diagnostic 8 –first path result
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x48 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the preamble sequence. The IP_DIAG_8 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:4C 12 RO IP_DIAG_RES2 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x4C of register file 0x0C is a 12-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0C:58 4 RO IP_DIAG_12 Diagnostic 12 – symbols accumulated
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x58 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the preamble sequence. The IP_DIAG_12 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:5C 4 RO STS_DIAG_0 STS Diagnostic 0 – STS CIA peak amplitude
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x5C of register file 0x0C is a 4-octet register
reporting diagnostics relating to the STS. The STS_DIAG_0 register contains the following bitmapped sub-
fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:60 4 RO STS_DIAG_1 STS Diagnostic 1 – STS power indication
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x60 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the STS. The STS_DIAG_1 register contains the following bitmapped sub-
fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:64 4 RO STS_DIAG_2 STS Diagnostic 2 – STS magnitude @ FP + 1
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x64 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the STS. The STS_DIAG_2 register contains the following bitmapped sub-
fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0C:68 4 RO STS_DIAG_3 STS Diagnostic 3 – STS magnitude @ FP + 2
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 068 of register file 0x0C is a 4-octet register
reporting diagnostics relating to the STS. The STS_DIAG_3 register contains the following bitmapped sub-
fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:00 4 RO STS_DIAG_4 STS diagnostic 4 – STS magnitude @ FP + 3
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x00 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS. The STS_DIAG_4 register contains the following bitmapped sub-
fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:04 12 RO STS_DIAG_RES1 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x04 of register file 0x0D is a 12-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0D:10 4 RO STS_DIAG_8 STS Diagnostic 8 – STS first path
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x10 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS. The STS_DIAG_8 register contains the following bitmapped sub-
fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:14 12 RO STS_DIAG_RES2 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x14 of register file 0x0D is a 12-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0D:20 4 RO STS_DIAG_12 STS diagnostic 12 – accumulated STS length
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x20 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS. The STS_DIAG_12 register contains the following bitmapped sub-
fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:24 20 RO STS_DIAG_RES3 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x24 of register file 0x0D is a 20-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0D:38 4 RO STS1_DIAG_0 STS 1 diagnostic 0 – peak amplitude
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x38 is a 4-octet register reporting diagnostics
relating to the STS where it is present and being used to measure the PDOA.This register will only be valid
when PDOA mode 3 is used. The STS1_DIAG_0 register contains the following bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:3C 4 RO STS1_DIAG_1 STS 1 diagnostic 1 – STS 1 power indication
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x3C of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS where it is present and being used to measure the PDOA. This
register will only be valid when PDOA mode 3 is used. The STS1_DIAG_1 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:40 4 RO STS1_DIAG_2 STS 1 diagnostic 2 – STS 1 magnitude @ FP + 1
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x40 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS where it is present and being used to measure the PDOA. This
register will only be valid when PDOA mode 3 is used. The STS1_DIAG_2 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:44 4 RO STS1_DIAG_3 STS 1 diagnostic 3 – STS 1 magnitude @ FP + 2
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 044 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS where it is present and being used to measure the PDOA. This
register will only be valid when PDOA mode 3 is used. The STS1_DIAG_3 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:48 4 RO STS1_DIAG_4 STS 1 diagnostic 4 – STS 1 magnitude @ FP + 3
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x48 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS where it is present and being used to measure the PDOA. This
register will only be valid when PDOA mode 3 is used. The STS1_DIAG_4 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:4C 12 RO STS1_DIAG_RES1 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x4C of register file 0x0D is a 12-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0D:58 4 RO STS1_DIAG_8 STS 1 diagnostic 8 – STS 1 first path
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x58 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS where it is present and being used to measure the PDOA. This
register will only be valid when PDOA mode 3 is used. The STS1_DIAG_8 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit in CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0D:5C 12 RO STS1_DIAG_RES2 Reserved diagnostic data
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x5C of register file 0x0D is a 12-octet reserved
register.
Length
ID Type Mnemonic Description
(octets)
0D:68 4 RO STS1_DIAG_12 STS 1 diagnostic 12 – STS 1 accumulated STS length
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x68 of register file 0x0D is a 4-octet register
reporting diagnostics relating to the STS where it is present and being used to measure the PDOA. This
register will only be valid when PDOA mode 3 is used. The STS1_DIAG_12 register contains the following
bitmapped sub-fields:
Please note: This diagnostics register will not be updated unless the MINDIAG configuration bit CIA_CONF
has been cleared to zero.
Length
ID Type Mnemonic Description
(octets)
0E:00 4 RW CIA_CONF RX antenna delay and CIA diagnostic enable
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x00 of register file 0x0E is a 4-octet
configuration register. The CIA_CONF register contains the following bitmapped sub-fields:
- - - - - - - - - - - - - - - RXANTD
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1
Field Description of fields within Sub-register 0x0E:00 – RX antenna delay and CIA diagnostic
enable
RXANTD This 16-bit field configures the receive antenna delay. The receiver antenna delay is used to
reg:0E:00 account for the delay between the arrival of the RMARKER at the antenna and the time the
bits:15–0
RMARKER is detected and time-stamped by the internal digital RX circuitry. The units here
are the same as those used for system time and time stamps, i.e. 1/(499.2 MHz × 128), so
the least significant bit about 15.65 picoseconds. . The default antenna delay is 0x4015,
which is approximately 256.74 ns.
The value programmed in RXANTD register value is subtracted (by the CIA algorithm) from
the raw timestamp RX_RAWST to by the CIA algorithm which performs a number of other
updates and adjustments(including detecting and accounting for the first path position in the
accumulator) in order to generate the fully adjusted RX_STAMP value also in Sub-register
0x00:64 – Receive time stamp.
Please see § 10.3 – IC calibration – antenna delay for details of calibration of antenna delay.
MINDIAG Minimum Diagnostics. This bit applies to the operation of the CIA for both preamble and STS
reg:0E:00 sequences. This bit specifies if the CIA algorithm will log data in the CIA diagnostic registers.
bit:20
The MINDIAG bit is 1 by default to minimise the diagnostics information generated by the
CIA process. To generate the extended diagnostics MINDIAG may be cleared to 0, however
please note: when MINDIAG = 0, the CIA processing takes longer, delaying the assertion of
the CIADONE and RXFR event status flag bits, (i.e. so ranging exchanges will take a little
longer and consume a little more energy).
When MINDIAG is 1 the CIA does NOT update any of the preamble CIA diagnostic registers
(IP_DIAG_0 – IP_DIAG_12) nor any of the STS CIA diagnostic registers (STS_DIAG_0–
STS_DIAG_12) nor any of the second STS CIA diagnostic registers (STS1_DIAG_0 –
STS1_DIAG_12) when PDoA Mode 3 is used.
- Bits marked ‘-’ in this register are reserved.
reg:0E:00
bits:31–21 N.B.: Any change in these bits may cause the DW3000 to malfunction.
Length
ID Type Mnemonic Description
(octets)
0E:04 4 RW FP_CONF First path temp adjustment and thresholds
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x04 of register file 0x0E is a 4-octet register
containing first path temperature adjustments and threshold values. The FP_CONF register contains the
following control bits:
FP_AGREED_TH
TC_RXDLY_EN
- - - - - - - - - - - - CAL_TEMP -
0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0
Field Description of fields within Sub-register 0x0E:04 – First path temperature adjustment
FP_AGREED_TH The threshold to use when performing the FP_AGREE test. The LSB is 1/(998.4 MHz)
(approximately 1ns).
reg:0E:04
bits:10–8
CAL_TEMP Temperature at which the device was calibrated. The units are those from the on-chip
temperature sensor, as read from SAR_LTEMP in SAR_READING register.
reg:0E:04
bits:18–11
TC_RXDLY_EN Temperature compensation for RX antenna delay. When set to 1, the device will
compensate for temperature differences. Must specify the calibration temperature
reg:0E:04 (CAL_TEMP above). Its default corresponds to absolute zero Kelvin.
bit:20
- Bits marked ‘-’ in this register are reserved.
reg:0E:04
bit: various N.B.: Any change in these bits may cause the DW3000 to malfunction.
Length
ID Type Mnemonic Description
(octets)
0E:0C 4 RW IP_CONF Preamble config – CIA preamble configuration
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x0C of register file 0x0E is a 4-octet
configuration register relating to the CIA configuration for the preamble sequence CIR analysis. The IP_CONF
register contains the following control bits:
IP_PMULT
- - - - - - - - - - - IP_RTM - - - - - - - - - IP_NTM
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1
The resulting threshold shall not be smaller than the value defined by this, but may be
larger depending on other factors used to choose the threshold.
IP_RTM Preamble replica threshold multiplier, IP_RTM, is a 5-bit field. The accumulation of the
preamble sequence to produce the preamble CIR is not perfect when there is a significant
reg:0E:0C clock offset between the remote transmitter and the local receiver. In these circumstances
bits:20–16
small amplitude replicas of the channel impulse response appear repeatedly throughout the
accumulator span. The magnitude of this effect is dependent on the clock offset and on the
preamble code being employed. The DW3000 automatically measures the clock offset and
computes a preamble code appropriate replica avoidance threshold value to avoid the
replicas. The IP_RTM parameter allows for the possibility of tuning the choice of replica
avoidance threshold, however it is not expected that the default value of 4 will need to be
modified.
- Bits marked ‘-’ in this register are reserved.
reg:0E:0C
bit:various N.B.: Any change in these bits may cause the DW3000 to malfunction.
Length
ID Type Mnemonic Description
(octets)
0E:12 4 RW STS_CONF_0 STS Config 0 – CIA configuration for STS
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x12 of register file 0x0E is a 4-octet
configuration register relating to the CIA configuration for the STS based CIR analysis. The STS_CONF_0
register contains the following control bits:
STS_PMULT
- - - - - - - - - STS_MNTH - - - - - - - - - STS_NTM
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 1 0 0 0 0 0 1 1 0 0
The resultant threshold is constrained to be not smaller than the value defined by this
STS_PMULT parameter, but it may be larger depending on other factors used to select the
threshold value.
A value of 0 allows the first path to be in region of the CIR that is used for gathering noise
statistics. This helps when the channel is severely NLOS with a large delay spread.
- Bits marked ‘-’ in this register are reserved.
reg:0E:12 N.B.: Any change in these bits field may cause the DW3000 to malfunction.
bits:15-7
Note these values are scaled by a factor of √2 as the STS length is doubled from 64 to 128
and again when increasing to 256 and so on.
- Bits marked ‘-’ in this register are reserved.
reg:0E:12
bit:31–23 N.B.: Any change in these bits field may cause the DW3000 to malfunction.
Length
ID Type Mnemonic Description
(octets)
0E:16 4 RW STS_CONF_1 STS Config 1 – CIA configuration for STS
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x16 of register file 0x0E is a 4-octet
configuration register relating to the CIA configuration for the STS based CIR analysis. The STS_CONF_1
register contains the following control bits:
STS_CQ_EN
STS_SS_EN
- - - - - - - - - RES_B0
1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 1 1 1 0 1 1 0 1 0 1 1 1 1 0 1 1
Length
ID Type Mnemonic Description
(octets)
0E:1A 2 RW CIA_ADJUST User adjustments to the CIA calculation
Register files: 0x0C, 0x0D, 0x0E – CIA Interface, sub-register 0x1A of register file 0x0E is a 2-octet
configuration register relating to the CIA configuration for the STS based CIR analysis. The CIA_ADJUST
register contains the following control bits:
Length
ID Type Mnemonic Description
(octets)
0x0F 79 - DIG_DIAG Digital diagnostics interface
Register map register file 0x0F is the Digital Diagnostics interface. It contains a number of Sub-registers that
give diagnostics information. An overview of these is given by Table 40. Each of these Sub-registers is
separately described in the sub-sections below.
Length
ID Type Mnemonic Description
(octets)
0F:00 1 SRW EVC_CTRL Event counter control
Register file: 0x0F – Digital diagnostics interface, sub-register 0x00 is the event counter control register.
EVC_CLR
EVC_EN
- - - - - -
- - - - - - 0 0
Fields in the EVC_CTRL register are intended to be self-clearing. So, the event counters can be enabled or
cleared, but cannot be disabled. The bits of the EVC_CTRL register identified above are individually
described below:
Length
ID Type Mnemonic Description
(octets)
0F:04 2 RO EVC_PHE PHR error event counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x04 is the PHY Header Error event counter.
Length
ID Type Mnemonic Description
(octets)
0F:06 2 RO EVC_RSE RSD error event counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x06 is the RSD error event counter.
Length
ID Type Mnemonic Description
(octets)
0F:08 2 RO EVC_FCG Frame Check Sequence good event counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x08 is the FCS good event counter.
Length
ID Type Mnemonic Description
(octets)
0F:0A 2 RO EVC_FCE Frame Check Sequence error counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x0A is the FCS error event counter.
Length
ID Type Mnemonic Description
(octets)
0F:0C 1 RO EVC_FFR Frame filter rejection counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x0C is the frame filter rejection counter.
Field Description of fields within Sub-register 0x0F:0C – Frame filter rejection counter
EVC_FFR Frame Filter Rejection Event Counter. The EVC_FFR field is an 8-bit counter of the frames
reg:0F:0C rejected by the receive frame filtering function. This is essentially a count of the reporting of
bits:7–0
ARFE events in Sub-register 0x00:44 – System event status.
NB: For this counter to be active, counting needs to be enabled by the setting the EVC_EN bit
in EVC_CTRL.
Length
ID Type Mnemonic Description
(octets)
0F:0E 1 RO EVC_OVR RX overrun error counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x0E is the RX overrun error counter.
Length
ID Type Mnemonic Description
(octets)
0F:10 2 RO EVC_STO SFD timeout error counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x10 is the SFD timeout error counter.
Field Description of fields within Sub-register 0x0F:10 – SFD timeout error counter
EVC_STO SFD timeout errors Event Counter. The EVC_STO field is a 12-bit counter of SFD Timeout Error
reg:0F:10 events. This is essentially a count of the reporting of RXSTO events in Sub-register 0x00:44 –
bits:11–0
System event status.
NB: For this counter to be active, counting needs to be enabled by the setting the EVC_EN bit
in EVC_CTRL.
- The remaining bits of this register are reserved.
bits:15–12
Length
ID Type Mnemonic Description
(octets)
0F:12 2 RO EVC_PTO Preamble detection timeout event counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x12 is the preamble timeout event counter.
Length
ID Type Mnemonic Description
(octets)
0F:14 1 RO EVC_FWTO RX frame wait timeout counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x14 is the RX frame wait timeout event
counter.
Field Description of fields within Sub-register 0x0F:14 – RX frame wait timeout event counter
EVC_FWTO RX Frame Wait Timeout Event Counter. The EVC_FWTO field is an 8-bit counter of receive
reg:0F:14 frame wait timeout events. This is essentially a count of the reporting of the RXFTO events in
bits:7–0
Sub-register 0x00:44 – System event status.
NB: For this counter to be active, counting needs to be enabled by the setting the EVC_EN bit
in EVC_CTRL.
Length
ID Type Mnemonic Description
(octets)
0F:16 2 RO EVC_TXFS TX frame sent counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x16 is the TX frame sent counter.
Length
ID Type Mnemonic Description
(octets)
0F:18 1 RO EVC_HPW Half period warning counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x18 is the half period warning counter.
Field Description of fields within Sub-register 0x0F:18 – Half period warning counter
EVC_HPW Half Period Warning Event Counter. The EVC_HPW field is an 8-bit counter of “Half Period
reg:0F:18 Warnings”. This is a count of the reporting of the HPDWARN events in Sub-register 0x00:44
bits:7–0
– System event status. These relate to late invocation of delayed transmission or reception
functionality. Please refer to the description of the HPDWARN bit for more details of this
event and its meaning. NB: For this counter to be active, counting needs to be enabled by
the setting the EVC_EN bit in Sub-register 0x0F:00 – Event counter control.
Length Typ
ID Mnemonic Description
(octets) e
0F:1A 1 RO SPI write CRC error counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x1A is the SPI write CRC error counter.
Field Description of fields within Sub-register 0x0F:1A – SPI write CRC error counter
EVC_SWCE SPI Write CRC Error Counter. The is an 8-bit counter of “SPI Write CRC Error” events. This is
reg:0F:1A a count of the reporting of the SPICRCE events in Sub-register 0x00:44 – System event status.
bits:7–0
These events only arise when SPI CRC mode is enabled. See section 2.3.1.3 – SPI CRC mode
for more details. NB: For this counter to be active, counting needs to be enabled by the
setting the EVC_EN bit in EVC_CTRL
Length
ID Type Mnemonic Description
(octets)
0F:1C 8 RO EVC_RES1 Digital diagnostics reserved area 1
Register file: 0x0F – Digital diagnostics interface, Sub-register 0x1C is a reserved register. .
Length
ID Type Mnemonic Description
(octets)
0F:24 4 RW DIAG_TMC Test mode control register
Register file: 0x0F – Digital diagnostics interface, sub-register 0x24 is the test mode control register.
HIRQ_POL
TX_PSTM
CIA_RUN
- - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
The bits of the DIAG_TMC register identified above are individually described below:
Field Description of fields within Sub-register 0x0F:24 – Digital diagnostics test mode control
- These bits of the DIAG_TMC register are reserved and should always be set to zero to avoid
reg:0F:24 any malfunction of the device.
bit: various
TX_PSTM Transmit Power Spectrum Test Mode. This test mode is provided to help support regulatory
reg:2F:24 approvals spectral testing. When the TX_PSTM bit is set it enables a repeating transmission
bit:4
of the data from the TX_BUFFER. To use this test mode, the operating channel, preamble
code, data length, offset, etc. should all be set-up as if for a normal transmission.
The start-to-start delay between packets is programmed in the DX_TIME register. This is a
special use of that register, and the value is programmed in periods of one half of the 499.2
MHz fundamental frequency, (~ 4 ns). To send one packets per millisecond, a value of
249600 or 0x0003CF00 should be programmed into the DX_TIME register. The minimum
valid value is to be programmed to DX_TIME register is 2. A time value less than the
packet’s duration will cause packets to be sent back-to-back.
When the mode, the delay and TX buffer have been configured and the TX_PSTM bit is set,
the repeated TX mode is initiated by issuing a TX start command, CMD_TX.
For full use of this feature please see API and example code provided [3]. Other register
settings are needed to make this operational.
HIRQ_POL Host interrupt polarity. This bit allows the system integrator the ability to control the
polarity of the IRQ line from the DW3000. When HIRQ_POL is 1 the IRQ output line from the
reg:0F:24
bit:21
DW3000 is active high, and, when HIRQ_POL is 0 the IRQ output line from the DW3000 is
active low.
Active high operation is recommended for low power applications so that the interrupt is in
its 0 V logical inactive state when the DW3000 is in SLEEP or DEEPSLEEP states.
Field Description of fields within Sub-register 0x0F:24 – Digital diagnostics test mode control
CIA_WDEN Enable the CIA watchdog. When this configuration is 1 (the default) an internal watchdog
timer is started whenever the CIA begins the processing a received CIR, for either the
reg:0F:24
preamble or STS sequences. The watchdog time is fixed at 120 µs. If the CIA completes
bit:24
before the watchdog timer elapses the watchdog timer is stopped, otherwise the CIAERR
event status flag is asserted and the CIA is stopped. This avoids any possibility of run-away
processing in the CIA block. If CIA_WDEN is set to 0, the CIA watchdog will be disabled. This
might be tried if the CIAERR events occur to see if good RX timestamp results can be
achieved if the CIA was given more time. If the CIA watchdog is disabled the host should
include its own watchdog timeout to recover in the event that the CIA takes too long, i.e. the
CIADONE event status flag is not arriving.
CIA_RUN Run the CIA manually. Normally this control bit will not be required because by default the
CIARUNE configuration in Sub-register 0x11:08 – Sequencing control is set to 1 which causes
reg:0F:24
bit:26
the CIA to be run automatically when a packet is received. If CIARUNE is 0, then the
CIA_RUN bit, may be used to run the CIA after the packet is received. The CIA_IPATOV and
CIA_STS bits in Sub-register 0x00:10 – System configuration should be set to select which CIA
analysis is required. The CIA_RUN bit will automatically clear when it is acted upon.
NB: To run the CIA manually, after a receive event when the receiver is off, the receive clock
will need to be forced on using the RX_CLK control in Sub-register 0x11:04 – Clock control.
Length
ID Type Mnemonic Description
(octets)
0F:28 1 RO EVC_CPQE STS quality error counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x28 is the STS quality error counter.
Field Description of fields within Sub-register 0x0F:28 – STS quality error counter
EVC_CPQE STS Quality Error Counter. The EVC_CPQE field is an 8-bit counter of receive packets for
reg:0F:28 which the STS quality assessment measurements are below the threshold. This is a count of
bits:7–0
the reporting of received packets with STS where the CIA algorithm has detected a quality
problem and set one of the error flags of the STS_TOAST field within Sub-register 0x0C:08 –
STS receive time stamp and status. The CPERR count may increment by 2 per frame (e.g. in
PDOA mode 3 where STS analysis is done separately on two halves of the STS)
NB: For this counter to be active, counting needs to be enabled by the setting the EVC_EN
bit in EVC_CTRL.
Length
ID Type Mnemonic Description
(octets)
0F:2A 1 RO EVC_VWARN Low voltage warning error counter
Register file: 0x0F – Digital diagnostics interface, sub-register 0x2A is the low voltage warning error counter.
Field Description of fields within Sub-register 0x0F:2A – Low voltage warning error counter
EVC_VWARN Low voltage warning Error Counter. The EVC_VWARN field is an 8-bit counter of brown-
reg:0F:2A out warnings. This is a count of the occurrence of low voltage warnings, as reported
bits:7–0
through the VWARN events status flag in Sub-register 0x00:44 – System event status. This
counts individual brown-out events detected even when the VWARN event flag is not
being cleared by the host. NB: For this counter to be active, counting needs to be enabled
by the setting the EVC_EN bit in EVC_CTRL.
Length
ID Type Mnemonic Description
(octets)
0F:2C 1 RO SPI_MODE SPI mode
Register file: 0x0F – Digital diagnostics interface, sub-register 0x2C is the SPI mode configuration.
- - - - - -
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
0F:30 4 RO SYS_STATE System states
Register file: 0x0F – Digital diagnostics interface, sub-register 0x30 is the system states diagnosic register.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
reg:0F:30 Reserved
bit: 7-4
RX_STATE Current Receive State Machine value Description
reg:0F:30 0x00 - IDLE Receiver is in idle
bit: 11-8
0x01 - START_ANALOG. Start analog receiver blocks
0x04 - RX_RDY Receiver ready
0x05 - PREAMBLE_FND Receiver is waiting to detect preamble
0x06 - PRMBL_TIMEOUT Preamble timeout
0x07 - SFD_FND SFD found
0x08 - CNFG_PHR_RX Configure for PHR reception
0x09 - PHR_RX_STRT PHR reception started
0x0A - DATA_RATE_RDY Ready for data reception
0x0C - DATA_RX_SEQ Data reception
0x0D - CNFG_DATA_RX Configure for data
0x0E - PHR_NOT_OK PHR error
0x0F - LAST_SYMBOL Received last symbol
0x10 - WAIT_RSD_DONE Wait for Reed Solomon decoder to finish
0x11 - RSD_OK Reed Solomon correct
0x12 - RSD_NOT_OK Reed Solomon error
reg:0F:30 Reserved
bit: 15-12
Length
ID Type Mnemonic Description
(octets)
0F:3C 1 RO FCMD_STAT Fast command status
Register file: 0x0F – Digital diagnostics interface, sub-register 0x3C is the fast command status.
- - - FCMD_STAT
0 0 0 0 0 0 0 0
Length
ID Type Mnemonic Description
(octets)
0F:48 4 RO CTR_DBG Current value of the low 32-bits of the STS IV
Register file: 0x0F – Digital diagnostics interface, sub-register 0x48 is the counter debug register. It contains
the current value of the low 32-bits of STS IV.
Length
ID Type Mnemonic Description
(octets)
0F:4C 1 RO SPICRCINIT SPI CRC LFSR initialisation code.
Register file: 0x0F – Digital diagnostics interface, sub-register 0x4C is the register that contains SPI CRC LFSR
initialisation code for the SPI CRC function. The value here is used to initialise the SPI CRC calculation shift
register at the start of each SPI transaction, when SPI CRC mode is enabled via the SPI_CRCEN bit in Sub-
register 0x00:10 – System configuration. For more details of SPI CRC operation please refer to § 2.3.1.3 – SPI
CRC mode, and § 2.3.1.3.3 for details of the CRC generation polynomial and shift register implementation.
Length
ID Type Mnemonic Description
(octets)
0x11 34 - PMSC_CTRL Power management, timing and seq control
Register map register file 0x11 is concerned with the use of the PMSC. It contains a number of Sub-registers.
An overview of these is given by Table 19. Each of these Sub-registers is separately described in the sub-
sections below.
Table 41: Register file: 0x11 – PMSC control and status overview
OFFSET in
Mnemonic Description
Register 0x11
00 SOFT_RST Soft reset of the device blocks
04 CLK_CTRL PMSC clock control register
08 SEQ_CTRL PMSC control register 1
12 TXFSEQ PMSC fine grain TX sequencing control
16 LED_CTRL LED control register
1A RX_SNIFF Sniff mode configuration
OFFSET in
Mnemonic Description
Register 0x11
1F BIAS_CTRL Analog blocks’ calibration values
Length
ID Type Mnemonic Description
(octets)
11:00 2 RW SOFT_RST Soft reset of the device blocks
Register file: 0x11 – PMSC control and status, Sub-register 0x00 is the soft reset command register. This
register allows a software applied reset to be applied to the IC.
PMSC_RST
PRGN_RST
GPIO_RST
ARM_RST
BIST_RST
CIA_RST
HIF_RST
RX_RST
TX_RST
-
SOFTRESET
1 1 1 1 1 1 1 1 1
The AON block is not reset by this activity and so may take action following the reset
depending on the configuration within Sub-register 0x0A:00 – AON on wake configuration.
Length
ID Type Mnemonic Description
(octets)
11:04 4 RW CLK_CTRL PMSC clock control register
Register file: 0x11 – PMSC control and status, Sub-register 0x00 is a 32-bit control register relating to
enabling clocking to various digital blocks within the DW3000. The CLK_CTRL register contains the following
sub-fields:
GPIO_DCLK_EN
ACC_MCLK_EN
GPIO_DRST_N
GPIO_CLK_EN
ACC_CLK_EN
SAR_CLK_EN
CIA_CLK_EN
LP_CLK_EN
SYS_CLK
RX_CLK
TX_CLK
- - - - - - - - - - - - - -
1 1 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
The fields of the CLK_CTRL register identified above are individually described below:
00: Auto – The system clock will run off the FAST_RC/4 clock until (assuming
AINIT2IDLE is set to 1) the AON transfer has completed, it will then switch to
FAST_RC(120MHz) clock until the PLL is calibrated and locked, and then it will
switch to the 125 MHz PLL clock.
01: Force system clock to be the FAST_RC/4 clock.
10: Force system clock to the 125 MHz PLL clock. (If this clock is not present the IC will
essentially lock up with further SPI communications impossible. In this case an
external reset will be needed to recover).
11: Force system clock to FAST_RC.
This control is used for certain procedures, e.g. before a soft reset (SOFTRESET)
RX_CLK Receiver Clock Selection. This selects the source of clock for the DW3000 receiver.
reg:11:04 Allowed values are:
bits:3,2
00: Auto – The RX clock will be disabled until it is required for an RX operation, at
which time it will be enabled to use the 125 MHz PLL clock.
01, 10, 11: Force RX clock enable and sourced from the 125 MHz PLL clock. (NB:
ensure PLL clock is present).
This control is used for certain procedures, e.g. when setting up the continuous
transmission mode that is used during power output calibration and regulatory testing.
ACC_CLK_EN Force Accumulator Clock Enable. In normal operation this bit should be set to 0 to
allow the PMSC to control the accumulator clock as necessary for normal receiver
reg:11:04
bit:6 operation. If the host system wants to read the accumulator data, both this
ACC_CLK_EN bit and the ACC_MCLK_EN bit (below) need to be set to 1 to allow the
accumulator reading to operate correctly.
CIA_CLK_EN Force CIA Clock Enable. In normal operation this bit should be set to 0 to allow the PMSC
to control the CIA clock as necessary for normal CIA operation. If the host system wants
reg:11:04
bit:8 to run CIA manually using CIA_RUN then this bit should be set to 1.
SAR_CLK_EN (temperature and voltage) Analog-to-Digital Convertor Clock Enable. The DW3000 is
equipped with 8-bit A/D convertors to sample the IC temperature and its input battery
reg:11:00
bit:10 voltage. The IC can automatically sample the temperature and voltage as it wakes up
from SLEEP or DEEPSLEEP. This is controlled by the ONW_RUN_SAR bit in Sub-register
0x0A:00 – AON on wake configuration. If the host system wants to initiate temperature
and/or voltage measurements at other times then the clock to the Analog-to-Digital
Convertor needs to be enabled via this SAR_CLK_EN bit. For more details of this
functionality, please refer to section 7.4 – Measuring IC temperature and voltage.
ACC_MCLK_EN Accumulator Memory Clock Enable. In normal operation this bit should be set to 0 to
allow the PMSC to control the accumulator memory clock as necessary for normal
reg:11:04
bit:15 receiver operation. If the host system wants to read the accumulator data, both this
ACC_MCLK_EN bit and ACC_CLK_EN bit (above) need to be set to 1 to allow the
accumulator reading to operate correctly.
GPIO_CLK_EN GPIO clock Enable. In order to use the GPIO port lines the GPIO_CLK_EN enable must be
set to 1 to enable the clock into the GPIO block. The bit must also be set to 1 to take the
reg:11:04
bit:16 GPIO port out of its reset state.
This GPIO_DCLK_EN bit also serves to enable the clock that controls the LED blink
functionality and so must be enabled in order for the LEDs to function correctly. See
Sub-register 0x05:00 – GPIO mode control for details of enabling LED functionality on
GPIO lines.
Note: As this clock employs the kilohertz clock, the appropriate dividers and enables
need to be configured according to the desired functionality. See LP_CLK_EN below and
LP_CLK_DIV in Sub-register 0x11:08 – Sequencing control.
GPIO_DRST_N GPIO de-bounce reset (NOT), active low. In order to use the GPIO port de-bounce filter
circuit the GPIO_DRST_N bit must be set to 1 to take the de-bounce filter circuit out of its
reg:11:04
bit:19 reset state. The GPIO_DCLK_EN enable bit (above) must also be set to 1 to enable the
clock into the GPIO de-bounce circuit.
LP_CLK_EN Kilohertz clock Enable. When this bit is set to 1 it enables the divider. The divider value
is set by LP_CLK_DIV in Sub-register 0x11:08 – Sequencing control.
reg:11:00
bit:23
Length
ID Type Mnemonic Description
(octets)
11:08 4 RW SEQ_CTRL PMSC sequencing control register
Register file: 0x11 – PMSC control and status, Sub-register 0x08 is a 32-bit control register. The SEQ_CTRL
register contains the following sub-fields:
AINIT2IDLE
PLL_SYNC
CIARUNE
ARXSLP
ATXSLP
LP_CLK_DIV - - - - - - - - - - - - - - -
-
-
-
-
-
1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 1 1 1 0 0 0
The fields of the SEQ_CTRL register identified above are individually described below:
CIARUNE CIA run enable. This bit enables the running of the CIA algorithm. CIARUNE is 1 by default
which means that the CIA algorithm is run automatically. When CIARUNE is set to zero the
reg:11:08
bit:17 CIA algorithm will not be run and the RX_STAMP in Sub-register 0x00:64 – Receive time
stamp will not be updated, however the CIA_RUN bit, may be used to run the CIA after the
packet is received. The CIA_IPATOV and CIA_STS bits in Sub-register 0x00:10 – System
configuration should be set to select which CIA analysis is required.
FORCE2INIT Force to IDLE_RC state. When device is in IDLE_PLL, but host needs to change the sate back
to IDLE_RC, e.g. it is not actively ranging and needs to save power. The host needs to clear
reg:11:08
bit:23 the AINIT2IDLE bit and set this FORCE2INIT bit. Prior to this the host needs to set SYS_CLK to
0x3 to force it to FAST_RC. The device will then transition into the IDLE_RC state. The host
should finally clear this FORCE2INIT bit back to 0. See § 2.4 – DW3000 operational states
for more details
Length
ID Type Mnemonic Description
(octets)
11:12 4 RW TXFSEQ PMSC fine grain TX sequencing control
Register file: 0x11 – PMSC control and status, Sub-register 0x12 is used to control TX fine grain power
sequencing function. The TXFSEQ register contains the following sub-fields:
The fields of the TXFSEQ register identified above are described below:
Length
ID Type Mnemonic Description
(octets)
11:16 4 RW LED_CTRL LED control register
Register file: 0x11 – PMSC control and status, Sub-register 0x16 is a 32-bit LED control register. The
LED_CTRL register contains the following sub-fields:
BLINK_EN
- - - - - - - - - - - - FORCE_TRIG - - - - - - - BLINK_TIM
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
The fields of the LED_CTRL register identified above are individually described below:
reg:11:16
bits:19:16
Length
ID Type Mnemonic Description
(octets)
0x11:1A 4 RW RX_SNIFF Receiver SNIFF mode configuration
Register file: 0x11 – PMSC control and status, Sub-register 0x16 is a 32-bit register used for configuration of
SNIFF mode, which is a power saving technique that can be employed to reduce the power consumption of
preamble detection. For normal preamble reception the receiver searches for preamble continually, while in
SNIFF mode the receiver samples (“sniffs”) the air periodically on a timed basis returning to receiver idle
mode in between.
The transmitting device needs to be sending a sufficiently long preamble to allow for the SNIFF mode to
operate and leave sufficient preamble remaining thereafter to get a good reception and RX timestamp. The
power saving is dependent on the configured on/off times for this sampling. See additionally section 4.5
Low-Power SNIFF mode. The configuration consists of the fields identified and described below:
As an example, with a 1024 preamble length, a roughly 50% duty cycle (on 50% and off 50%) can be
configured with a PAC of 8 symbols, SNIFF_ON set to 3 PAC intervals, and SNIFF_OFF set to 24 microseconds.
The performance cost of this in terms of receiver sensitvity is < 1 dB.
Length
ID Type Mnemonic Description
(octets)
11:1F 2 RW BIAS_CTRL Analog blocks’ calibration values
Register file: 0x11 – PMSC control and status, Sub-register 0x1F is used to configure analog blocks It stores
per device calibration values. Each device will have calibration values stored in OTP and these should be
written here on power up to ensure optimal device operation. The BIAS_CTRL register contains the following
sub-fields:
The fields of the BIAS_CTRL register identified above are described below:
- Bits marked ‘-’ are reserved and should be preserved at their reset value.
Length
ID Type Mnemonic Description
(octets)
12 1024 ROD RX_BUFFER_0 RX frame data buffer 0
Register map register file 0x12:00 is the main receive data buffer. The data from the received frame is
available in the received buffer. Assuming successful reception of a good frame, the full length of received
data (as reported by the RXFLEN field of REG_RX_FINFO), will be available in the RX_BUFFER_0 beginning at
offset 0. Note since the reported length includes the FCS the host system will probably choose not to read
these final two octets.
Write operations to the RX_BUFFER_0 are NOT supported; a write operation to the RX_BUFFER_0 will
corrupt the buffer contents.
Length
ID Type Mnemonic Description
(octets)
13 1024 ROD RX_BUFFER_1 RX frame data buffer 1
Register map register file 0x13:00 is the second receive data buffer. The data from the received frame is
available in this received buffer, only when double buffer mode is enabled and the main buffer
(RX_BUFFER_0) is full. Assuming successful reception of a good frame, the full length of received data (as
reported (in SET_2) by the RXFLEN field of register 0x18:E8, copy of the RX_FINFO), will be available in the
RX_BUFFER_1 beginning at offset 0. Note since the reported length includes the FCS the host system will
probably choose not to read these final two octets.
Write operations to the RX_BUFFER_1 are NOT supported; a write operation to the RX_BUFFER_0 will
corrupt the buffer contents.
Length
ID Type Mnemonic Description
(octets)
14 1024 WO TX_BUFFER Transmit data buffer
Register map register file 0x14:00 is the transmit data buffer. Data from the transmit buffer is transmitted
during the data payload portion of the transmitted packet. Section 3 Message transmission discusses the
basics of packet transmission and details the various parts of the TX packet.
The general procedure is to write the data frame for transmission into the TX_BUFFER, set the frame length
and other details in the TX_FCTRL register and initiate transmission using in the start TX command (CMD_TX).
Note that read operations from the transmit data buffer are NOT supported.
Length
ID Type Mnemonic Description
(octets)
15 12288 RO ACC_MEM Read access to accumulator data memory
Register map register file 0x15:00 is a large bank of memory that holds the accumulated channel impulse
response (CIR) data. Really this is a channel impulse response estimate (CIRE) but the abbreviation CIR is
used to mean the same thing throughout this manual. To accurately determine this timestamp the DW3000
incorporates a channel impulse analyser (CIA) algorithm to processes the CIR (in the accumulator) to find the
leading edge and adjust the RMARKER receive timestamp as reported in Sub-register 0x00:64 – Receive time
stamp.
The host system does not need to access the ACC_MEM in normal operation, however it may be of interest
to the system design engineers to visualise the radio channel for diagnostic purposes.
The accumulator data memory actually contains one or two CIR depending on the STS packet configuration
being employed. One CIR is generated by the accumulation of the repeated symbols of the preamble
correlated against the expected symbol as determined by the RX preamble code configuration, PCODE in
Sub-register 0x01:14 – Channel control. The other CIR is generated by the accumulation of the STS sequence
correlated against the expected STS pulse pattern cryptographically generated locally in the receiver. Please
refer to § 6 – Secure ranging / timestamping for details of the operation of the STS for secure ranging
operations.
Accessing the accumulator CIR memory is a little different than accessing other register files in two ways:
Firstly for every SPI read access of the accumulator memory, a single dummy octet is output before the first
byte of valid accumulator data. Secondly the offset specified in the SPI transaction is not the byte index, but
instead is the sample index, where each accumulator sample is an complex value provided as a 24-bit (3-
octet) real value followed by a 24-bit (3-octet) imaginary value. Each value is actually 18-bit precision, with
the upper 6-bits being all zero or ones depending on the sign of the value.
Prior to reading from the accumulator CIR memory both ACC_CLK_EN bit and the ACC_MCLK_EN bit (in Sub-
register 0x11:04 – Clock control) need to be set to 1 to allow the accumulator reading to operate correctly.
The preamble CIR begins at sample index 0 and has a span of one symbol, which is 992 samples at 16 MHz
PRF, and, 1016 samples at 64 MHz PRF. The STS CIR begins at sample index 1024 and has a span of 512
sample times irrespective of PRF setting. When PDoA Mode 3 is used the STS is used to determine two CIR
estimates. The first will begin at sample 1024 and the second at sample 1536. Both CIRs are 512 samples
long.
When reading from CIR memory with an offset less than 127, a normal SPI read can be used, see 2.3.1.2
Transaction formats of the SPI interface, however to read data from CIR memory with offset greater than
127, an indirect SPI read has to be done. To perform an indirect SPI read indirect pointers need to be used:
PTR_ADDR_A or PTR_ADDR_B. Firstly the register address needs to be programmed into e.g. indirect pointer
A (PTR_ADDR_A) and offset into PTR_OFFSET_A and then the indirect pointer register (INDIRECT_PTR_A)
needs to be read as normal to read out the required data.
Note, when reading out the CIR data, the first byte of the transaction data (see Figure 1) is a dummy byte
and should be ignored.
Length
ID Type Mnemonic Description
(octets)
16 127 RW SCRATCH_RAM Scratch RAM memory buffer
Register map register file 0x16:00 is the scratch RAM memory buffer. This memory can be used as a
temporary store, or during AES/DMA operations. The data will not be preserved if the device is powerd off
or when it enters SLEEP or DEEPSLEEP state.
Length
ID Type Mnemonic Description
(octets)
17 RW AES_KEY_RAM AES KEY RAM - storage for up to 8 x 128 bit AES KEYs
Register map register file 0x17 is a large bank of memory that holds up to 8 128-bit AES KEYs as shown in
Table 42 below. The 32-bit KEY words need to be programmed starting with the MSB 32-bit word in the
lowest register memory address, as shown in Table 42 below.
Length
ID Type Mnemonic Description
(octets)
0x18 RO DB_DIAG Double buffer diagnostic register set
Register map register file 0x18 is a large bank of memory that holds the double buffer diagnostic register set.
It contains two swinging sets corresponding to two receive buffers (SET_1 and SET_2). Each set is 232 bytes
long. The first set starts at address 0x18:00, and the second at address 0x18:E8, as shown in Table 44 below.
The RDB_DMODE configuration specifies how much diagnostic data will be logged. The minimum
configuration (i.e. when RDB_DMODE is set to 1) only logs 7 registers, the maximum logs all CIA diagnostic
registers.
Table 44: Register file: 0x18 – Double buffer diagnostic register set overview
Length
ID Type Mnemonic Description
(octets)
1D - RW INDIRECT_PTR_A Indirect pointer A
Register map register file 0x1E:00 is the indirect pointer A. When reading or writing to this register the host
will access register that was programmed into PTR_ADDR_A, at offset programmed into PTR_OFFSET_A. The
indirect register addess is needed when accessing the register contents starting at offset > 127.
Length
ID Type Mnemonic Description
(octets)
1E - RW INDIRECT_PTR_B Indirect pointer B
Register map register file 0x1E:00 is the indirect pointer B. When reading or writing to this register the host
will access register that was programmed into PTR_ADDR_B, at offset programmed intoPTR_OFFSET_B. The
indirect register addess is needed when accessing the register contents starting at offset > 127
Length
ID Type Mnemonic Description
(octets)
1F 19 - IN_PTR_CFG Indirect pointer configuration and fast interrupt status register
Register map register file 0x1F contains the reduced status events set status register and the indirect pointer
configuration interface. The latter allows read/write access to registers with register subaddresses > 127.
For example to read 10 bytes from RX_BUFFER_0 from any offset <= 127, a normal SPI read transaction
should be used. However to read the same bytes from RX_BUFFER_0 with offset > 127, the indirect access
needs to be used. This is achieved as follows (either pointer A (INDIRECT_PTR_A) or pointer B
(INDIRECT_PTR_B) can be used for this):
• Program the base addres of the register to be accessed through the indirect pointer, if using pointer
A then program PTR_ADDR_A
• Program the offset of the register to be accessed, if using pointer A then program PTR_OFFSET_A
• Read/Write the desired data by using a standard SPI read/write transaction from INDIRECT_PTR_A.
There are a number of sub-registers in this register file. An overview of these sub-registers is given by Table
45, and each is then separately described in the sub-sections below.
Table 45: Register file: 0x1F – FINT status and indirect pointer interface overview
OFFSET in Register
Mnemonic Description
0x1F
0x00 FINT_STAT Fast System Event Status Register
0x04 PTR_ADDR_A Base address of register to be accessed through pointer A
0x08 PTR_OFFSET_A Offset address of register to be accessed through pointer A
0x0C PTR_ADDR_B Base address of register to be accessed through pointer B
0x10 PTR_OFFSET_B Offset address of register to be accessed through pointer B
Length
ID Type Mnemonic Description
(octets)
1F:00 1 RO FINT_STAT Fast system event status register
Register file: 0x1F – FINT status and indirect pointer interface, sub-register 0x00 is the reduced system event
status register, FINT_STAT. It contains status bits that indicate the occurrence of different system events or
status changes. It is a reduced set of SYS_STATUS events. Reading the FINT_STAT register returns the state
of the status bits as long as the matching SYS_ENABLE event bit is set. Thus it will report the events which
gave rise to the interrupt. Generally these event status bits are latched so that the event is captured. The
bits will have to be cleared by writing to relevant SYS_STATUS bits. The FINT_STAT register contains the
system event status bits identified and described below:
SYS_EVENT
SYS_PANIC
CCA_FAIL
RXTSERR
RXERR
RXOK
RXTO
TXOK
0 0 0 0 0 0 0 0
The system event status bits of the FINT_STAT register identified above are individually described below:
Field Description of fields within Sub-register 0x1F:00 – Fast system event status
– Bits marked ‘-’ are reserved and should not be changed.
reg:1F:00
bit:various
TXOK This bit will be set if any of the following events are set in the SYS_STATUS register:
TXFRB or TXPRS or TXPHS or TXFRS. This is a READ ONLY status flag – it will be cleared by
reg:1F:00 writing 1 to relevant status bits (as listed above) in Sub-register 0x00:44 – System event
bit:0
status, whichever ones are set.
CCA_FAIL This bit will be set if any of the following events are set in the SYS_STATUS register:
AAT or CCA_FAIL. This is a READ ONLY status flag – it will be cleared by writing 1 to ….
reg:1F:00 Status bit in Sub-register 0x00:44 – System event status.
bit:1
RXTSERR This bit will be set if CIAERR event is set in the SYS_STATUS register:
This is a READ ONLY status flag – it will be cleared by writing 1 to CIAERR status bit in Sub-
reg:1F:00 register 0x00:44 – System event status.
bit:2
RXOK This bit will be set if any of the following events are set in the SYS_STATUS register:
RXFR and CIADONE or RXFCG. This is a READ ONLY status flag – it will be cleared by writing
reg:1F:00 1 to relevant status bits (as listed above) in Sub-register 0x00:44 – System event status.
bit:3
RXERR This bit will be set if any of the following events are set in the SYS_STATUS register:
RXFCE or RXFSL or RXPHE or ARFE or RXSTO or RXOVRR. This is a READ ONLY status flag – it
reg:1F:00 will be cleared by writing 1 to relevant status bits (as listed above) in Sub-register 0x00:44 –
bit:4
System event status, whichever ones are set.
RXTO This bit will be set if any of the following events are set in the SYS_STATUS register:
RXFTO or RXPTO. This is a READ ONLY status flag – it will be cleared by writing 1 to RXFTO
reg:1F:00 or RXPTO status bits in Sub-register 0x00:44 – System event status, whichever ones are set.
bit:5
SYS_EVENT This bit will be set if any of the following events are set in the SYS_STATUS register:
VT_DET or GPIOIRQ or RCINIT or SPIRDY. This is a READ ONLY status flag – it will be cleared
reg:1F:00 by writing 1 to relevant status bits (as listed above) in Sub-register 0x00:44 – System event
bit:6
status, whichever ones are set.
SYS_PANIC This bit will be set if any of the following events are set in the SYS_STATUS register:
AES_ERR or CMD_ERR or SPI_UNF or SPI_OVF or SPIERR or PLL_HILO or VWARN. This is a
reg:1F:00 READ ONLY status flag – it will be cleared by writing 1 to relevant status bits (as listed above)
bit:7
in Sub-register 0x00:44 – System event status, whichever ones are set.
Length
ID Type Mnemonic Description
(octets)
1F:04 1 RW PTR_ADDR_A Base address of the register to be accessed through indirect
pointer A
Register file: 0x1F – FINT status and indirect pointer interface, sub-register 0x04 contains the base address of
the register to be accessed through indirect pointer A. The PTR_ADDR_A register is described below:
- - - PTRA_BASE
0 0 0 0 0 0 0 0
The bits of the PTR_ADDR_A register identified above are individually described below:
Field Description of fields within Sub-register 0x1F:04 – Pointer A reg base address
PTRA_BASE The base address of the register to be accessed through indirect pointer A
(INDIRECT_PTR_A)
reg:1F:04
bits:4-0
– Bits marked ‘-’ are reserved and should not be changed.
reg:1F:04
bits:7-5
Length
ID Type Mnemonic Description
(octets)
1F:08 2 RW PTR_OFFSET_A Offset address of the register to be accessed through indirect
pointer A
Register file: 0x1F – FINT status and indirect pointer interface, sub-register 0x08 contains the offset address
of the register to be accessed through indirect pointer A. The PTR_OFFSET_A register is described below:
- PTRA_OFS
0 0 0 0 0 0 0 0
The bits of the PTR_OFFSET_A register identified above are individually described below:
Field Description of fields within Sub-register 0x1F:08 – Pointer A reg offset address
PTRA_OFS The offset address of the register to be accessed through indirect pointer A
(INDIRECT_PTR_A).
reg:1F:08
bits:14-0
– Bits marked ‘-’ are reserved and should not be changed.
reg:1F:04
bit:15
Length
ID Type Mnemonic Description
(octets)
1F:0C 1 RW PTR_ADDR_B Base address of the register to be accessed through indirect
pointer B
Register file: 0x1F – FINT status and indirect pointer interface, sub-register 0x0C contains the base address of
the register to be accessed through indirect pointer B. Note: in the API [3] indirect pointer B is reserved for
double buffer SET_2 access.The PTR_ADDR_B register is described below:
- - - PTRB_BASE
0 0 0 0 0 0 0 0
The bits of the PTR_ADDR_B register identified above are individually described below:
Field Description of fields within Sub-register 0x1F:0C – Pointer B reg base address
PTRB_BASE The base address of the register to be accessed through indirect pointer B
(INDIRECT_PTR_B).
reg:1F:0C
bits:4-0
Field Description of fields within Sub-register 0x1F:0C – Pointer B reg base address
– Bits marked ‘-’ are reserved and should not be changed.
reg:1F:0C
bits:7-5
Length
ID Type Mnemonic Description
(octets)
1F:10 2 RW PTR_OFFSET_B Offset address of the register to be accessed through indirect
pointer B
Register file: 0x1F – FINT status and indirect pointer interface, sub-register 0x08 contains the offset address
of the register to be accessed through indirect pointer B. Note: in the API [3] indirect pointer B is reserved
for double buffer SET_2 access. The PTR_OFFSET_B register is described below:
- PTRB_OFS
0 0 0 0 0 0 0 0
The bits of the PTR_OFFSET_B register identified above are individually described below:
Field Description of fields within Sub-register 0x1F:10 – Pointer B reg offset address
PTRA_OFS The offset address of the register to be accessed through indirect pointer B
(INDIRECT_PTR_B).
reg:1F:10
bits:14-0
– Bits marked ‘-’ are reserved and should not be changed.
reg:1F:10
bit:15
9 Fast Commands
This section lists and describes the single-octet commands used initiate specific IC activities. For details of
format for the fast command SPI transaction please refer to section 2.3 – The SPI interface. Table 46 lists the
supported commands and their hex codes, and each command is described in separate sub-sections
following this.
9.1 CMD_TXRXOFF
This command puts the device into IDLE_PLL state, it will turn off the transmitter or receiver if the device is
actively transmitting or receiving, thus any active transmission or reception is aborted.
This command must be issued only when device is in IDLE_PLL, TX or RX state, otherwise the device will
need a restart. It should not be issued when device is in INIT_RC or IDLE_RC states.
Note:
If host has configured the device into TX test mode: e.g. continuous frame mode (when TX_PSTM bit is
set), issuing TRXOFF will not put the device into IDLE state.
9.2 CMD_TX
This is a start TX command. It commands the DW3000 to start transmission. The transmission will start
immediately once the TX blocks are powered up. In general it would be expected that the user has a
prepared frame in the transmit buffer and has configured the desired transmit mode and set the frame
length. For general discussion of transmission see section 3 Message transmission.
9.3 CMD_RX
This command enables the receiver. It commands the DW3000 to turn on its receiver and begin looking for
the configured preamble sequence. It is assumed that the all necessary configurations have been made
before turning on the receiver. For general discussion of reception see section 4 Message reception.
9.4 CMD_DTX
This command instructs the device to do a delayed transmission. This control works in conjunction with the
DX_TIME value specified by Sub-register 0x00:2C – Delayed send or receive time. When the user wants to
control the time of sending of a packet, the send time is programmed into DX_TIME, and then this command
issued.
When delayed sending is used the DW3000 precisely controls the transmission start time so that the internal
TX timestamp occurs at the point when SYS_TIME is equal to the DX_TIME value. The actual time of TX then
is calculable as DX_TIME plus the TX antenna delay.
Delayed TX notes:
• It can be used to give precise control of the transmission time of a response message, which would allow a
receiver that knows this response time to only turn on at the correct time to receive the response, thus
saving power.
• In symmetric double-sided two-way ranging, the RX to TX response times at either end should be the same
so that their differences in local clocks correctly cancel out. This may be ensured by setting DX_TIME to a
value that is a fixed delta added to the RX time-stamp.
• In two-way ranging the TX timestamp of the final message exchange needs to be communicated to the
receiving end to allow the round-trip delay to be calculated. Using CMD_DTX allows this time to be
predicted, pre-calculated and embedded into the final message itself. This may save the need for an
additional message interchange which will give a power saving, and save time too.
• Embedding the TX time in this way may also reduce the number of messages in a wireless clock
synchronisation scheme.
Note:
If host issues a delayed transmit command after the specified TX time has “passed”, i.e. the time (in
DX_TIME) is more than half period away from the current system time, a HPDWARN event will be set
(please see full description of HPDWARN event). Otherwise the device should enter the TX delay wait
state (PMSC_STATE = 0xA), and remain in this state until it starts to transmit the packet.
Due to an errata in the DW3000, there is a case when neither the HPDWARN event gets set nor does the
packet get transmitted. This happens when the time at which the transmitter needs to be enabled to send
occurs within the analog front-end power up time preceding the current time. To avoid this bug reliably,
the delayed send time must be set far enough in advance; it should be at least equal or more than the
current time + preamble length + SFD length + 20 µs, or the time should be passed which will give rise to
HPDWARN.
The host can check for this issue by reading the PMSC_STATE. When this bug occurs, the PMSC_STATE will
be “TX” but TX_STATE will be “IDLE”, the TXFRS event will never be set, see state descriptions in 8.2.14.19
Sub-register 0x0F:30 – System state. The host should abort the transmission in this case. This check and
recovery is implemented in the published DW3000 dwt-starttx() API.
9.5 CMD_DRX
This command instructs the device to turn on the receiver with a delay. This command works in conjunction
with the DX_TIME value specified by Sub-register 0x00:2C – Delayed send or receive time. When the user
wants to control the time of turning on the receiver, the turn on time is programmed into DX_TIME, and
then this command executed. The DW3000 then precisely controls the RX turn on time so that it is ready to
receive the first symbol of preamble at the specified DX_TIME start time. In cases when the received time
can be known precisely, for example when a response is expected at a well-defined time, employing
CDM_DRX will give a power saving as it allows the IC to remain idle until the moment it is required to act for
the reception
9.6 CMD_DTX_TS
This command will do a delayed transmission with respect to the last transmission timestamp. The new TX
timestamp will be the combination of the previous TX timestamp and the delay programmed in the DX_TIME
value specified by Sub-register 0x00:2C – Delayed send or receive time (i.e. TX_TSnew = TX_Tsold +
DX_TIME). See also notes in delayed TX section 9.4.1.
9.7 CMD_DRX_TS
This command will instruct the device to turn on its receiver with respect to the last transmission timestamp.
The receiver turn on time will be the combination of the previous TX timestamp and the delay programmed
in the DX_TIME value specified by Sub-register 0x00:2C – Delayed send or receive time.
9.8 CMD_DTX_RS
This command will do a delayed transmission with respect to the last receive timestamp. The new TX
timestamp will be the combination of the previous RX timestamp (RX_TIME) and the delay programmed in
the DX_TIME value specified by Sub-register 0x00:2C – Delayed send or receive time (i.e. TX_Tsnew =
RX_Tsold + DX_TIME). See also notes in delayed TX section 9.4.1.
9.9 CMD_DRX_RS
This command will instruct the device to turn on its receiver with respect to the last receive timestamp. The
receiver turn on time will be the combination of the previous RX timestamp and the delay programmed in
the DX_TIME value specified by Sub-register 0x00:2C – Delayed send or receive time
9.10 CMD_DTX_REF
This command will do a delayed transmission with respect to the time programmed into the DREF_TIME
register. The new TX timestamp will be the combination of the DREF_TIME and the delay programmed in
the DX_TIME value specified by Sub-register 0x00:2C – Delayed send or receive time (i.e. TX_Tsnew = DREF +
DX_TIME). See also notes in delayed TX section 9.4.1.
9.11 CMD_DRX_REF
This command will instruct the device to turn on its receiver with respect to the time programmed into the
DREF_TIME register. The receiver turn on time will be the combination of the DREF_TIME and the delay
programmed in the DX_TIME value specified by Sub-register 0x00:2C – Delayed send or receive time
9.12 CMD_CCA_TX
This command instructs the device to perform a pseudo CCA before starting transmission. Once this
command is issued the device will turn on the receiver and failing to detect preamble within the time
programmed in the preamble detection timeout register (Sub-register 0x06:04 – Preamble detection timeout
count) it will start the transmission of the packet. If the preamble detection occurs, the transmission will be
aborted and preamble detection signalled (RXPRD).
9.13 CMD_TX_W4R
Similarly to the start TX command above. It initially commands the DW3000 to start transmission, and then
once the transmission is complete the device will enable its receiver. Optionally receiver can be enabled with
a delay programmed into W4R_TIM in Sub-register 0x01:08 – Acknowledgement time and response time.
9.14 CMD_DTX_W4R
Similarly to the delayed TX command above. It initially commands the DW3000 to start delayed transmission
(as described in CMD_DTX), and then once the transmission is complete the device will enable its receiver.
Optionally receiver can be enabled with a delay programmed into W4R_TIM in Sub-register 0x01:08 –
Acknowledgement time and response time. See also notes in delayed TX section 9.4.1.
9.15 CMD_DTX_TS_W4R
Similarly to the delayed TX command above. It initially commands the DW3000 to start delayed transmission
(as described in CMD_DTX_TS), and then once the transmission is complete the device will enable its receiver.
Optionally receiver can be enabled with a delay programmed into W4R_TIM in Sub-register 0x01:08 –
Acknowledgement time and response time. See also notes in delayed TX section 9.4.1.
9.16 CMD_DTX_RS_W4R
Similarly to the delayed TX command above. It initially commands the DW3000 to start delayed transmission
(as described in CMD_DTX_RS), and then once the transmission is complete the device will enable its receiver.
Optionally receiver can be enabled with a delay programmed into W4R_TIM in Sub-register 0x01:08 –
Acknowledgement time and response time. See also notes in delayed TX section 9.4.1.
9.17 CMD_DTX_REF_W4R
Similarly to the delayed TX command above. It initially commands the DW3000 to start delayed transmission
(as described in CMD_DTX_REF), and then once the transmission is complete the device will enable its
receiver. Optionally receiver can be enabled with a delay programmed into W4R_TIM in Sub-register 0x01:08
– Acknowledgement time and response time. See also notes in delayed TX section 9.4.1.
9.18 CMD_CCA_TX_W4R
Similarly to the pseudo CCA TX command above. It initially commands the DW3000 to start transmission (as
described in CMD_CCA_TX), and then once the transmission is complete the device will enable its receiver.
Optionally receiver can be enabled with a delay programmed into W4R_TIM in Sub-register 0x01:08 –
Acknowledgement time and response time
9.19 CMD_CLR_IRQS
This command will clear all of the status events and will clear the interrupt if set.
9.20 CMD_DB_TOGGLE
This command is only applicable when the device is using double buffering (the DIS_DRXB is set to 0). It will
notify the device that the host has finished with the last RX buffer and the buffer is free for the device to use
for another RX packet reception.
10 Calibration
The operating characteristics and performance of the DW3000 is dependent on the IC itself and on its
external circuitry and on its operating environment. To give optimum performance it is necessary to
calibrate the IC to account for factors which affect its operation.
Some calibration parameters are dependent solely on process variations that occur within the silicon of the
IC during its manufacture. These are typically measured during IC production test and the required
calibration parameters are written to the OTP memory of the DW3000. The host system software can then
use these values during DW3000 configuration to optimise the DW3000 performance.
Some calibration parameters are dependent on circuit elements external to the IC. These can only be
determined during the manufacture of the product e.g. a module into which the DW3000 is soldered. These
parameters are typically measured during product test and the required calibration parameters are stored in
an area of the DW3000’s OTP memory which has been allocated for test calibration parameters. The host
system software will use this calibration data during DW3000 configuration to optimise the DW3000
performance.
Some calibration parameters may vary according to the operational environment of the DW3000. For
example some parameters may need to be changed if there are large variations in the ambient temperature
(e.g. moving from a warm area into a cold store). In such circumstances in order to optimise the DW3000
performance the host system software can monitor the voltage and temperature using DW3000 and adjust
configuration accordingly.
• Crystal trimming – the DW3000 contains trimming capacitors that can fine tune the operating
frequency of its crystal oscillator.
• Transmitter output power and spectrum – the DW3000 output spectrum is tuneable to meet
regional spectral regulations and maximise the output power to achieve the greatest operating
range.
• Antenna delay – the DW3000 antenna delay may be fine-tuned to give best possible ranging or
location accuracy.
• IC calibration – PLL calibration over temperature.
by switching in internal capacitor banks in parallel with the external loading capacitors associated with the
chosen crystal. This trimming can be used to reduce the crystal initial frequency error and to compensate for
temperature and aging drift, if required.
The amount of trimming is programmable through Sub-register 0x09:14 – Crystal trim register.
Calibration method
Bandwidth PG_DELAY
Calibration method
Please see API and example code [3], , and Application Note APS312 [6]
To calibrate the antenna delay, range is measured at a known distance using two DW3000 systems. Antenna
delay is adjusted until the known distance and reported range agree. The antenna delay can be stored in
OTP memory.
There is a Transmitter Antenna Delay and a Receiver Antenna Delay. The Transmitter Antenna Delay is used
to account for the delay between the internal digital timestamp of the RMARKER (as shown in Figure 13)
inside the DW3000 and the time the RMARKER is transmitted from the antenna. The Receiver Antenna Delay
is used to account for the delay between the time of arrival of the RMARKER at the antenna and the internal
digital timestamp of the RMARKER inside the DW3000.
Distance
TX RX
TX antenna antenna RX
delay delay
Calibration method
• firstly the device state needs to be changed to IDLE_RC state, by clearing AINIT2IDLE configuration
bit in SEQ_CTRL and setting the FORCE2INIT bit
• then setting system clocks to FAST_RC, by setting the SYSCLKS field to 0x3
• then clearing the FORCE2INIT bit
• and restoring system clocks to Auto mode, by setting setting the SYSCLKS field to 0x0
• finally the host should set the CAL_EN bit in PLL_CAL register and the AINIT2IDLE configuration bit in
SEQ_CTRL register to cause the IC will enable the PLL and wait for it to lock before entering the
IDLE_PLL state
This only applies to channel 9. When using channel 5 the PLL does not need to be re-calibrated if
temperature changes.
11 Location schemes
This part of the discussion on operational design choices relates to RTLS location schemes. Some of the ideas
and points discussed may be more generally applicable.
In general to locate a mobile node measurements are needed to be referenced to a number of fixed known
location “anchor” nodes. Typically a minimum of three anchor nodes are needed to locate a mobile node in
two dimensions, while a minimum four non-coplanar anchors are needed to locate a mobile node in three
dimensions. The spacing of anchors nodes in an installation has to be such that four anchors are always in
communication range of the mobile tag no matter where it is within the operating space. The
communication range is dependent on data rate and preamble length, the choice of which is influenced by
the node density requirements and perhaps also power consumption.
There are three general methods of doing location. These are time difference of arrival (TDoA) based
location, time of flight (ToF) based location and Phase Difference of Arrival (PDoA). The main operational
points of each are outlined below. In either case the calculation of location, combining measurements from
multiple anchors, is typically done by a software functionality called the central location engine.
Time of flight location requires two-way communication from the mobile node (tag) to each of the anchor
nodes in its vicinity. Periodic message exchanges are used to measure the round trip delay and hence
calculate the one way flight time between tag and anchor. The ToF times multiplied by the speed of light
(and radio waves) gives the distance between the tag and the anchor. Each distance estimate defines a
spherical surface, centred on the anchor, on which the tag must lie. The tag’s 3D location is yielded by the
intersection of the spheres resulting from ToF measurements to the four anchors.
In time difference of arrival (TDoA) location the mobile tag blinks periodically and the blink message is
received by the anchor nodes in its vicinity. When the anchor nodes have synchronised clocks so that the
arrival time of the blink message at all nodes can be compared, then for each pair of anchors the time
difference in the arrival of the blink message defines a hyperbolic surface on which the sending tag must lie.
The tag’s 3D location is yielded by the intersection of the hyperbolic surfaces defined by the TDoA of the
blink at four pairs of anchors.
Phase Difference of Arrival involves determining the phase difference at which the radio signal from the tag
arrives at the anchor relative to a predefined direction. By measuring PDoA at a number of anchors whose
position is known the source of the transmission can be determined. For low power RTLS deployments the
TDoA scheme has benefits in that the tag needs to only send a single message in order for it to be located.
In contrast in the ToF scheme the tag has to send and receive multiple messages with multiple anchors, and
it needs to know what anchors are in the vicinity so it can address each of them in turn correctly. ToF does
not need synchronised anchors, and may suit the case where a hand held device calculates its own location
as part of a navigation system. The TDoA is a lower power solution as there are fewer messages involved,
and this also suits higher density deployments. The TDoA anchor clock synchronisation may be achieved via
a wired clock distribution. Alternatively there are wireless techniques for clock synchronisation. Wired
synchronisation may suit higher tag densities as it allows anchors to listen all the time so no tag blinks are
missed or collide with the wireless clock sync messages (potentially disrupting synchronisation). Anchors
should be wired for power and also with Ethernet to communicate the arrival times to the central location
engine.
Two-way ranging (ToF) is good for proximity detection and separation alarms, especially when both parties
in the exchange are mobile nodes.
In an RTLS the accuracy of the DW3000’s RX timestamps can give sub 10 cm resolution. Note, however that
the geometry of anchors with respect to the tag can smear the accuracy of the calculated location when
individual measurements are combined. Having additional anchors in range of the tag can offset this if it
allows the system to select anchors with best geometry and best receive signal quality with respect to the
tag being located.
The chosen two-way ranging algorithm is implemented by host system software and is not a feature of the
DW3000. The DW3000 just provides the facilities for message time-stamping and precise control of message
transmission times that enable these algorithms. See section 4.1.7 – RX message timestamp, 3.2 –
Transmission timestamp and 3.3 – Delayed transmission for details of this.
In all of the schemes that follow one node acts as Initiator, initiating a range measurement, while the other
node acts as a Responder listening and responding to the initiator, and calculating the range.
Tround
Device A time
TX RX
Tprop Tprop
Device B
RX TX
RMARKER Treply
The operation of SS-TWR is as shown in Figure 31, where device A initiates the exchange and device B
responds to complete the exchange and each device precisely timestamps the transmission and reception
times of the packets, and thus can calculate times Tround and Treply by simple subtraction. And the resultant
time-of-flight, Tprop may be estimated by the equation:
1
𝑇̂𝑝𝑟𝑜𝑝 = (𝑇𝑟𝑜𝑢𝑛𝑑 − 𝑇𝑟𝑒𝑝𝑙𝑦 )
2
The times Tround and Treply are measured independently by device A and B using their respective local clocks,
which both have some clock offset error eA and eB from their nominal frequency, and so the resulting time-
of-flight estimate has a considerable error that increases as Treply increases. DW3000 however is able to
measure the clock offset of the remote transmitter, (see REG_DRX_DIAG3), and this may be used to
compensate for that error, using the modified equation below, to produce results that are as good as can be
achieved using DS-TWR where the reply times are not too long, (i.e. < 5 ms).
1
𝑇̂𝑝𝑟𝑜𝑝 = (𝑇 − 𝑇𝑟𝑒𝑝𝑙𝑦 (1 − 𝐶𝑜𝑓𝑓𝑒𝑠𝑡 ))
2 𝑟𝑜𝑢𝑛𝑑
© Decawave Ltd 2019 Version 1.1 Page 248 of 255
DW3000 User Manual
Double-sided two-way ranging (DS-TWR) is an extension of the basic single-sided two-way ranging in which
two round trip time measurements are used and combined to give a time-of-flight result which has a
reduced error even for quite long response delays.
Tround1 Treply2
Device A time
TX RX RX TX
Device B
RX TX TX RX
RMARKER Treply1 Tround2
The operation of DS-TWR is as shown in Figure 32, where device A initiates the first round trip measurement
to which device B responds, after which device B initiates the second round trip measurement to which
device A responds completing the full DS-TWR exchange. Each device precisely timestamps the transmission
and reception times of the messages.
The four messages of DS-TWR, shown in Figure 32, can be reduced to three messages by using the reply of
the first round-trip measurement as the initiator of the second round-trip measurement. This is shown in
Figure 33.
Tround1 Treply2
Device A time
TX RX TX
Device B
RX TX RX
RMARKER Treply1 Tround2
The resultant time-of-flight estimate, Tprop, in both the three and four message cases may be calculated using
the expression:
This scheme is denoted ASYMMETRIC because it does not require the reply times from each device to be the
same. Using this scheme, the typical clock induced error is in the low picosecond range even with 20 ppm
crystals.
The asymmetric method allows complex ranging schemes to be achieved with a small number of messages.
For example ranging from a tag to three anchors, can be achieved as per in Figure 34 where the tag can be
located after sending only 2 messages and receiving 3.
This represents a substantial saving in message traffic thereby saving battery power and air-time. This
assumes that the anchors are networked and pool the range measurements in some centralised location
engine function that calculates the estimate of the tag’s location.
Tround1C Treply2C
Tround1B Treply2B
Tround1A Treply2A
Tag time
Poll RespA RespB RespC Final
TX RX RX RX TX
Figure 34: Ranging to 3 anchors with just 5 messages where each anchor calculates its own range result
single error A parity check sequence (used in the PHR) that allows the:
SECDED correct, double • detection and correction of a single bit error in a group of bits or
error detect • the detection but not the correction of a double bit error
Defined in IEEE802.15.4 [1]. The SFD marks the completion of the
start of frame
SFD preamble section of the packet and the start of the payload or STS
delimiter
section depending on the packet type.
synchronisation Defined in the context of the IEEE802.15.4 standard. The SHR consists
SHR
header of the preamble and the SFD.
serial peripheral An industry accepted method for interfacing between IC’s using a
SPI
interface synchronous serial scheme first introduced by Motorola
STS packet A packet configuration where the packet consists of just preamble, SFD
SP3
configuration 3 and STS.
A term used to refer to a sequence of pseudo-randomized pulses
scrambled
generated using a deterministic random bit generator (DRBG) and
STS timestamp
sequence
included in the UWB packet as per Figure 13 depending on the STS
packet configuration.
Method of deriving information on the location of a transmitter. The
time of arrival of a packet at physically different locations whose clocks
are synchronized is noted and the difference in the arrival times
time difference of
TDoA provides information on the location of the transmitter. A number of
arrival
such TDoA measurements at different locations can be used to uniquely
determine the position of the transmitter. Refer to Decawave’s website
for further information.
The receive time of a packet, generally referenced to the RMARKER,
ToA Time of arrival
sometimes called the receive timestamp.
The time taken for a radio signal to travel between the transmitting
ToF time of flight
antenna and the receiving antenna
transmit or Term used to refer to the transmitter section of a transceiver or the
TX
transmitter operation of transmitting signals
A radio scheme employing channel bandwidths of, or in excess of,
UWB ultra wide-band
500MHz
wireless sensor A network of wireless nodes intended to enable the monitoring and
WSN
networks control of the physical environment
14 APPENDIX 3: References
[1] IEEE Std 802.15.4™‐2020. IEEE Standard for Low‐Rate Wireless Networks. Developed by the LAN/MAN
Standards Committee of the IEEE Computer Society. Available from: http://standards.ieee.org/
[2] IEEE Std 802.15.4z™-2020 (Amendment to IEEE Std 802.15.4™-2020). IEEE Standard for Low-Rate Wireless
Networks. Amendment 1: Enhanced Ultra Wideband (UWB) Physical Layers (PHYs) and Associated Ranging
Techniques. Developed by the LAN/MAN Standards Committee of the IEEE Computer Society.
[3] DW3000 APIs and Simple examples release – source code available from www.decawave.com
[4] IEEE Std 802.15.8™-2017. IEEE Standard for Wireless Medium Access Control (MAC) and Physical Layer
(PHY) Specifications for Peer Aware Communications (PAC). Developed by the LAN/MAN Standards
Committee of the IEEE Computer Society. Available from: http://standards.ieee.org/
[6] APS312 Production tests for DW3000 based products – application note available from www.decawave.com
15 Document history
Table 47: Document history
16 About Decawave
Decawave develops semiconductors solutions, software, modules, reference designs - that enable real-time,
ultra-accurate, ultra-reliable local area micro-location services. Decawave’s technology enables an entirely
new class of easy to implement, highly secure, intelligent location functionality and services for IoT and
smart consumer products and applications.
For further information on this or any other Decawave product, please refer to our website
www.decawave.com