40 #define STATUS_SPI_READY (0x1 << 7)
41 #define STATUS_IRQ_STATUS (0x1 << 6)
42 #define STATUS_CMD_READY (0x1 << 5)
43 #define STATUS_FW_STATE (0x1F << 0)
46 #define FW_STATE_INIT 0x0F
47 #define FW_STATE_BUSY 0x00
48 #define FW_STATE_PHY_OFF 0x11
49 #define FW_STATE_PHY_ON 0x12
50 #define FW_STATE_PHY_RX 0x13
51 #define FW_STATE_PHY_TX 0x14
52 #define FW_STATE_PHY_SLEEP 0x06
53 #define FW_STATE_GET_RSSI 0x05
54 #define FW_STATE_IR_CAL 0x07
55 #define FW_STATE_AES_DECRYPT_INIT 0x08
56 #define FW_STATE_AES_DECRYPT 0x09
57 #define FW_STATE_AES_ENCRYPT 0x0A
60 #define SPI_MEM_WR 0x18
61 #define SPI_MEM_RD 0x38
62 #define SPI_MEMR_WR 0x08
63 #define SPI_MEMR_RD 0x28
68 #define CMD_PHY_OFF 0xB0
69 #define CMD_PHY_ON 0xB1
70 #define CMD_PHY_RX 0xB2
71 #define CMD_PHY_TX 0xB5
72 #define CMD_PHY_SLEEP 0xBA
73 #define CMD_CONFIG_DEV 0xBB
74 #define CMD_GET_RSSI 0xBC
75 #define CMD_BB_CAL 0xBE
76 #define CMD_HW_RESET 0xC8
77 #define CMD_RAM_LOAD_INIT 0xBF
78 #define CMD_RAM_LOAD_DONE 0xC7
79 #define CMD_IR_CAL 0xBD
80 #define CMD_AES_ENCRYPT 0xD0
81 #define CMD_AES_DECRYPT 0xD2
82 #define CMD_AES_DECRYPT_INIT 0xD1
83 #define CMD_RS_ENCODE_INIT 0xD1
84 #define CMD_RS_ENCODE 0xD0
85 #define CMD_RS_DECODE 0xD2
88 #define BBRAM_REG_INTERRUPT_MASK_0 0x100
89 #define BBRAM_REG_INTERRUPT_MASK_1 0x101
90 #define BBRAM_REG_NUMBER_OF_WAKEUPS_0 0x102
91 #define BBRAM_REG_NUMBER_OF_WAKEUPS_1 0x103
92 #define BBRAM_REG_NUMBER_OF_WAKEUPS_IRQ_THRESHOLD_0 0x104
93 #define BBRAM_REG_NUMBER_OF_WAKEUPS_IRQ_THRESHOLD_1 0x105
94 #define BBRAM_REG_RX_DWELL_TIME 0x106
95 #define BBRAM_REG_PARMTIME_DIVIDER 0x107
96 #define BBRAM_REG_SWM_RSSI_THRESH 0x108
97 #define BBRAM_REG_CHANNEL_FREQ_0 0x109
98 #define BBRAM_REG_CHANNEL_FREQ_1 0x10A
99 #define BBRAM_REG_CHANNEL_FREQ_2 0x10B
100 #define BBRAM_REG_RADIO_CFG_0 0x10C
101 #define BBRAM_REG_RADIO_CFG_1 0x10D
102 #define BBRAM_REG_RADIO_CFG_2 0x10E
103 #define BBRAM_REG_RADIO_CFG_3 0x10F
104 #define BBRAM_REG_RADIO_CFG_4 0x110
105 #define BBRAM_REG_RADIO_CFG_5 0x111
106 #define BBRAM_REG_RADIO_CFG_6 0x112
107 #define BBRAM_REG_RADIO_CFG_7 0x113
108 #define BBRAM_REG_RADIO_CFG_8 0x114
109 #define BBRAM_REG_RADIO_CFG_9 0x115
110 #define BBRAM_REG_RADIO_CFG_10 0x116
111 #define BBRAM_REG_RADIO_CFG_11 0x117
112 #define BBRAM_REG_IMAGE_REJECT_CAL_PHASE 0x118
113 #define BBRAM_REG_IMAGE_REJECT_CAL_AMPLITUDE 0x119
114 #define BBRAM_REG_MODE_CONTROL 0x11A
115 #define BBRAM_REG_PREAMBLE_MATCH 0x11B
116 #define BBRAM_REG_SYMBOL_MODE 0x11C
117 #define BBRAM_REG_PREAMBLE_LEN 0x11D
118 #define BBRAM_REG_CRC_POLY_0 0x11E
119 #define BBRAM_REG_CRC_POLY_1 0x11F
120 #define BBRAM_REG_SYNC_CONTROL 0x120
121 #define BBRAM_REG_SYNC_BYTE_0 0x121
122 #define BBRAM_REG_SYNC_BYTE_1 0x122
123 #define BBRAM_REG_SYNC_BYTE_2 0x123
124 #define BBRAM_REG_TX_BASE_ADR 0x124
125 #define BBRAM_REG_RX_BASE_ADR 0x125
126 #define BBRAM_REG_PACKET_LENGTH_CONTROL 0x126
127 #define BBRAM_REG_PACKET_LENGTH_MAX 0x127
128 #define BBRAM_REG_STATIC_REG_FIX 0x128
129 #define BBRAM_REG_ADDRESS_MATCH_OFFSET 0x129
130 #define BBRAM_REG_ADDRESS_LENGTH 0x12A
131 #define BBRAM_REG_ADDRESS_FILTERING_0 0x12B
132 #define BBRAM_REG_ADDRESS_FILTERING_1 0x12C
133 #define BBRAM_REG_ADDRESS_FILTERING_2 0x12D
134 #define BBRAM_REG_ADDRESS_FILTERING_3 0x12E
135 #define BBRAM_REG_ADDRESS_FILTERING_4 0x12F
136 #define BBRAM_REG_ADDRESS_FILTERING_5 0x130
137 #define BBRAM_REG_ADDRESS_FILTERING_6 0x131
138 #define BBRAM_REG_ADDRESS_FILTERING_7 0x132
139 #define BBRAM_REG_ADDRESS_FILTERING_8 0x133
140 #define BBRAM_REG_ADDRESS_FILTERING_9 0x134
141 #define BBRAM_REG_ADDRESS_FILTERING_10 0x135
142 #define BBRAM_REG_ADDRESS_FILTERING_11 0x136
143 #define BBRAM_REG_ADDRESS_FILTERING_12 0x137
144 #define BBRAM_REG_RSSI_WAIT_TIME 0x138
145 #define BBRAM_REG_TESTMODES 0x139
146 #define BBRAM_REG_TRANSITION_CLOCK_DIV 0x13A
147 #define BBRAM_REG_RESERVED_0 0x13B
148 #define BBRAM_REG_RESERVED_1 0x13C
149 #define BBRAM_REG_RESERVED_2 0x13D
150 #define BBRAM_REG_RX_SYNTH_LOCK_TIME 0x13E
151 #define BBRAM_REG_TX_SYNTH_LOCK_TIME 0x13F
154 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_NUM_WAKEUPS (0x1 << 7)
155 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_SWM_RSSI_DET (0x1 << 6)
156 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_AES_DONE (0x1 << 5)
157 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_TX_EOF (0x1 << 4)
158 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_ADDRESS_MATCH (0x1 << 3)
159 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_CRC_CORRECT (0x1 << 2)
160 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_SYNC_DETECT (0x1 << 1)
161 #define BBRAM_INTERRUPT_MASK_0_INTERRUPT_PREMABLE_DETECT (0x1 << 0)
164 #define BBRAM_INTERRUPT_MASK_1_BATTERY_ALARM (0x1 << 7)
165 #define BBRAM_INTERRUPT_MASK_1_CMD_READY (0x1 << 6)
166 #define BBRAM_INTERRUPT_MASK_1_WUC_TIMEOUT (0x1 << 4)
167 #define BBRAM_INTERRUPT_MASK_1_SPI_READY (0x1 << 1)
168 #define BBRAM_INTERRUPT_MASK_1_CMD_FINISHED (0x1 << 0)
171 #define BBRAM_RADIO_CFG_0_DATA_RATE_7_0(x) ((x & 0xFF) << 0)
174 #define BBRAM_RADIO_CFG_1_FREQ_DEVIATION_11_8(x) ((x & 0xF) << 4)
175 #define BBRAM_RADIO_CFG_1_DATA_RATE_11_8(x) ((x & 0xF) << 0)
178 #define BBRAM_RADIO_CFG_2_FREQ_DEVIATION_7_0(x) ((x & 0xFF) << 0)
181 #define BBRAM_RADIO_CFG_6_SYNTH_LUT_CONFIG_0(x) ((x & 0x3F) << 2)
182 #define BBRAM_RADIO_CFG_6_DISCRIM_PHASE(x) ((x & 0x3) << 0)
185 #define BBRAM_RADIO_CFG_7_AGC_LOCK_MODE(x) ((x & 0x3) << 6)
186 #define BBRAM_RADIO_CFG_7_SYNTH_LUT_CONTROL(x) ((x & 0x3) << 4)
187 #define BBRAM_RADIO_CFG_7_SYNTH_LUT_CONFIG_1(x) ((x & 0xF) << 0)
190 #define BBRAM_RADIO_CFG_8_PA_SINGLE_DIFF_SEL (0x1 << 7)
191 #define BBRAM_RADIO_CFG_8_PA_LEVEL(x) ((x & 0xF) << 3)
192 #define BBRAM_RADIO_CFG_8_PA_RAMP(x) ((x & 0x7) << 0)
195 #define BBRAM_RADIO_CFG_9_IFBW(x) ((x & 0x3) << 6)
196 #define BBRAM_RADIO_CFG_9_MOD_SCHEME(x) ((x & 0x7) << 3)
197 #define BBRAM_RADIO_CFG_9_DEMOD_SCHEME(x) ((x & 0x7) << 0)
200 #define BBRAM_RADIO_CFG_10_AFC_POLARITY (0x0 << 4)
201 #define BBRAM_RADIO_CFG_10_AFC_SCHEME(x) ((x & 0x3) << 2)
202 #define BBRAM_RADIO_CFG_10_AFC_LOCK_MODE(x) ((x & 0x3) << 0)
205 #define BBRAM_RADIO_CFG_11_AFC_KP(x) ((x & 0xF) << 4)
206 #define BBRAM_RADIO_CFG_11_AFC_KI(x) ((x & 0xF) << 0)
209 #define BBRAM_MODE_CONTROL_SWM_EN (0x1 << 7)
210 #define BBRAM_MODE_CONTROL_BB_CAL (0x1 << 6)
211 #define BBRAM_MODE_CONTROL_SWM_RSSI_QUAL (0x1 << 5)
212 #define BBRAM_MODE_CONTROL_TX_TO_RX_AUTO_TURNAROUND (0x1 << 4)
213 #define BBRAM_MODE_CONTROL_RX_TO_TX_AUTO_TURNAROUND (0x1 << 3)
214 #define BBRAM_MODE_CONTROL_CUSTOM_TRX_SYNTH_LOCK_TIME_EN (0x1 << 2)
215 #define BBRAM_MODE_CONTROL_EXT_LNA_EN (0x1 << 1)
216 #define BBRAM_MODE_CONTROL_EXT_PA_EN (0x1 << 0)
219 #define BBRAM_SYMBOL_MODE_MANCHESTER_ENC (0x1 << 6)
220 #define BBRAM_SYMBOL_MODE_PROG_CRC_EN (0x1 << 5)
221 #define BBRAM_SYMBOL_MODE_EIGHT_TEN_ENC (0x1 << 4)
222 #define BBRAM_SYMBOL_MODE_DATA_WHITENING (0x1 << 3)
223 #define BBRAM_SYMBOL_MODE_SYMBOL_LENGTH(x) ((x & 0x7) << 0)
226 #define BBRAM_SYNC_CONTROL_SYNC_ERROR_TOL(x) ((x & 0x3) << 6)
227 #define BBRAM_SYNC_CONTROL_SYNC_WORD_LENGTH(x) ((x & 0x1F) << 0)
230 #define BBRAM_PACKET_LENGTH_CONTROL_DATA_BYTE (0x1 << 7)
231 #define BBRAM_PACKET_LENGTH_CONTROL_PACKET_LEN (0x1 << 6)
232 #define BBRAM_PACKET_LENGTH_CONTROL_CRC_EN (0x1 << 5)
233 #define BBRAM_PACKET_LENGTH_CONTROL_DATA_MODE(x) ((x & 0x3) << 3)
234 #define BBRAM_PACKET_LENGTH_CONTROL_LENGTH_OFFSET(x) ((x & 0x7) << 0)
237 #define BBRAM_TESTMODES_EXT_PA_LNA_ATB_CONFIG (0x1 << 7)
238 #define BBRAM_TESTMODES_PER_IRQ_SELF_CLEAR (0x1 << 3)
239 #define BBRAM_TESTMODES_PER_ENABLE (0x1 << 2)
240 #define BBRAM_TESTMODES_CONTINUOUS_TX (0x1 << 1)
241 #define BBRAM_TESTMODES_CONTINUOUS_RX (0x1 << 0)
244 #define MCR_REG_PA_LEVEL_MCR 0x307
245 #define MCR_REG_WUC_CONFIG_HIGH 0x30C
246 #define MCR_REG_WUC_CONFIG_LOW 0x30D
247 #define MCR_REG_WUC_VALUE_HIGH 0x30E
248 #define MCR_REG_WUC_VALUE_LOW 0x30F
249 #define MCR_REG_WUC_FLAG_RESET 0x310
250 #define MCR_REG_WUC_STATUS 0x311
251 #define MCR_REG_RSSI_READBACK 0x312
252 #define MCR_REG_MAX_AFC_RANGE 0x315
253 #define MCR_REG_IMAGE_REJECT_CAL_CONFIG 0x319
254 #define MCR_REG_CHIP_SHUTDOWN 0x322
255 #define MCR_REG_POWERDOWN_RX 0x324
256 #define MCR_REG_POWERDOWN_AUX 0x325
257 #define MCR_REG_ADC_READBACK_HIGH 0x327
258 #define MCR_REG_ADC_READBACK_LOW 0x328
259 #define MCR_REG_BATTERY_MONITOR_THRESHOLD_VOLTAGE 0x32D
260 #define MCR_REG_EXT_UC_CLK_DIVIDE 0x32E
261 #define MCR_REG_AGC_CLK_DIVIDE 0x32F
262 #define MCR_REG_INTERRUPT_SOURCE_0 0x336
263 #define MCR_REG_INTERRUPT_SOURCE_1 0x337
264 #define MCR_REG_CALIBRATION_CONTROL 0x338
265 #define MCR_REG_CALIBRATION_STATUS 0x339
266 #define MCR_REG_RXBB_CAL_CALWRD_READBACK 0x345
267 #define MCR_REG_RXBB_CAL_CALWRD_OVERWRITE 0x346
268 #define MCR_REG_RCOSC_CAL_READBACK_HIGH 0x34F
269 #define MCR_REG_RCOSC_CAL_READBACK_LOW 0x350
270 #define MCR_REG_ADC_CONFIG_LOW 0x359
271 #define MCR_REG_ADC_CONFIG_HIGH 0x35A
272 #define MCR_REG_AGC_OOK_CONTROL 0x35B
273 #define MCR_REG_AGC_CONFIG 0x35C
274 #define MCR_REG_AGC_MODE 0x35D
275 #define MCR_REG_AGC_LOW_THRESHOLD 0x35E
276 #define MCR_REG_AGC_HIGH_THRESHOLD 0x35F
277 #define MCR_REG_AGC_GAIN_STATUS 0x360
278 #define MCR_REG_AGC_ADC_WORD 0x361
279 #define MCR_REG_FREQUENCY_ERROR_READBACK 0x372
280 #define MCR_REG_VCO_BAND_OVRW_VAL 0x3CB
281 #define MCR_REG_VCO_AMPL_OVRW_VAL 0x3CC
282 #define MCR_REG_VCO_OVRW_EN 0x3CD
283 #define MCR_REG_VCO_CAL_CFG 0x3D0
284 #define MCR_REG_OSC_CONFIG 0x3D2
285 #define MCR_REG_VCO_BAND_READBACK 0x3DA
286 #define MCR_REG_VCO_AMPL_READBACK 0x3DB
287 #define MCR_REG_ANALOG_TEST_BUS 0x3F8
288 #define MCR_REG_RSSI_TSTMUX_SEL 0x3F9
289 #define MCR_REG_GPIO_CONFIGURE 0x3FA
290 #define MCR_REG_TEST_DAC_GAIN 0x3FD
292 struct ADF7023_BBRAM {
293 unsigned char interruptMask0;
294 unsigned char interruptMask1;
295 unsigned char numberOfWakeups0;
296 unsigned char numberOfWakeups1;
297 unsigned char numberOfWakeupsIrqThreshold0;
298 unsigned char numberOfWakeupsIrqThreshold1;
299 unsigned char rxDwellTime;
300 unsigned char parmtimeDivider;
301 unsigned char swmRssiThresh;
302 unsigned char channelFreq0;
303 unsigned char channelFreq1;
304 unsigned char channelFreq2;
305 unsigned char radioCfg0;
306 unsigned char radioCfg1;
307 unsigned char radioCfg2;
308 unsigned char radioCfg3;
309 unsigned char radioCfg4;
310 unsigned char radioCfg5;
311 unsigned char radioCfg6;
312 unsigned char radioCfg7;
313 unsigned char radioCfg8;
314 unsigned char radioCfg9;
315 unsigned char radioCfg10;
316 unsigned char radioCfg11;
317 unsigned char imageRejectCalPhase;
318 unsigned char imageRejectCalAmplitude;
319 unsigned char modeControl;
320 unsigned char preambleMatch;
321 unsigned char symbolMode;
322 unsigned char preambleLen;
323 unsigned char crcPoly0;
324 unsigned char crcPoly1;
325 unsigned char syncControl;
326 unsigned char syncByte0;
327 unsigned char syncByte1;
328 unsigned char syncByte2;
329 unsigned char txBaseAdr;
330 unsigned char rxBaseAdr;
331 unsigned char packetLengthControl;
332 unsigned char packetLengthMax;
333 unsigned char staticRegFix;
334 unsigned char addressMatchOffset;
335 unsigned char addressLength;
336 unsigned char addressFiltering0;
337 unsigned char addressFiltering1;
338 unsigned char addressFiltering2;
339 unsigned char addressFiltering3;
340 unsigned char addressFiltering4;
341 unsigned char addressFiltering5;
342 unsigned char addressFiltering6;
343 unsigned char addressFiltering7;
344 unsigned char addressFiltering8;
345 unsigned char addressFiltering9;
346 unsigned char addressFiltering10;
347 unsigned char addressFiltering11;
348 unsigned char addressFiltering12;
349 unsigned char rssiWaitTime;
350 unsigned char testmodes;
351 unsigned char transitionClockDiv;
352 unsigned char reserved0;
353 unsigned char reserved1;
354 unsigned char reserved2;
355 unsigned char rxSynthLockTime;
356 unsigned char txSynthLockTime;
359 #define ADF7023_RAM_SIZE 256
361 #define ADF7023_TX_BASE_ADR 0x10
362 #define ADF7023_RX_BASE_ADR ((ADF7023_TX_BASE_ADR + ADF7023_RAM_SIZE) / 2)
369 char ADF7023_Init(
void);
372 void ADF7023_GetStatus(
unsigned char *status);
375 void ADF7023_SetCommand(
unsigned char command);
378 void ADF7023_SetFwState(
unsigned char fwState);
381 void ADF7023_GetRAM(
unsigned long address,
382 unsigned long length,
383 unsigned char *data);
386 void ADF7023_SetRAM(
unsigned long address,
387 unsigned long length,
388 unsigned char *data);
390 void ADF7023_SetRAM_And_Verify(
unsigned long address,
unsigned long length,
unsigned char *data);
393 unsigned char ADF7023_ReceivePacketAvailable(
void);
396 void ADF7023_ReceivePacket(
unsigned char *packet,
unsigned char *payload_length);
399 void ADF7023_TransmitPacket(
unsigned char *packet,
unsigned char length);
402 void ADF7023_SetChannelFrequency(
unsigned long chFreq);
405 void ADF7023_SetDataRate(
unsigned long dataRate);
408 void ADF7023_SetFrequencyDeviation(
unsigned long freqDev);