DW3000 SPI collision errors

I am using the DWM3001C and am occasionally getting SPI error callbacks from the driver with status_hi set to 0x0800 indicating an SPI collision. When I query the SPI collision register I get 0x04 (CIA RAM conflict). This is occurring while using double buffers I think while reading diagnostics with dwt_readdiagnostics.

These logs have the headers of SPI operations leading up to the error.

############## /dev/cu.usbmodem0007601470141: [00:00:10.012,725] <inf> dw3000: RX OK event
/dev/cu.usbmodem0007601470141: [00:00:10.012,756] <inf> dw3000: wr: header
/dev/cu.usbmodem0007601470141: 85                                               |.                
/dev/cu.usbmodem0007601470141: [00:00:10.012,817] <inf> dw3000: rd: header
/dev/cu.usbmodem0007601470141: 26                                               |&                
/dev/cu.usbmodem0007601470141: [00:00:10.012,908] <inf> dw3000: rd: header
/dev/cu.usbmodem0007601470141: 3c                                               |<                
############## /dev/cu.usbmodem0007601470141: [00:00:10.013,092] <wrn> dw3000: IRQ callback work already busy
############## /dev/cu.usbmodem0007601470141: [00:00:10.013,427] <inf> dw3000: RX done
/dev/cu.usbmodem0007601470141: [00:00:10.013,458] <inf> dw3000: wr: header
/dev/cu.usbmodem0007601470141: a7                                               |.                
/dev/cu.usbmodem0007601470141: [00:00:10.013,519] <inf> dw3000: rd: header
/dev/cu.usbmodem0007601470141: 3e                                               |>                
/dev/cu.usbmodem0007601470141: [00:00:10.013,580] <inf> dw3000: rd: header
/dev/cu.usbmodem0007601470141: 41 10                                            |A.               
/dev/cu.usbmodem0007601470141: [00:00:10.013,641] <inf> dw3000: rd: header
/dev/cu.usbmodem0007601470141: 41 20                                            |A                
/dev/cu.usbmodem0007601470141: [00:00:10.013,671] <inf> dw3000: wr: header
/dev/cu.usbmodem0007601470141: c1 10                                            |..               
/dev/cu.usbmodem0007601470141: [00:00:10.013,732] <inf> dw3000: wr: header
/dev/cu.usbmodem0007601470141: c1 20                                            |.                
/dev/cu.usbmodem0007601470141: [00:00:10.013,793] <inf> dw3000: rd: header
/dev/cu.usbmodem0007601470141: 42 80                                            |B.               
/dev/cu.usbmodem0007601470141: [00:00:10.013,824] <err> dw3000: SPI error callback sys_hi: 0x0800, collission: 0x04

dw3000: IRQ callback work already busy This line is when the IRQ gpio went high work was then scheduled to handle that after finishing the current interrupt handler. So I think this is when the SPI collision occurred.

What are likely causes of SPI conflicting with CIA when accessing RAM and how can I avoid this happening?

Hi Kyle,

This issue does not ring a bell, how fast did you configure the SPI ?

I can see you’re on a linux host, and qorvo does not provide a linux driver for the DW3000, so it’s difficult for us to comment here.

SPI is at 8M.

As for linux I’m not using linux. The terminal logs are reading a UART adapter connected to the board I am working on. We are using the qorvo provided binary drivers hence why I mentioned the call to dwt_readdiagnostics.