nRF24L01.h


1
/*
2
  Copyright (c) 2011 by Ernst Buchmann 
3
  
4
  Code based on the work of Stefan Engelke and Brennan Ball
5
  
6
    Permission is hereby granted, free of charge, to any person 
7
    obtaining a copy of this software and associated documentation 
8
    files (the "Software"), to deal in the Software without 
9
    restriction, including without limitation the rights to use, copy, 
10
    modify, merge, publish, distribute, sublicense, and/or sell copies 
11
    of the Software, and to permit persons to whom the Software is 
12
    furnished to do so, subject to the following conditions:
13
14
    The above copyright notice and this permission notice shall be 
15
    included in all copies or substantial portions of the Software.
16
17
    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
18
    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
19
    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
20
    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
21
    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
22
    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
23
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
24
    DEALINGS IN THE SOFTWARE.
25
26
    
27
*/
28
29
//Memory Map - register address defines
30
#define CONFIG      0x00
31
#define EN_AA       0x01
32
#define EN_RXADDR   0x02
33
#define SETUP_AW    0x03
34
#define SETUP_RETR  0x04
35
#define RF_CH       0x05
36
#define RF_SETUP    0x06
37
#define STATUS      0x07
38
#define OBSERVE_TX  0x08
39
#define RPD      0x09    //Mnemonic for nRF24L01+ 
40
//#define CD          0x09     //Mnemonic from nRF24L01, new is RPD
41
#define RX_ADDR_P0  0x0A
42
#define RX_ADDR_P1  0x0B
43
#define RX_ADDR_P2  0x0C
44
#define RX_ADDR_P3  0x0D
45
#define RX_ADDR_P4  0x0E
46
#define RX_ADDR_P5  0x0F
47
#define TX_ADDR     0x10
48
#define RX_PW_P0    0x11
49
#define RX_PW_P1    0x12
50
#define RX_PW_P2    0x13
51
#define RX_PW_P3    0x14
52
#define RX_PW_P4    0x15
53
#define RX_PW_P5    0x16
54
#define FIFO_STATUS 0x17
55
56
//Bit Mnemonics
57
#define MASK_RX_DR  6
58
#define MASK_TX_DS  5
59
#define MASK_MAX_RT 4
60
#define EN_CRC      3
61
#define CRCO        2
62
#define PWR_UP      1
63
#define PRIM_RX     0
64
#define ENAA_P5     5
65
#define ENAA_P4     4
66
#define ENAA_P3     3
67
#define ENAA_P2     2
68
#define ENAA_P1     1
69
#define ENAA_P0     0
70
#define ERX_P5      5
71
#define ERX_P4      4
72
#define ERX_P3      3
73
#define ERX_P2      2
74
#define ERX_P1      1
75
#define ERX_P0      0
76
#define AW          0
77
#define ARD         4
78
#define ARC         0
79
#define PLL_LOCK    4
80
#define RF_DR_HIGH  3
81
#define RF_DR_LOW  5
82
#define RF_PWR      1
83
#define LNA_HCURR   0        
84
#define RX_DR       6
85
#define TX_DS       5
86
#define MAX_RT      4
87
#define RX_P_NO     1
88
#define TX_FULL     0
89
#define PLOS_CNT    4
90
#define ARC_CNT     0
91
#define TX_REUSE    6
92
#define FIFO_FULL   5
93
#define TX_EMPTY    4
94
#define RX_FULL     1
95
#define RX_EMPTY    0
96
97
//Command Name Mnemonics (Instructions)
98
#define R_REGISTER    0x00
99
#define W_REGISTER    0x20
100
#define REGISTER_MASK  0x1F
101
#define R_RX_PAYLOAD  0x61
102
#define W_TX_PAYLOAD  0xA0
103
#define FLUSH_TX    0xE1
104
#define FLUSH_RX    0xE2
105
#define REUSE_TX_PL    0xE3
106
#define NOP        0xFF
107
108
///////////////////////////////////////////////////////////
109
// Default register values
110
// Multi-byte registers use notation B<X>, 
111
// where "B" represents "byte" and <X> is the byte number.
112
///////////////////////////////////////////////////////////
113
114
#define CONFIG_DEFAULT_VAL      0x08
115
#define EN_AA_DEFAULT_VAL      0x3F
116
#define EN_RXADDR_DEFAULT_VAL    0x03
117
#define SETUP_AW_DEFAULT_VAL    0x03
118
#define SETUP_RETR_DEFAULT_VAL    0x03
119
#define RF_CH_DEFAULT_VAL      0x02
120
#define RF_SETUP_DEFAULT_VAL    0x0F
121
#define STATUS_DEFAULT_VAL      0x0E
122
#define OBSERVE_TX_DEFAULT_VAL    0x00
123
#define CD_DEFAULT_VAL        0x00
124
#define RX_ADDR_P0_B0_DEFAULT_VAL  0xE7
125
#define RX_ADDR_P0_B1_DEFAULT_VAL  0xE7
126
#define RX_ADDR_P0_B2_DEFAULT_VAL  0xE7
127
#define RX_ADDR_P0_B3_DEFAULT_VAL  0xE7
128
#define RX_ADDR_P0_B4_DEFAULT_VAL  0xE7
129
#define RX_ADDR_P1_B0_DEFAULT_VAL  0xC2
130
#define RX_ADDR_P1_B1_DEFAULT_VAL  0xC2
131
#define RX_ADDR_P1_B2_DEFAULT_VAL  0xC2
132
#define RX_ADDR_P1_B3_DEFAULT_VAL  0xC2
133
#define RX_ADDR_P1_B4_DEFAULT_VAL  0xC2
134
#define RX_ADDR_P2_DEFAULT_VAL    0xC3
135
#define RX_ADDR_P3_DEFAULT_VAL    0xC4
136
#define RX_ADDR_P4_DEFAULT_VAL    0xC5
137
#define RX_ADDR_P5_DEFAULT_VAL    0xC6
138
#define TX_ADDR_B0_DEFAULT_VAL    0xE7
139
#define TX_ADDR_B1_DEFAULT_VAL    0xE7
140
#define TX_ADDR_B2_DEFAULT_VAL    0xE7
141
#define TX_ADDR_B3_DEFAULT_VAL    0xE7
142
#define TX_ADDR_B4_DEFAULT_VAL    0xE7
143
#define RX_PW_P0_DEFAULT_VAL    0x00
144
#define RX_PW_P1_DEFAULT_VAL    0x00
145
#define RX_PW_P2_DEFAULT_VAL    0x00
146
#define RX_PW_P3_DEFAULT_VAL    0x00
147
#define RX_PW_P4_DEFAULT_VAL    0x00
148
#define RX_PW_P5_DEFAULT_VAL    0x00
149
#define FIFO_STATUS_DEFAULT_VAL    0x11
150
151
////////////////////////////////////////////////////////////////////////////////////
152
// Register bitwise definitions
153
//
154
// Below are the defines for each register's bitwise fields in the 24L01.
155
////////////////////////////////////////////////////////////////////////////////////
156
157
//CONFIG register bitwise definitions
158
#define CONFIG_RESERVED    0x80
159
#define  CONFIG_MASK_RX_DR  0x40
160
#define  CONFIG_MASK_TX_DS  0x20
161
#define  CONFIG_MASK_MAX_RT  0x10
162
#define  CONFIG_EN_CRC    0x08
163
#define  CONFIG_CRCO      0x04
164
#define  CONFIG_PWR_UP    0x02
165
#define  CONFIG_PRIM_RX    0x01
166
167
//EN_AA register bitwise definitions
168
#define EN_AA_RESERVED    0xC0
169
#define EN_AA_ENAA_ALL    0x3F
170
#define EN_AA_ENAA_P5    0x20
171
#define EN_AA_ENAA_P4    0x10
172
#define EN_AA_ENAA_P3    0x08
173
#define EN_AA_ENAA_P2    0x04
174
#define EN_AA_ENAA_P1    0x02
175
#define EN_AA_ENAA_P0    0x01
176
#define EN_AA_ENAA_NONE    0x00
177
178
//EN_RXADDR register bitwise definitions
179
#define EN_RXADDR_RESERVED  0xC0
180
#define EN_RXADDR_ERX_ALL  0x3F
181
#define EN_RXADDR_ERX_P5  0x20
182
#define EN_RXADDR_ERX_P4  0x10
183
#define EN_RXADDR_ERX_P3  0x08
184
#define EN_RXADDR_ERX_P2  0x04
185
#define EN_RXADDR_ERX_P1  0x02
186
#define EN_RXADDR_ERX_P0  0x01
187
#define EN_RXADDR_ERX_NONE  0x00
188
189
//SETUP_AW register bitwise definitions
190
#define SETUP_AW_RESERVED  0xFC
191
#define SETUP_AW      0x03
192
#define SETUP_AW_5BYTES    0x03
193
#define SETUP_AW_4BYTES    0x02
194
#define SETUP_AW_3BYTES    0x01
195
#define SETUP_AW_ILLEGAL  0x00
196
197
//SETUP_RETR register bitwise definitions
198
#define SETUP_RETR_ARD      0xF0
199
#define SETUP_RETR_ARD_4000    0xF0
200
#define SETUP_RETR_ARD_3750    0xE0
201
#define SETUP_RETR_ARD_3500    0xD0
202
#define SETUP_RETR_ARD_3250    0xC0
203
#define SETUP_RETR_ARD_3000    0xB0
204
#define SETUP_RETR_ARD_2750    0xA0
205
#define SETUP_RETR_ARD_2500    0x90
206
#define SETUP_RETR_ARD_2250    0x80
207
#define SETUP_RETR_ARD_2000    0x70
208
#define SETUP_RETR_ARD_1750    0x60
209
#define SETUP_RETR_ARD_1500    0x50
210
#define SETUP_RETR_ARD_1250    0x40
211
#define SETUP_RETR_ARD_1000    0x30
212
#define SETUP_RETR_ARD_750    0x20
213
#define SETUP_RETR_ARD_500    0x10
214
#define SETUP_RETR_ARD_250    0x00
215
#define SETUP_RETR_ARC      0x0F
216
#define SETUP_RETR_ARC_15    0x0F
217
#define SETUP_RETR_ARC_14    0x0E
218
#define SETUP_RETR_ARC_13    0x0D
219
#define SETUP_RETR_ARC_12    0x0C
220
#define SETUP_RETR_ARC_11    0x0B
221
#define SETUP_RETR_ARC_10    0x0A
222
#define SETUP_RETR_ARC_9    0x09
223
#define SETUP_RETR_ARC_8    0x08
224
#define SETUP_RETR_ARC_7    0x07
225
#define SETUP_RETR_ARC_6    0x06
226
#define SETUP_RETR_ARC_5    0x05
227
#define SETUP_RETR_ARC_4    0x04
228
#define SETUP_RETR_ARC_3    0x03
229
#define SETUP_RETR_ARC_2    0x02
230
#define SETUP_RETR_ARC_1    0x01
231
#define SETUP_RETR_ARC_0    0x00
232
233
//RF_CH register bitwise definitions
234
#define RF_CH_RESERVED    0x80
235
236
//RF_SETUP register bitwise definitions
237
#define RF_SETUP_RESERVED  0xE0
238
#define RF_SETUP_PLL_LOCK  0x10
239
#define RF_SETUP_RF_DR    0x08
240
#define RF_SETUP_RF_DR_250  0x20
241
#define RF_SETUP_RF_DR_1000  0x00
242
#define RF_SETUP_RF_DR_2000 0x08
243
#define RF_SETUP_RF_PWR    0x06
244
#define RF_SETUP_RF_PWR_0  0x06
245
#define RF_SETUP_RF_PWR_6   0x04
246
#define RF_SETUP_RF_PWR_12  0x02
247
#define RF_SETUP_RF_PWR_18  0x00
248
#define RF_SETUP_LNA_HCURR  0x01
249
250
//STATUS register bitwise definitions
251
#define STATUS_RESERVED            0x80
252
#define STATUS_RX_DR            0x40
253
#define STATUS_TX_DS            0x20
254
#define STATUS_MAX_RT            0x10
255
#define STATUS_RX_P_NO            0x0E
256
#define STATUS_RX_P_NO_RX_FIFO_NOT_EMPTY  0x0E
257
#define STATUS_RX_P_NO_UNUSED        0x0C
258
#define STATUS_RX_P_NO_5          0x0A
259
#define STATUS_RX_P_NO_4          0x08
260
#define STATUS_RX_P_NO_3          0x06
261
#define STATUS_RX_P_NO_2          0x04
262
#define STATUS_RX_P_NO_1          0x02
263
#define STATUS_RX_P_NO_0          0x00
264
#define STATUS_TX_FULL            0x01
265
266
//OBSERVE_TX register bitwise definitions
267
#define OBSERVE_TX_PLOS_CNT    0xF0
268
#define OBSERVE_TX_ARC_CNT    0x0F
269
270
//CD register bitwise definitions for nRF24L01
271
//#define CD_RESERVED    0xFE
272
//#define CD_CD      0x01
273
274
//RPD register bitwise definitions for nRF24L01+
275
#define RPD_RESERVED    0xFE
276
#define RPD_RPD        0x01
277
278
//RX_PW_P0 register bitwise definitions
279
#define RX_PW_P0_RESERVED  0xC0
280
281
//RX_PW_P0 register bitwise definitions
282
#define RX_PW_P0_RESERVED  0xC0
283
284
//RX_PW_P1 register bitwise definitions
285
#define RX_PW_P1_RESERVED  0xC0
286
287
//RX_PW_P2 register bitwise definitions
288
#define RX_PW_P2_RESERVED  0xC0
289
290
//RX_PW_P3 register bitwise definitions
291
#define RX_PW_P3_RESERVED  0xC0
292
293
//RX_PW_P4 register bitwise definitions
294
#define RX_PW_P4_RESERVED  0xC0
295
296
//RX_PW_P5 register bitwise definitions
297
#define RX_PW_P5_RESERVED  0xC0
298
299
//FIFO_STATUS register bitwise definitions
300
#define FIFO_STATUS_RESERVED  0x8C
301
#define FIFO_STATUS_TX_REUSE  0x40
302
#define FIFO_STATUS_TX_FULL    0x20
303
#define FIFO_STATUS_TX_EMPTY  0x10
304
#define FIFO_STATUS_RX_FULL    0x02
305
#define FIFO_STATUS_RX_EMPTY  0x01