Skip to content

Commit f6d7d47

Browse files
committed
dswifi: Add WiFi registers I/O map table
1 parent b807e07 commit f6d7d47

File tree

2 files changed

+276
-0
lines changed

2 files changed

+276
-0
lines changed

content/SUMMARY.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
* [DS Sound](ds_sound.md)
1212
* [DS Peripherals](ds_peripherals.md)
1313
* [DS WiFi (Mitsumi)](ds_wifi.md)
14+
* [DS WiFi I/O Map](ds_wifi_io_map.md)
1415
* [DSi Introduction](dsi_introduction.md)
1516
* [DSi I/O Map](dsi_io_map.md)
1617
* [DSi Control Registers](dsi_control_regs.md)

content/ds_wifi_io_map.md

Lines changed: 275 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
# DS WiFi I/O Map
2+
3+
The following registers are only accessible from the ARM7. They are located at
4+
addresses 0x4808000 to 0x4808FFF. Addresses not included in the following list
5+
aren't used. Also, many of the registers that are used aren't understood.
6+
7+
Important note: 8-bit writes don't work on WiFi registers and RAM, they are
8+
ignored.
9+
10+
<a id="general_registers"></a>
11+
## General registers
12+
13+
| Address | Access | Name | Description |
14+
|---------|--------|-------------------|---------------------------------------|
15+
| 4808000 | R | `W_ID` | Chip ID
16+
| 4808004 | R/W | `W_MODE_RST` | Reset
17+
| 4808006 | R/W | `W_MODE_WEP` | WEP and software modes
18+
| 4808008 | R/W | `W_TXSTATCNT` | Beacon status request
19+
| 480800A | R/W | `W_X_00A` |
20+
| 4808010 | R/W | `W_IF` | WiFi interrupt request flags
21+
| 4808012 | R/W | `W_IE` | WiFi interrupt enable
22+
| 4808018 | R/W | `W_MACADDR_0` | Hardware MAC address
23+
| 480801A | R/W | `W_MACADDR_1` | Hardware MAC address
24+
| 480801C | R/W | `W_MACADDR_2` | Hardware MAC address
25+
| 4808020 | R/W | `W_BSSID_0` | BSSID
26+
| 4808022 | R/W | `W_BSSID_1` | BSSID
27+
| 4808024 | R/W | `W_BSSID_2` | BSSID
28+
| 4808028 | R/W | `W_AID_LOW` |
29+
| 480802A | R/W | `W_AID_FULL` |
30+
| 480802C | R/W | `W_TX_RETRYLIMIT` | TX retry limit
31+
| 480802E | R/W | `W_INTERNAL` |
32+
| 4808030 | R/W | `W_RXCNT` | RX control
33+
| 4808032 | R/W | `W_WEP_CNT` | WEP encryption enable
34+
| 4808034 | R? | `W_INTERNAL` |
35+
36+
<a id="power_registers"></a>
37+
## Power registers
38+
39+
| Address | Access | Name | Description |
40+
|---------|--------|----------------|------------------------------------------|
41+
| 4808036 | R/W | `W_POWER_US` |
42+
| 4808038 | R/W | `W_POWER_TX` |
43+
| 480803C | R/W | `W_POWERSTATE` |
44+
| 4808040 | R/W | `W_POWERFORCE` |
45+
| 4808044 | R | `W_RANDOM` |
46+
| 4808048 | R/W | `W_POWER_048` |
47+
48+
<a id="receive_control"></a>
49+
## Receive control
50+
51+
| Address | Access | Name | Description |
52+
|---------|--------|-------------------|---------------------------------------|
53+
| 4808050 | R/W | `W_RXBUF_BEGIN` |
54+
| 4808052 | R/W | `W_RXBUF_END` |
55+
| 4808054 | R | `W_RXBUF_WRCSR` |
56+
| 4808056 | R/W | `W_RXBUF_WR_ADDR` |
57+
| 4808058 | R/W | `W_RXBUF_RD_ADDR` |
58+
| 480805A | R/W | `W_RXBUF_READCSR` |
59+
| 480805C | R/W | `W_RXBUF_COUNT` |
60+
| 4808060 | R | `W_RXBUF_RD_DATA` |
61+
| 4808062 | R/W | `W_RXBUF_GAP` |
62+
| 4808064 | R/W | `W_RXBUF_GAPDISP` |
63+
64+
<a id="transmit_control"></a>
65+
## Transmit control
66+
67+
| Address | Access | Name | Description |
68+
|---------|--------|-------------------|---------------------------------------|
69+
| 4808068 | R/W | `W_TXBUF_WR_ADDR` |
70+
| 480806C | R/W | `W_TXBUF_COUNT` |
71+
| 4808070 | W | `W_TXBUF_WR_DATA` |
72+
| 4808074 | R/W | `W_TXBUF_GAP` |
73+
| 4808076 | R/W | `W_TXBUF_GAPDISP` |
74+
| 4808078 | W | `W_INTERNAL` |
75+
| 4808080 | R/W | `W_TXBUF_BEACON` | Beacon transmit location
76+
| 4808084 | R/W | `W_TXBUF_TIM` | Beacon TIM index in frame body
77+
| 4808088 | R/W | `W_LISTENCOUNT` | Listen count
78+
| 480808C | R/W | `W_BEACONINT` | Beacon interval
79+
| 480808E | R/W | `W_LISTENINT` | Listen interval
80+
| 4808090 | R/W | `W_TXBUF_CMD` | Multiplay command
81+
| 4808094 | R/W | `W_TXBUF_REPLY1` | Multiplay next reply
82+
| 4808098 | R | `W_TXBUF_REPLY2` | Multiplay current reply
83+
| 480809C | R/W | `W_INTERNAL` |
84+
| 48080A0 | R/W | `W_TXBUF_LOC1` |
85+
| 48080A4 | R/W | `W_TXBUF_LOC2` |
86+
| 48080A8 | R/W | `W_TXBUF_LOC3` |
87+
| 48080AC | W | `W_TXREQ_RESET` |
88+
| 48080AE | W | `W_TXREQ_SET` |
89+
| 48080B0 | R | `W_TXREQ_READ` |
90+
| 48080B4 | W | `W_TXBUF_RESET` |
91+
| 48080B6 | R | `W_TXBUSY` |
92+
| 48080B8 | R | `W_TXSTAT` |
93+
| 48080BA | ? | `W_INTERNAL` |
94+
| 48080BC | R/W | `W_PREAMBLE` |
95+
| 48080C0 | R/W | `W_CMD_TOTALTIME` |
96+
| 48080C4 | R/W | `W_CMD_REPLYTIME` |
97+
| 48080C8 | ? | `W_INTERNAL` |
98+
| 48080D0 | R/W | `W_RXFILTER` |
99+
| 48080D4 | R/W | `W_CONFIG_0D4` |
100+
| 48080D8 | R/W | `W_CONFIG_0D8` |
101+
| 48080DA | R/W | `W_RX_LEN_CROP` |
102+
| 48080E0 | R/W | `W_RXFILTER2` |
103+
104+
<a id="wifi_timers"></a>
105+
## WiFi timers
106+
107+
| Address | Access | Name | Description |
108+
|---------|--------|-------------------|---------------------------------------|
109+
| 48080E8 | R/W | `W_US_COUNTCNT` | Microsecond counter enable
110+
| 48080EA | R/W | `W_US_COMPARECNT` | Microsecond compare enable
111+
| 48080EC | R/W | `W_CONFIG_0EC` |
112+
| 48080EE | R/W | `W_CMD_COUNTCNT` |
113+
| 48080F0 | R/W | `W_US_COMPARE0` | Microsecond compare value
114+
| 48080F2 | R/W | `W_US_COMPARE1` | Microsecond compare value
115+
| 48080F4 | R/W | `W_US_COMPARE2` | Microsecond compare value
116+
| 48080F6 | R/W | `W_US_COMPARE3` | Microsecond compare value
117+
| 48080F8 | R/W | `W_US_COUNT0` | Microsecond counter
118+
| 48080FA | R/W | `W_US_COUNT1` | Microsecond counter
119+
| 48080FC | R/W | `W_US_COUNT2` | Microsecond counter
120+
| 48080FE | R/W | `W_US_COUNT3` | Microsecond counter
121+
| 4808100 | ? | `W_INTERNAL` |
122+
| 4808102 | ? | `W_INTERNAL` |
123+
| 4808104 | ? | `W_INTERNAL` |
124+
| 4808106 | ? | `W_INTERNAL` |
125+
| 480810C | R/W | `W_CONTENTFREE` |
126+
| 4808110 | R/W | `W_PRE_BEACON` |
127+
| 4808118 | R/W | `W_CMD_COUNT` |
128+
| 480811C | R/W | `W_BEACON_COUNT` |
129+
130+
<a id="configuration_ports"></a>
131+
## Configuration ports
132+
133+
| Address | Access | Name | Description |
134+
|---------|--------|-----------------|-----------------------------------------|
135+
| 4808120 | R/W | `W_CONFIG_120` |
136+
| 4808122 | R/W | `W_CONFIG_122` |
137+
| 4808124 | R/W | `W_CONFIG_124` |
138+
| 4808126 | ? | `W_INTERNAL` |
139+
| 4808128 | R/W | `W_CONFIG_128` |
140+
| 480812A | ? | `W_INTERNAL` |
141+
| 4808130 | R/W | `W_CONFIG_130` |
142+
| 4808132 | R/W | `W_CONFIG_132` |
143+
| 4808134 | R/W | `W_POST_BEACON` |
144+
| 4808140 | R/W | `W_CONFIG_140` |
145+
| 4808142 | R/W | `W_CONFIG_142` |
146+
| 4808144 | R/W | `W_CONFIG_144` |
147+
| 4808146 | R/W | `W_CONFIG_146` |
148+
| 4808148 | R/W | `W_CONFIG_148` |
149+
| 480814A | R/W | `W_CONFIG_14A` |
150+
| 480814C | R/W | `W_CONFIG_14C` |
151+
| 4808150 | R/W | `W_CONFIG_150` |
152+
| 4808154 | R/W | `W_CONFIG_154` |
153+
154+
<a id="baseband_chip"></a>
155+
## Baseband chip
156+
157+
| Address | Access | Name | Description |
158+
|---------|--------|-----------------|-----------------------------------------|
159+
| 4808158 | W | `W_BB_CNT` | BB access control
160+
| 480815A | W | `W_BB_WRITE` | Byte to write to BB
161+
| 480815C | R | `W_BB_READ` | Byte read from BB
162+
| 480815E | R | `W_BB_BUSY` | BB access busy Flag
163+
| 4808160 | R/W | `W_BB_MODE` | BB access mode
164+
| 4808168 | R/W | `W_BB_POWER` | BB access powerdown
165+
166+
<a id="internal_registers"></a>
167+
## Internal registers
168+
169+
| Address | Access | Name | Description |
170+
|---------|--------|-----------------|-----------------------------------------|
171+
| 480816A | ? | `W_INTERNAL` |
172+
| 4808170 | ? | `W_INTERNAL` |
173+
| 4808172 | ? | `W_INTERNAL` |
174+
| 4808174 | ? | `W_INTERNAL` |
175+
| 4808176 | ? | `W_INTERNAL` |
176+
| 4808178 | W | `W_INTERNAL` |
177+
178+
<a id="rf_chip"></a>
179+
## RF chip
180+
181+
| Address | Access | Name | Description |
182+
|---------|--------|-----------------|-----------------------------------------|
183+
| 480817C | R/W | `W_RF_DATA2` |
184+
| 480817E | R/W | `W_RF_DATA1` |
185+
| 4808180 | R | `W_RF_BUSY` |
186+
| 4808184 | R/W | `W_RF_CNT` |
187+
| 4808190 | R/W | `W_INTERNAL` |
188+
| 4808194 | R/W | `W_TX_HDR_CNT` |
189+
| 4808198 | R/W | `W_INTERNAL` |
190+
| 480819C | R | `W_RF_PINS` |
191+
| 48081A0 | R/W | `W_X_1A0` |
192+
| 48081A2 | R/W | `W_X_1A2` |
193+
| 48081A4 | R/W | `W_X_1A4` |
194+
195+
<a id="wifi_statistics"></a>
196+
## WiFi statistics
197+
198+
| Address | Access | Name | Description |
199+
|---------|--------|-------------------|---------------------------------------|
200+
| 48081A8 | R | `W_RXSTAT_INC_IF` | Stats increment flags
201+
| 48081AA | R/W | `W_RXSTAT_INC_IE` | Stats increment IRQ enable
202+
| 48081AC | R | `W_RXSTAT_OVF_IF` | Stats half-overflow flags
203+
| 48081AE | R/W | `W_RXSTAT_OVF_IE` | Stats half-overflow IRQ enable
204+
| 48081B0 | R/W | `W_RXSTAT` |
205+
| 48081B2 | R/W | `W_RXSTAT` |
206+
| 48081B4 | R/W | `W_RXSTAT` |
207+
| 48081B6 | R/W | `W_RXSTAT` |
208+
| 48081B8 | R/W | `W_RXSTAT` |
209+
| 48081BA | R/W | `W_RXSTAT` |
210+
| 48081BC | R/W | `W_RXSTAT` |
211+
| 48081BE | R/W | `W_RXSTAT` |
212+
| 48081C0 | R/W | `W_TX_ERR_COUNT` | TX error count
213+
| 48081C4 | R | `W_RX_COUNT` |
214+
| 48081D0 | R/W | `W_CMD_STAT` |
215+
| 48081D2 | R/W | `W_CMD_STAT` |
216+
| 48081D4 | R/W | `W_CMD_STAT` |
217+
| 48081D6 | R/W | `W_CMD_STAT` |
218+
| 48081D8 | R/W | `W_CMD_STAT` |
219+
| 48081DA | R/W | `W_CMD_STAT` |
220+
| 48081DC | R/W | `W_CMD_STAT` |
221+
| 48081DE | R/W | `W_CMD_STAT` |
222+
223+
<a id="internal_diagnostics"></a>
224+
## Internal diagnostics
225+
226+
| Address | Access | Name | Description |
227+
|---------|--------|-----------------|-----------------------------------------|
228+
| 48081F0 | R/W | `W_INTERNAL` |
229+
| 4808204 | ? | `W_INTERNAL` |
230+
| 4808208 | ? | `W_INTERNAL` |
231+
| 480820C | W | `W_INTERNAL` |
232+
| 4808210 | R | `W_TX_SEQNO` |
233+
| 4808214 | R | `W_RF_STATUS` |
234+
| 480821C | W | `W_IF_SET` | Set bits in `W_IF` to force interrupts.
235+
| 4808220 | R/W | `W_RAM_DISABLE` | WiFi RAM control
236+
| 4808224 | R/W | `W_INTERNAL` |
237+
| 4808228 | W | `W_X_228` |
238+
| 4808230 | R/W | `W_INTERNAL` |
239+
| 4808234 | R/W | `W_INTERNAL` |
240+
| 4808238 | R/W | `W_INTERNAL` |
241+
| 480823C | ? | `W_INTERNAL` |
242+
| 4808244 | R/W | `W_X_244` |
243+
| 4808248 | R/W | `W_INTERNAL` |
244+
| 480824C | R | `W_INTERNAL` |
245+
| 480824E | R | `W_INTERNAL` |
246+
| 4808250 | R | `W_INTERNAL` |
247+
| 4808254 | ? | `W_CONFIG_254` |
248+
| 4808258 | ? | `W_INTERNAL` |
249+
| 480825C | ? | `W_INTERNAL` |
250+
| 4808260 | ? | `W_INTERNAL` |
251+
| 4808264 | R | `W_INTERNAL` |
252+
| 4808268 | R | `W_RXTX_ADDR` |
253+
| 4808270 | R | `W_INTERNAL` |
254+
| 4808274 | ? | `W_INTERNAL` |
255+
| 4808278 | R/W | `W_INTERNAL` |
256+
| 480827C | ? | `W_INTERNAL` |
257+
| 4808290 | (R/W) | `W_X_290` |
258+
| 4808298 | W | `W_INTERNAL` |
259+
| 48082A0 | R/W | `W_INTERNAL` |
260+
| 48082A2 | R | `W_INTERNAL` |
261+
| 48082A4 | R | `W_INTERNAL` |
262+
| 48082A8 | W | `W_INTERNAL` |
263+
| 48082AC | ? | `W_INTERNAL` |
264+
| 48082B0 | W | `W_INTERNAL` |
265+
| 48082B4 | R/W | `W_INTERNAL` |
266+
| 48082B8 | ? | `W_INTERNAL` |
267+
| 48082C0 | R/W | `W_INTERNAL` |
268+
| 48082C4 | R | `W_INTERNAL` |
269+
| 48082C8 | R | `W_INTERNAL` |
270+
| 48082CC | R | `W_INTERNAL` |
271+
| 48082D0 | ? | `W_INTERNAL` |
272+
| 48082F0 | R/W | `W_INTERNAL` |
273+
| 48082F2 | R/W | `W_INTERNAL` |
274+
| 48082F4 | R/W | `W_INTERNAL` |
275+
| 48082F6 | R/W | `W_INTERNAL` |

0 commit comments

Comments
 (0)