AR9130/AR9160 radar detection
Overview
The AR9130/AR9160 radar reports include much more information than the previous generation.
PHY error frame format
The PHY error length is now (at least) three bytes, with the following information (for a frame 'n' bytes in length):
- optional FFT payloads, if the pulse is long enough
- byte n-3: Pulse length in the primary channel
- byte n-2: Pulse length in the extension channel
- byte n-1: flags
Flags contains:
- 0x01: Pulse in primary channel
- 0x02: Pulse in extension channel
- 0x04: “Early extension event” found (TBD: more explanation)
The stronger of the RSSIs in the primary and extension channel should be used.
FFT information
An optional FFT report is available for frames which meet a certain set of parameters. This is primarily designed to assist in chirp detection, where a radar pulse moves in frequency over time. These pulses are normally detected as long pulses (45-90 uS).
Each FFT sample corresponds to a 3.2uS window (40MHz/80MHz clock) or 2.9uS window (44MHz/88MHz clock).
HT20:
| Byte | Bit field | Description |
| 0 | [3:0]: | bin -28 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin -27 {bitmap, quantized magnitude[2:0]} | |
| 1 | [3:0]: | bin -26 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin -25 {bitmap, quantized magnitude[2:0]} | |
| 2 - 25 | … | |
| 26 | [3:0]: | bin 24 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin 25 {bitmap, quantized magnitude[2:0]} | |
| 27 | [3:0]: | bin 26 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin 27 {bitmap, quantized magnitude[2:0]} | |
| 28 | [7:0]: | all bins {max_magnitude[1:0], bitmap_weight[5:0]} |
| 29 | [7:0]: | all bins max_magnitude[9:2] |
| 30 | [7:0]: | all bins {max_index[5:0], max_magnitude[11:10]} |
Dynamic HT40 mode (regardless of whether the received data frames are HT20 or HT40; this is the mode the PHY is in):
| Byte | Bitfield | Description |
| 0 | [3:0]: | bin -64 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin -63 {bitmap, quantized magnitude[2:0]} | |
| 1 | [3:0]: | bin -62 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin -61 {bitmap, quantized magnitude[2:0]} | |
| 2 - 61 | … | |
| 62 | [3:0]: | bin 60 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin 61 {bitmap, quantized magnitude[2:0]} | |
| 63 | [3:0]: | bin 62 {bitmap, quantized magnitude[2:0]} |
| [7:4]: | bin 63 {bitmap, quantized magnitude[2:0]} | |
| 64 | [7:0]: | lower bins {max_magnitude[1:0], bitmap_weight[5:0]} |
| 65 | [7:0]: | lower bins max_magnitude[9:2] |
| 66 | [7:0]: | lower bins {max_index[5:0], max_magnitude[11:10]} |
| 67 | [7:0]: | upper bins {max_magnitude[1:0], bitmap_weight[5:0]} |
| 68 | [7:0]: | upper bins max_magnitude[9:2] |
| 69 | [7:0]: | upper bins {max_index[5:0], max_magnitude[11:10]} |
The radar FFT analysis provides a variety of information:
- The max_magnitude is calculated, as the value of |I| + |Q|
- the FFT bin index of the max_magnitude field is populated in max_index
- for each bin, if the magitude is greater than a pre-programmed threshold (TODO: document this register field), the bit in the bitmap field is set;
- the quantized magnitude is then calculated for all bins, calculated as floor(bin power * 8 / max_magnitude)
Notes / Limitations
- The FFT report data may be truncated if the incoming signal level drops before an FFT is completed. Thus, don't trust that the FFT data will be complete.
- There are some known BB hangs with DFS on the AR9130/AR9160. The BB hang code in the ath_hal should detect it as a DFS BB hang and reset things. (TODO: check whether the chip needs to be “fixed” by going into another operational mode and bcak again, rather than just a straight reset.)
- There are some corruption issues, where the MAC mis-classifies the larger PHY error frames as data frames and re-aligns some portion of the payload. This only affects frames with FFT payloads and not the short PHY error frames (3 bytes.)