Porting simple tx and simple rx examples

[color=#222222][size=small][font=Arial, Helvetica, sans-serif]I’ve been trying to get two DWM1000 radios talking using the simple tx and simple rx examples. I’m using a DWM1000 radio connected to an NXP K22F development kit (Kinetis K22 micro controller).[/font][/size][/color]

[color=#222222][size=small][font=Arial, Helvetica, sans-serif]What I’ve done so far:[/font][/size][/color]

[color=#222222][size=small][font=Arial, Helvetica, sans-serif]1) Ported software to Kinetis environment[/font][/size][/color]
[color=#222222][size=small][font=Arial, Helvetica, sans-serif]2) Make necessary changes for SPI[/font][/size][/color]
[color=#222222][size=small][font=Arial, Helvetica, sans-serif]3) Ported simple tx example to a function called from main() every second (see code below).[/font][/size][/color]
[color=#222222][size=small][font=Arial, Helvetica, sans-serif]4) I have verified per APS022: Debugging DW1000 based products and systems that SPI is working – I can read the DevID and I can read and write to the USR_SFD register (20 bytes).[/font][/size][/color]
[color=#222222][size=small][font=Arial, Helvetica, sans-serif]5) Enabled external transmit and receive enable using dwt_setlnapamode(1, 1) (see below). I also set dat_setfinegraintxseq to false per the documentation[/font][/size][/color]
[color=#222222][size=small][font=Arial, Helvetica, sans-serif]6) Configured GPIOs on the micro controller to flash an LED (see last three lines of example below).[/font][/size][/color]
[color=#222222][size=small][font=Arial, Helvetica, sans-serif]7) I step through the code and everything executes. I run the code and everything executes (I get the LED flash at one second intervals).[/font][/size][/color]

[color=#222222][size=small][font=Arial, Helvetica, sans-serif]I don’t see anything on GPIO5 per the documentation which tells me that it’s not transmitting, but I have no idea why.[/font][/size][/color]

[color=#222222][size=small][font=Arial, Helvetica, sans-serif]I have similar rx code and it doesn’t appear to work either (nothing on GPIO6).[/font][/size][/color]

[color=#222222][size=small][font=Arial, Helvetica, sans-serif]ports_dwm1000_reset() takes the RSTn line low for about a millisecond and then goes to a high impedance state (it does not force the RSTn line high). The ports_dwm1000_get_reset() functions gets the value of the RSTn line.[/font][/size][/color]

[code][color=#000088]bool[/color][color=#000000] dwm1000_simple_tx[/color]color=#666600[/color][color=#000000]
[/color][color=#666600]{[/color][color=#000000]
ports_dwm1000_reset[/color]color=#666600;[/color][color=#000000]

[/color][color=#000088]while[/color][color=#000000] [/color]color=#666600[/color][color=#000000] [/color][color=#666600]{}[/color][color=#000000]

[/color][color=#000088]while[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]DWT_DEVICE_ID [/color][color=#666600]!=[/color][color=#000000] dwt_readdevid[/color]color=#666600)[/color][color=#000000] [/color][color=#666600]{}[/color][color=#000000]

[/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]DWT_SUCCESS [/color][color=#666600]!=[/color][color=#000000] dwt_initialise[/color]color=#666600)[/color][color=#000000]
[/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color][color=#000000]

dwt_setfinegraintxseq[/color]color=#666600;[/color][color=#000000]
dwt_setlnapamode[/color][color=#666600]([/color][color=#006666]1[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600]);[/color][color=#000000]

dwt_configure[/color]color=#666600;[/color][color=#000000]

[/color][color=#880000]/* Write frame data to DW1000 and prepare transmission. See NOTE 4 below.*/[/color][color=#000000]
[/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]DWT_SUCCESS [/color][color=#666600]!=[/color][color=#000000] dwt_writetxdata[/color][color=#666600]([/color][color=#000088]sizeof[/color]color=#666600,[/color][color=#000000] g_dwm1000_test_message[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600]))[/color][color=#000000]
[/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color][color=#000000]

dwt_writetxfctrl[/color][color=#666600]([/color][color=#000088]sizeof[/color]color=#666600,[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600]);[/color][color=#000000]

[/color][color=#000088]if[/color][color=#000000] [/color][color=#666600]([/color][color=#000000]DWT_SUCCESS [/color][color=#666600]!=[/color][color=#000000] dwt_starttx[/color]color=#666600)[/color][color=#000000]
[/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]false[/color][color=#666600];[/color][color=#000000]

[/color][color=#880000]/* Poll DW1000 until TX frame sent event set. See NOTE 5 below.

  • STATUS register is 5 bytes long but, as the event we are looking at is in the first byte of the register, we can use this simplest API
  • function to access it.*/[/color][color=#000000]
    [/color][color=#000088]while[/color][color=#000000] [/color][color=#666600](!([/color][color=#000000]dwt_read32bitreg[/color]color=#666600[/color][color=#000000] [/color][color=#666600]&[/color][color=#000000] SYS_STATUS_TXFRS[/color][color=#666600]))[/color][color=#000000] [/color][color=#666600]{}[/color][color=#000000]

uint32_t sys_status [/color][color=#666600]=[/color][color=#000000] dwt_read32bitreg[/color]color=#666600;[/color][color=#000000]
uint32_t sys_state [/color][color=#666600]=[/color][color=#000000] dwt_read32bitreg[/color]color=#666600;[/color][color=#000000]

[/color][color=#880000]/* Clear TX frame sent event. */[/color][color=#000000]
dwt_write32bitreg[/color][color=#666600]([/color][color=#000000]SYS_STATUS_ID[/color][color=#666600],[/color][color=#000000] SYS_STATUS_TXFRS[/color][color=#666600]);[/color][color=#000000]

ports_blue_led[/color]color=#666600;[/color][color=#000000]
clocks_delay_in_ms[/color]color=#666600;[/color][color=#000000]
ports_blue_led[/color]color=#666600;[/color][color=#000000]

[/color][color=#000088]return[/color][color=#000000] [/color][color=#000088]true[/color][color=#666600];[/color][color=#000000]
[/color][color=#666600]}[/color][color=#000000]
[/color][/code]
[color=#222222][size=small][font=Arial, Helvetica, sans-serif]

g_dwm1000_test_message is declared as:

[/font][/size][/color]

[code][color=#000000]uint8_t g_dwm1000_test_message[/color][color=#666600][][/color][color=#000000] [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]{[/color][color=#006666]0xC5[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘D’[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘E’[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘C’[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘A’[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘W’[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘A’[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘V’[/color][color=#666600],[/color][color=#000000] [/color][color=#008800]‘E’[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600],[/color][color=#000000] [/color][color=#006666]0[/color][color=#666600]};[/color][color=#000000]

[/color][/code]

[color=#222222][size=small][font=Arial, Helvetica, sans-serif]
g_dwm1000_config is copied from the examples:[/font][/size][/color]

[color=#000088]static[/color][color=#000000] dwt_config_t g_dwm1000_config [/color][color=#666600]=[/color][color=#000000] [/color][color=#666600]{[/color][color=#000000] [/color][color=#006666]2[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* Channel number. */[/color][color=#000000] DWT_PRF_64M[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* Pulse repetition frequency. */[/color][color=#000000] DWT_PLEN_1024[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* Preamble length. Used in TX only. */[/color][color=#000000] DWT_PAC32[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* Preamble acquisition chunk size. Used in RX only. */[/color][color=#000000] [/color][color=#006666]9[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* TX preamble code. Used in TX only. */[/color][color=#000000] [/color][color=#006666]9[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* RX preamble code. Used in RX only. */[/color][color=#000000] [/color][color=#006666]1[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* 0 to use standard SFD, 1 to use non-standard SFD. */[/color][color=#000000] DWT_BR_110K[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* Data rate. */[/color][color=#000000] DWT_PHRMODE_STD[/color][color=#666600],[/color][color=#000000] [/color][color=#880000]/* PHY header mode. */[/color][color=#000000] [/color][color=#666600]([/color][color=#006666]1025[/color][color=#000000] [/color][color=#666600]+[/color][color=#000000] [/color][color=#006666]64[/color][color=#000000] [/color][color=#666600]-[/color][color=#000000] [/color][color=#006666]32[/color][color=#666600])[/color][color=#000000] [/color][color=#880000]/* SFD timeout (preamble length + 1 + SFD length - PAC size). Used in RX only. */[/color][color=#000000] [/color][color=#666600]};[/color][color=#000000] [/color]