Contents
Overview
When sending data, a Transmit (TX) Header is prepended to data to be transmitted.
Data |
TX Header |
PLCP Header |
PDU |
Size |
0x64 |
0x06 |
Variable |
Transmit Header Layout
for ucode rev 351
Offset |
Size |
Function |
0x0000 |
2 |
|
0x0002 |
2 |
|
0x0004 |
2 |
MAC Frame Control (copy of frame control field) |
0x0006 |
2 |
TX FES Time Normal (set to 0) |
0x0008 |
2 |
|
0x000A |
2 |
PHY TX Control Word 1 (see below) |
0x000C |
2 |
PHY TX Control Word 1 (for fallback rate) |
0x000E |
2 |
PHY TX Control Word 1 RTS |
0x0010 |
2 |
PHY TX Control Word 1 RTS (for fallback rate) |
0x0012 |
2 |
PHY Rates [Main Rates] |
0x0014 |
2 |
|
0x0016 |
16 |
|
0x0026 |
6 |
TX Frame Receiver Address |
0x002C |
2 |
TX FES Time Fallback (set to 0) |
0x002E |
6 |
RTS PLCP Fallback |
0x0034 |
2 |
RTS Duration Fallback |
0x0036 |
6 |
PLCP Fallback |
0x003C |
2 |
Duration Fallback |
0x003E |
2 |
mixed-mode L-SIG spoof length |
0x0040 |
2 |
fallback mixed-mode L-SIG spoof length |
0x0042 |
2 |
Timeout Low |
0x0044 |
2 |
TImeout High |
0x0046 |
2 |
Unused |
0x0048 |
2 |
TX Frame ID (frame cookie, 0xffff should not be used due to multicast/broadcast buffering) |
0x004A |
2 |
TX Status (set to 0) |
0x004C |
6 |
RTS PLCP Header |
0x0052 |
16 |
RTS Frame |
0x0062 |
2 |
Unused |
for ucode rev 410 and later
Offset |
Size |
Function |
0x0000 |
2 |
|
0x0002 |
2 |
|
0x0004 |
2 |
MAC Frame Control (copy of frame control field) |
0x0006 |
2 |
TX FES Time Normal (set to 0) |
0x0008 |
2 |
|
0x000A |
2 |
PHY TX Control Word 1 (see below) |
0x000C |
2 |
PHY TX Control Word 1 FB (for fallback rate) |
0x000E |
2 |
PHY TX Control Word 1 RTS |
0x0010 |
2 |
PHY TX Control Word 1 RTS FB (for fallback rate) |
0x0012 |
2 |
PHY Rates [Main Rates] |
0x0014 |
2 |
|
0x0016 |
16 |
|
0x0026 |
6 |
TX Frame Receiver Address |
0x002C |
2 |
TX FES Time Fallback (set to 0) |
0x002E |
6 |
RTS PLCP Fallback |
0x0034 |
2 |
RTS Duration Fallback |
0x0036 |
6 |
PLCP Fallback |
0x003C |
2 |
Duration Fallback |
0x003E |
2 |
MIMO mode length |
0x0040 |
2 |
MIMO fallback rate length |
0x0042 |
2 |
Timeout Low |
0x0044 |
2 |
Timeout High |
0x0046 |
2 |
MIMO antenna select |
0x0048 |
2 |
preload size |
0x004a |
2 |
Unused |
0x004c |
2 |
TX Frame ID (frame cookie, 0xffff should not be used due to multicast/broadcast buffering) |
0x004e |
2 |
TX Status (set to 0) |
0x0050 |
6 |
RTS PLCP Header |
0x0056 |
16 |
RTS Frame |
0x0066 |
2 |
Unused |
Transmit Header Fields
MAC TX Control Low
Mask |
Function |
0x8000 |
AMIC |
0x4000 |
use RIFS |
0x2000 |
lifetime |
0x1000 |
Frameburst |
0x0800 |
Send CTS-to-self (ignored for CCK rates, e.g. done first when using an OFDM rate but not done for fallback if fallback rate is CCK) |
0x0600 |
AMPDU status, supported values are: 0: regular MPDU, not an AMPDU, 1: first MPDU of AMPDU, 2: intermediate MPDU of AMPDU, 3: last (or only) MPDU of AMPDU |
0x0100 |
use 40 MHz Bandwidth |
0x0080 |
5GHz Band |
0x0040 |
Disable FCS calculation/appending |
0x0020 |
Ignore PMQ |
0x0010 |
Use Hardware Sequence Number |
0x0008 |
Start MSDU |
0x0004 |
Send RTS |
0x0002 |
Long Frame |
0x0001 |
Immediate ACK |
MAC TX Control High
Mask |
Function |
0x1000 |
use fallback rate for this AMPDU |
0x0FF0 |
Security Key Index |
0x0007 |
Security Algorithm |
Extra Frame Types
Mask |
Function |
0x0003 |
data frame fallback encoding |
0x000c |
RTS/CTS encoding |
0x0030 |
RTS/CTS fallback rate type |
0xFF00 |
Channel radio code. This value is ORed with 0x100 if the 5GHz Band bit is set in MAC TX Control Low and ORed with 0x200 if the 40 MHz bandwidth bit is set, and then compared to SHM 0x00A0. On mismatch, the frame is suppressed for channel mismatch. |
number |
encoding |
0 |
CCK |
1 |
OFDM |
2 |
EWC (mimo) |
3 |
N (? unused) |
PHY TX Control Word
Mask |
Function |
0x0003 |
frame encoding (see above table) |
0x0010 |
use short preamble |
0x03C0 |
antenna selection |
0xFC00 |
TX Power |
Antenna selection values are:
Value |
Meaning |
0 |
antenna 0 (LP PHY: last antenna) |
1 |
antenna 1 |
3 |
antenna 0/1 auto (older microcode: last good) |
4 |
antenna 2 |
8 |
antenna 3 |
PHY TX Control Word 1 (same layout for FB, RTS, and RTS FB)
N, LP, and SSLPN PHYs, bandwidth fixed to 20 (2) for LP: See PHY TX Control1 for setup
Mask |
Function |
0x0007 |
bandwidth (0: 10 MHz, 1: 10 MHz upper, 2: 20 MHz, 3: 20 MHz upper, 4: 40 MHz, 5: 40 MHz duplicate) |
0x0038 |
mode (0: SISO, 1: CDD, 2: STBC, 3: SDM) |
0x00c0 |
? |
0x0700 |
coding rate (0: 1/2, 1: 2/3, 2: 3/4, 3: 4/5, 4: 5/6, 6: 7/8) |
0x3800 |
modulation scheme (0: bpsk, 1: qpsk, 2: qam16, 3: qam64, 4: qam256) |
0x4000 |
ADC coding |
0x8000 |
short GI |
PHY Rates
Mask |
Value |
0x00FF |
PHY rate |
0xFF00 |
PHY rate for CTS/RTS |
IV/crypto field
For WEP this contains the IV to use. For TKIP, this must contain the phase 1 key followed by the first four bytes of the TKIP extended IV.
Queue Selection
If QoS is enabled, use FIFOs 0-3 for the different access categories, otherwise always use FIFO 1 for data frames.
In an AP, use FIFO 4 for multicast frames, set the more data bit in the frame and with each frame update the SHM last broadcast/multicast frame ID value. This will cause the Microcode to send out all frames on this FIFO after the DTIM beacon, the frame ID value is used to clear the more data bit in the frame header.
Microcode Involvement
The microcode controls the TXE (TX engine) which allows it to read data from FIFOs and push it to the outgoing data path etc. For some more information see txpath.pdf. Note that this is incomplete, the FIFO control is not included etc.