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
|