Blame view

RIOT/drivers/at86rf2xx/include/at86rf2xx_registers.h 15.7 KB
a752c7ab   elopes   add first test an...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
  /*
   * Copyright (C) 2013 Alaeddine Weslati <alaeddine.weslati@inria.fr>
   * Copyright (C) 2015 Freie Universität Berlin
   *
   * This file is subject to the terms and conditions of the GNU Lesser
   * General Public License v2.1. See the file LICENSE in the top level
   * directory for more details.
   */
  
  /**
   * @ingroup     drivers_at86rf2xx
   * @{
   *
   * @file
   * @brief       Register and command definitions for AT86RF2xx devices
   *
   * @author      Alaeddine Weslati <alaeddine.weslati@inria.fr>
   * @author      Thomas Eichinger <thomas.eichinger@fu-berlin.de>
   * @author      Hauke Petersen <hauke.petersen@fu-berlin.de>
   * @author      Kaspar Schleiser <kaspar@schleiser.de>
   * @author      Kévin Roussel <Kevin.Roussel@inria.fr>
   */
  
  #ifndef AT86RF2XX_REGISTERS_H
  #define AT86RF2XX_REGISTERS_H
  
  #include "at86rf2xx.h"
  
  #ifdef __cplusplus
  extern "C" {
  #endif
  
  /**
   * @name    Constant part numbers of the AT86RF2xx device family
   * @{
   */
  #define AT86RF212B_PARTNUM       (0x07)
  #define AT86RF231_PARTNUM        (0x03)
  #define AT86RF232_PARTNUM        (0x0a)
  #define AT86RF233_PARTNUM        (0x0b)
  /** @} */
  
  /**
   * @name    Assign the part number for the device we are building the driver for
   * @{
   */
  #ifdef MODULE_AT86RF212B
  #define AT86RF2XX_PARTNUM           AT86RF212B_PARTNUM
  #elif MODULE_AT86RF232
  #define AT86RF2XX_PARTNUM           AT86RF232_PARTNUM
  #elif MODULE_AT86RF233
  #define AT86RF2XX_PARTNUM           AT86RF233_PARTNUM
  #else /* MODULE_AT86RF231 as default device */
  #define AT86RF2XX_PARTNUM           AT86RF231_PARTNUM
  #endif
  /** @} */
  
  /**
   * @name    SPI access specifiers
   * @{
   */
  #define AT86RF2XX_ACCESS_REG                                    (0x80)
  #define AT86RF2XX_ACCESS_FB                                     (0x20)
  #define AT86RF2XX_ACCESS_SRAM                                   (0x00)
  #define AT86RF2XX_ACCESS_READ                                   (0x00)
  #define AT86RF2XX_ACCESS_WRITE                                  (0x40)
  /** @} */
  
  /**
   * @name    Register addresses
   * @{
   */
  #define AT86RF2XX_REG__TRX_STATUS                               (0x01)
  #define AT86RF2XX_REG__TRX_STATE                                (0x02)
  #define AT86RF2XX_REG__TRX_CTRL_0                               (0x03)
  #define AT86RF2XX_REG__TRX_CTRL_1                               (0x04)
  #define AT86RF2XX_REG__PHY_TX_PWR                               (0x05)
  #define AT86RF2XX_REG__PHY_RSSI                                 (0x06)
  #define AT86RF2XX_REG__PHY_ED_LEVEL                             (0x07)
  #define AT86RF2XX_REG__PHY_CC_CCA                               (0x08)
  #define AT86RF2XX_REG__CCA_THRES                                (0x09)
  #define AT86RF2XX_REG__RX_CTRL                                  (0x0A)
  #define AT86RF2XX_REG__SFD_VALUE                                (0x0B)
  #define AT86RF2XX_REG__TRX_CTRL_2                               (0x0C)
  #define AT86RF2XX_REG__ANT_DIV                                  (0x0D)
  #define AT86RF2XX_REG__IRQ_MASK                                 (0x0E)
  #define AT86RF2XX_REG__IRQ_STATUS                               (0x0F)
  #define AT86RF2XX_REG__VREG_CTRL                                (0x10)
  #define AT86RF2XX_REG__BATMON                                   (0x11)
  #define AT86RF2XX_REG__XOSC_CTRL                                (0x12)
  #define AT86RF2XX_REG__CC_CTRL_1                                (0x14)
  #define AT86RF2XX_REG__RX_SYN                                   (0x15)
  #ifdef MODULE_AT86RF212B
  #define AT86RF2XX_REG__RF_CTRL_0                                (0x16)
  #endif
  #define AT86RF2XX_REG__XAH_CTRL_1                               (0x17)
  #define AT86RF2XX_REG__FTN_CTRL                                 (0x18)
  #if AT86RF2XX_HAVE_RETRIES
  #define AT86RF2XX_REG__XAH_CTRL_2                               (0x19)
  #endif
  #define AT86RF2XX_REG__PLL_CF                                   (0x1A)
  #define AT86RF2XX_REG__PLL_DCU                                  (0x1B)
  #define AT86RF2XX_REG__PART_NUM                                 (0x1C)
  #define AT86RF2XX_REG__VERSION_NUM                              (0x1D)
  #define AT86RF2XX_REG__MAN_ID_0                                 (0x1E)
  #define AT86RF2XX_REG__MAN_ID_1                                 (0x1F)
  #define AT86RF2XX_REG__SHORT_ADDR_0                             (0x20)
  #define AT86RF2XX_REG__SHORT_ADDR_1                             (0x21)
  #define AT86RF2XX_REG__PAN_ID_0                                 (0x22)
  #define AT86RF2XX_REG__PAN_ID_1                                 (0x23)
  #define AT86RF2XX_REG__IEEE_ADDR_0                              (0x24)
  #define AT86RF2XX_REG__IEEE_ADDR_1                              (0x25)
  #define AT86RF2XX_REG__IEEE_ADDR_2                              (0x26)
  #define AT86RF2XX_REG__IEEE_ADDR_3                              (0x27)
  #define AT86RF2XX_REG__IEEE_ADDR_4                              (0x28)
  #define AT86RF2XX_REG__IEEE_ADDR_5                              (0x29)
  #define AT86RF2XX_REG__IEEE_ADDR_6                              (0x2A)
  #define AT86RF2XX_REG__IEEE_ADDR_7                              (0x2B)
  #define AT86RF2XX_REG__XAH_CTRL_0                               (0x2C)
  #define AT86RF2XX_REG__CSMA_SEED_0                              (0x2D)
  #define AT86RF2XX_REG__CSMA_SEED_1                              (0x2E)
  #define AT86RF2XX_REG__CSMA_BE                                  (0x2F)
  #define AT86RF2XX_REG__TST_CTRL_DIGI                            (0x36)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the TRX_CTRL_0 register
   * @{
   */
  #define AT86RF2XX_TRX_CTRL_0_MASK__PAD_IO                       (0xC0)
  #define AT86RF2XX_TRX_CTRL_0_MASK__PAD_IO_CLKM                  (0x30)
  #define AT86RF2XX_TRX_CTRL_0_MASK__CLKM_SHA_SEL                 (0x08)
  #define AT86RF2XX_TRX_CTRL_0_MASK__CLKM_CTRL                    (0x07)
  
  #define AT86RF2XX_TRX_CTRL_0_DEFAULT__PAD_IO                    (0x00)
  #define AT86RF2XX_TRX_CTRL_0_DEFAULT__PAD_IO_CLKM               (0x10)
  #define AT86RF2XX_TRX_CTRL_0_DEFAULT__CLKM_SHA_SEL              (0x08)
  #define AT86RF2XX_TRX_CTRL_0_DEFAULT__CLKM_CTRL                 (0x01)
  
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__OFF                     (0x00)
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__1MHz                    (0x01)
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__2MHz                    (0x02)
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__4MHz                    (0x03)
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__8MHz                    (0x04)
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__16MHz                   (0x05)
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__250kHz                  (0x06)
  #define AT86RF2XX_TRX_CTRL_0_CLKM_CTRL__62_5kHz                 (0x07)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the TRX_CTRL_1 register
   * @{
   */
  #define AT86RF2XX_TRX_CTRL_1_MASK__PA_EXT_EN                    (0x80)
  #define AT86RF2XX_TRX_CTRL_1_MASK__IRQ_2_EXT_EN                 (0x40)
  #define AT86RF2XX_TRX_CTRL_1_MASK__TX_AUTO_CRC_ON               (0x20)
  #define AT86RF2XX_TRX_CTRL_1_MASK__RX_BL_CTRL                   (0x10)
  #define AT86RF2XX_TRX_CTRL_1_MASK__SPI_CMD_MODE                 (0x0C)
  #define AT86RF2XX_TRX_CTRL_1_MASK__IRQ_MASK_MODE                (0x02)
  #define AT86RF2XX_TRX_CTRL_1_MASK__IRQ_POLARITY                 (0x01)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the TRX_CTRL_2 register
   * @{
   */
  #define AT86RF2XX_TRX_CTRL_2_MASK__RX_SAFE_MODE                 (0x80)
  #define AT86RF2XX_TRX_CTRL_2_MASK__FREQ_MODE                    (0x3F)
  #define AT86RF2XX_TRX_CTRL_2_MASK__TRX_OFF_AVDD_EN              (0x40)
  #define AT86RF2XX_TRX_CTRL_2_MASK__OQPSK_SCRAM_EN               (0x20)
  #define AT86RF2XX_TRX_CTRL_2_MASK__ALT_SPECTRUM                 (0x10)
  #define AT86RF2XX_TRX_CTRL_2_MASK__BPSK_OQPSK                   (0x08)
  #define AT86RF2XX_TRX_CTRL_2_MASK__SUB_MODE                     (0x04)
  #define AT86RF2XX_TRX_CTRL_2_MASK__OQPSK_DATA_RATE              (0x03)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the IRQ_STATUS register
   * @{
   */
  #define AT86RF2XX_IRQ_STATUS_MASK__BAT_LOW                      (0x80)
  #define AT86RF2XX_IRQ_STATUS_MASK__TRX_UR                       (0x40)
  #define AT86RF2XX_IRQ_STATUS_MASK__AMI                          (0x20)
  #define AT86RF2XX_IRQ_STATUS_MASK__CCA_ED_DONE                  (0x10)
  #define AT86RF2XX_IRQ_STATUS_MASK__TRX_END                      (0x08)
  #define AT86RF2XX_IRQ_STATUS_MASK__RX_START                     (0x04)
  #define AT86RF2XX_IRQ_STATUS_MASK__PLL_UNLOCK                   (0x02)
  #define AT86RF2XX_IRQ_STATUS_MASK__PLL_LOCK                     (0x01)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the TRX_STATUS register
   * @{
   */
  #define AT86RF2XX_TRX_STATUS_MASK__CCA_DONE                     (0x80)
  #define AT86RF2XX_TRX_STATUS_MASK__CCA_STATUS                   (0x40)
  #define AT86RF2XX_TRX_STATUS_MASK__TRX_STATUS                   (0x1F)
  
  #define AT86RF2XX_TRX_STATUS__P_ON                              (0x00)
  #define AT86RF2XX_TRX_STATUS__BUSY_RX                           (0x01)
  #define AT86RF2XX_TRX_STATUS__BUSY_TX                           (0x02)
  #define AT86RF2XX_TRX_STATUS__RX_ON                             (0x06)
  #define AT86RF2XX_TRX_STATUS__TRX_OFF                           (0x08)
  #define AT86RF2XX_TRX_STATUS__PLL_ON                            (0x09)
  #define AT86RF2XX_TRX_STATUS__SLEEP                             (0x0F)
  #define AT86RF2XX_TRX_STATUS__BUSY_RX_AACK                      (0x11)
  #define AT86RF2XX_TRX_STATUS__BUSY_TX_ARET                      (0x12)
  #define AT86RF2XX_TRX_STATUS__RX_AACK_ON                        (0x16)
  #define AT86RF2XX_TRX_STATUS__TX_ARET_ON                        (0x19)
  #define AT86RF2XX_TRX_STATUS__RX_ON_NOCLK                       (0x1C)
  #define AT86RF2XX_TRX_STATUS__RX_AACK_ON_NOCLK                  (0x1D)
  #define AT86RF2XX_TRX_STATUS__BUSY_RX_AACK_NOCLK                (0x1E)
  #define AT86RF2XX_TRX_STATUS__STATE_TRANSITION_IN_PROGRESS      (0x1F)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the TRX_STATE register
   * @{
   */
  #define AT86RF2XX_TRX_STATE_MASK__TRAC                          (0xe0)
  
  #define AT86RF2XX_TRX_STATE__NOP                                (0x00)
  #define AT86RF2XX_TRX_STATE__TX_START                           (0x02)
  #define AT86RF2XX_TRX_STATE__FORCE_TRX_OFF                      (0x03)
  #define AT86RF2XX_TRX_STATE__FORCE_PLL_ON                       (0x04)
  #define AT86RF2XX_TRX_STATE__RX_ON                              (0x06)
  #define AT86RF2XX_TRX_STATE__TRX_OFF                            (0x08)
  #define AT86RF2XX_TRX_STATE__PLL_ON                             (0x09)
  #define AT86RF2XX_TRX_STATE__RX_AACK_ON                         (0x16)
  #define AT86RF2XX_TRX_STATE__TX_ARET_ON                         (0x19)
  #define AT86RF2XX_TRX_STATE__TRAC_SUCCESS                       (0x00)
  #define AT86RF2XX_TRX_STATE__TRAC_SUCCESS_DATA_PENDING          (0x20)
  #define AT86RF2XX_TRX_STATE__TRAC_SUCCESS_WAIT_FOR_ACK          (0x40)
  #define AT86RF2XX_TRX_STATE__TRAC_CHANNEL_ACCESS_FAILURE        (0x60)
  #define AT86RF2XX_TRX_STATE__TRAC_NO_ACK                        (0xa0)
  #define AT86RF2XX_TRX_STATE__TRAC_INVALID                       (0xe0)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the PHY_CCA register
   * @{
   */
  #define AT86RF2XX_PHY_CC_CCA_MASK__CCA_REQUEST                  (0x80)
  #define AT86RF2XX_PHY_CC_CCA_MASK__CCA_MODE                     (0x60)
  #define AT86RF2XX_PHY_CC_CCA_MASK__CHANNEL                      (0x1F)
  
  #define AT86RF2XX_PHY_CC_CCA_DEFAULT__CCA_MODE                  (0x20)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the CCA_THRES register
   * @{
   */
  #define AT86RF2XX_CCA_THRES_MASK__CCA_ED_THRES                  (0x0F)
  
  #define AT86RF2XX_CCA_THRES_MASK__RSVD_HI_NIBBLE                (0xC0)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the PHY_TX_PWR register
   * @{
   */
  #ifdef MODULE_AT86RF212B
  #define AT86RF2XX_PHY_TX_PWR_MASK__PA_BOOST                     (0x80)
  #define AT86RF2XX_PHY_TX_PWR_MASK__GC_PA                        (0x60)
  #define AT86RF2XX_PHY_TX_PWR_MASK__TX_PWR                       (0x1F)
  #elif  MODULE_AT86RF231
  #define AT86RF2XX_PHY_TX_PWR_MASK__PA_BUF_LT                    (0xC0)
  #define AT86RF2XX_PHY_TX_PWR_MASK__PA_LT                        (0x30)
  #define AT86RF2XX_PHY_TX_PWR_MASK__TX_PWR                       (0x0F)
  #else
  #define AT86RF2XX_PHY_TX_PWR_MASK__TX_PWR                       (0x0F)
  #endif
  #define AT86RF2XX_PHY_TX_PWR_DEFAULT__PA_BUF_LT                 (0xC0)
  #define AT86RF2XX_PHY_TX_PWR_DEFAULT__PA_LT                     (0x00)
  #define AT86RF2XX_PHY_TX_PWR_DEFAULT__TX_PWR                    (0x00)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the PHY_RSSI register
   * @{
   */
  #define AT86RF2XX_PHY_RSSI_MASK__RX_CRC_VALID                   (0x80)
  #define AT86RF2XX_PHY_RSSI_MASK__RND_VALUE                      (0x60)
  #define AT86RF2XX_PHY_RSSI_MASK__RSSI                           (0x1F)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the XOSC_CTRL register
   * @{
   */
  #define AT86RF2XX_XOSC_CTRL__XTAL_MODE_CRYSTAL                  (0xF0)
  #define AT86RF2XX_XOSC_CTRL__XTAL_MODE_EXTERNAL                 (0xF0)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the RX_SYN register
   * @{
   */
  #define AT86RF2XX_RX_SYN__RX_PDT_DIS                            (0x80)
  #define AT86RF2XX_RX_SYN__RX_OVERRIDE                           (0x70)
  #define AT86RF2XX_RX_SYN__RX_PDT_LEVEL                          (0x0F)
  /** @} */
  
  /**
   * @name    Timing values
   * @{
   */
  #define AT86RF2XX_TIMING__VCC_TO_P_ON                           (330)
  #define AT86RF2XX_TIMING__SLEEP_TO_TRX_OFF                      (380)
  #define AT86RF2XX_TIMING__TRX_OFF_TO_PLL_ON                     (110)
  #define AT86RF2XX_TIMING__TRX_OFF_TO_RX_ON                      (110)
  #define AT86RF2XX_TIMING__PLL_ON_TO_BUSY_TX                     (16)
  #define AT86RF2XX_TIMING__RESET                                 (100)
  #define AT86RF2XX_TIMING__RESET_TO_TRX_OFF                      (37)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the XAH_CTRL_0 register
   * @{
   */
  #define AT86RF2XX_XAH_CTRL_0__MAX_FRAME_RETRIES                 (0xF0)
  #define AT86RF2XX_XAH_CTRL_0__MAX_CSMA_RETRIES                  (0x0E)
  #define AT86RF2XX_XAH_CTRL_0__SLOTTED_OPERATION                 (0x01)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the XAH_CTRL_1 register
   * @{
   */
  #define AT86RF2XX_XAH_CTRL_1__AACK_FLTR_RES_FT                  (0x20)
  #define AT86RF2XX_XAH_CTRL_1__AACK_UPLD_RES_FT                  (0x10)
  #define AT86RF2XX_XAH_CTRL_1__AACK_ACK_TIME                     (0x04)
  #define AT86RF2XX_XAH_CTRL_1__AACK_PROM_MODE                    (0x02)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the XAH_CTRL_2 register
   *
   * This register contains both the CSMA-CA retry counter and the frame retry
   * counter. At this moment only the at86rf232 and the at86rf233 support this
   * register.
   *
   * @{
   */
  #if AT86RF2XX_HAVE_RETRIES
  #define AT86RF2XX_XAH_CTRL_2__ARET_FRAME_RETRIES_MASK           (0xF0)
  #define AT86RF2XX_XAH_CTRL_2__ARET_FRAME_RETRIES_OFFSET         (4)
  #define AT86RF2XX_XAH_CTRL_2__ARET_CSMA_RETRIES_MASK            (0x0E)
  #define AT86RF2XX_XAH_CTRL_2__ARET_CSMA_RETRIES_OFFSET          (1)
  #endif
  /** @} */
  
  /**
   * @name    Bitfield definitions for the CSMA_SEED_1 register
   * @{
   */
  #define AT86RF2XX_CSMA_SEED_1__AACK_SET_PD                      (0x20)
  #define AT86RF2XX_CSMA_SEED_1__AACK_DIS_ACK                     (0x10)
  #define AT86RF2XX_CSMA_SEED_1__AACK_I_AM_COORD                  (0x08)
  #define AT86RF2XX_CSMA_SEED_1__CSMA_SEED_1                      (0x07)
  /** @} */
  
  /**
   * @name    Bitfield definitions for the RF_CTRL_0 register
   * @{
   */
  #ifdef MODULE_AT86RF212B
  #define AT86RF2XX_RF_CTRL_0_MASK__PA_LT                         (0xC0)
  #define AT86RF2XX_RF_CTRL_0_MASK__GC_TX_OFFS                    (0x03)
  
  #define AT86RF2XX_RF_CTRL_0_GC_TX_OFFS__0DB                     (0x01)
  #define AT86RF2XX_RF_CTRL_0_GC_TX_OFFS__1DB                     (0x02)
  #define AT86RF2XX_RF_CTRL_0_GC_TX_OFFS__2DB                     (0x03)
  #endif
  /** @} */
  
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* AT86RF2XX_REGISTERS_H */
  /** @} */