Paparazzi UAS  v5.18.0_stable
Paparazzi is a free software Unmanned Aircraft System.
cc2500.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2019 Tom van Dijk <tomvand@users.noreply.github.com>
3  *
4  * This code is based on the betaflight cc2500 and FrskyX implementation.
5  * https://github.com/betaflight/betaflight
6  *
7  * This file is part of paparazzi.
8  *
9  * paparazzi is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2, or (at your option)
12  * any later version.
13  *
14  * paparazzi is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with paparazzi; see the file COPYING. If not, write to
21  * the Free Software Foundation, 59 Temple Place - Suite 330,
22  * Boston, MA 02111-1307, USA.
23  */
24 
25 #ifndef PERIPHERALS_CC2500_H
26 #define PERIPHERALS_CC2500_H
27 
28 void cc2500_init(void);
29 
30 
31 // betaflight/src/main/drivers/rx/rx_cc2500.h @ 0a16f4d on Oct 1, 2018
32 
33 /*
34  * This file is part of Cleanflight and Betaflight.
35  *
36  * Cleanflight and Betaflight are free software. You can redistribute
37  * this software and/or modify this software under the terms of the
38  * GNU General Public License as published by the Free Software
39  * Foundation, either version 3 of the License, or (at your option)
40  * any later version.
41  *
42  * Cleanflight and Betaflight are distributed in the hope that they
43  * will be useful, but WITHOUT ANY WARRANTY; without even the implied
44  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
45  * See the GNU General Public License for more details.
46  *
47  * You should have received a copy of the GNU General Public License
48  * along with this software.
49  *
50  * If not, see <http://www.gnu.org/licenses/>.
51  */
52 
53 /*
54  CC2500 SPI drivers
55 */
56 
57 #pragma once
58 
59 #include <stdbool.h>
60 #include <stdint.h>
61 
62 //#include "rx/rx_spi.h"
63 
64 enum {
65  CC2500_00_IOCFG2 = 0x00, // GDO2 output pin configuration
66  CC2500_01_IOCFG1 = 0x01, // GDO1 output pin configuration
67  CC2500_02_IOCFG0 = 0x02, // GDO0 output pin configuration
68  CC2500_03_FIFOTHR = 0x03, // RX FIFO and TX FIFO thresholds
69  CC2500_04_SYNC1 = 0x04, // Sync word, high byte
70  CC2500_05_SYNC0 = 0x05, // Sync word, low byte
71  CC2500_06_PKTLEN = 0x06, // Packet length
72  CC2500_07_PKTCTRL1 = 0x07, // Packet automation control
73  CC2500_08_PKTCTRL0 = 0x08, // Packet automation control
74  CC2500_09_ADDR = 0x09, // Device address
75  CC2500_0A_CHANNR = 0x0A, // Channel number
76  CC2500_0B_FSCTRL1 = 0x0B, // Frequency synthesizer control
77  CC2500_0C_FSCTRL0 = 0x0C, // Frequency synthesizer control
78  CC2500_0D_FREQ2 = 0x0D, // Frequency control word, high byte
79  CC2500_0E_FREQ1 = 0x0E, // Frequency control word, middle byte
80  CC2500_0F_FREQ0 = 0x0F, // Frequency control word, low byte
81  CC2500_10_MDMCFG4 = 0x10, // Modem configuration
82  CC2500_11_MDMCFG3 = 0x11, // Modem configuration
83  CC2500_12_MDMCFG2 = 0x12, // Modem configuration
84  CC2500_13_MDMCFG1 = 0x13, // Modem configuration
85  CC2500_14_MDMCFG0 = 0x14, // Modem configuration
86  CC2500_15_DEVIATN = 0x15, // Modem deviation setting
87  CC2500_16_MCSM2 = 0x16, // Main Radio Cntrl State Machine config
88  CC2500_17_MCSM1 = 0x17, // Main Radio Cntrl State Machine config
89  CC2500_18_MCSM0 = 0x18, // Main Radio Cntrl State Machine config
90  CC2500_19_FOCCFG = 0x19, // Frequency Offset Compensation config
91  CC2500_1A_BSCFG = 0x1A, // Bit Synchronization configuration
92  CC2500_1B_AGCCTRL2 = 0x1B, // AGC control
93  CC2500_1C_AGCCTRL1 = 0x1C, // AGC control
94  CC2500_1D_AGCCTRL0 = 0x1D, // AGC control
95  CC2500_1E_WOREVT1 = 0x1E, // High byte Event 0 timeout
96  CC2500_1F_WOREVT0 = 0x1F, // Low byte Event 0 timeout
97  CC2500_20_WORCTRL = 0x20, // Wake On Radio control
98  CC2500_21_FREND1 = 0x21, // Front end RX configuration
99  CC2500_22_FREND0 = 0x22, // Front end TX configuration
100  CC2500_23_FSCAL3 = 0x23, // Frequency synthesizer calibration
101  CC2500_24_FSCAL2 = 0x24, // Frequency synthesizer calibration
102  CC2500_25_FSCAL1 = 0x25, // Frequency synthesizer calibration
103  CC2500_26_FSCAL0 = 0x26, // Frequency synthesizer calibration
104  CC2500_27_RCCTRL1 = 0x27, // RC oscillator configuration
105  CC2500_28_RCCTRL0 = 0x28, // RC oscillator configuration
106  CC2500_29_FSTEST = 0x29, // Frequency synthesizer cal control
107  CC2500_2A_PTEST = 0x2A, // Production test
108  CC2500_2B_AGCTEST = 0x2B, // AGC test
109  CC2500_2C_TEST2 = 0x2C, // Various test settings
110  CC2500_2D_TEST1 = 0x2D, // Various test settings
111  CC2500_2E_TEST0 = 0x2E, // Various test settings
112 
113  // Status registers
114  CC2500_30_PARTNUM = 0x30, // Part number
115  CC2500_31_VERSION = 0x31, // Current version number
116  CC2500_32_FREQEST = 0x32, // Frequency offset estimate
117  CC2500_33_LQI = 0x33, // Demodulator estimate for link quality
118  CC2500_34_RSSI = 0x34, // Received signal strength indication
119  CC2500_35_MARCSTATE = 0x35, // Control state machine state
120  CC2500_36_WORTIME1 = 0x36, // High byte of WOR timer
121  CC2500_37_WORTIME0 = 0x37, // Low byte of WOR timer
122  CC2500_38_PKTSTATUS = 0x38, // Current GDOx status and packet status
123  CC2500_39_VCO_VC_DAC = 0x39, // Current setting from PLL cal module
124  CC2500_3A_TXBYTES = 0x3A, // Underflow and # of bytes in TXFIFO
125  CC2500_3B_RXBYTES = 0x3B, // Overflow and # of bytes in RXFIFO
126 
127  // Multi byte memory locations
131 };
132 
133 // Definitions for burst/single access to registers
134 #define CC2500_WRITE_SINGLE 0x00
135 #define CC2500_WRITE_BURST 0x40
136 #define CC2500_READ_SINGLE 0x80
137 #define CC2500_READ_BURST 0xC0
138 
139 // Strobe commands
140 #define CC2500_SRES 0x30 // Reset chip.
141 #define CC2500_SFSTXON \
142  0x31 // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
143  // If in RX/TX: Go to a wait state where only the synthesizer is
144  // running (for quick RX / TX turnaround).
145 #define CC2500_SXOFF 0x32 // Turn off crystal oscillator.
146 #define CC2500_SCAL 0x33 // Calibrate frequency synthesizer and turn it off
147  // (enables quick start).
148 #define CC2500_SRX \
149  0x34 // Enable RX. Perform calibration first if coming from IDLE and
150  // MCSM0.FS_AUTOCAL=1.
151 #define CC2500_STX \
152  0x35 // In IDLE state: Enable TX. Perform calibration first if
153  // MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
154  // Only go to TX if channel is clear.
155 #define CC2500_SIDLE \
156  0x36 // Exit RX / TX, turn off frequency synthesizer and exit
157  // Wake-On-Radio mode if applicable.
158 #define CC2500_SAFC 0x37 // Perform AFC adjustment of the frequency synthesizer
159 #define CC2500_SWOR 0x38 // Start automatic RX polling sequence (Wake-on-Radio)
160 #define CC2500_SPWD 0x39 // Enter power down mode when CSn goes high.
161 #define CC2500_SFRX 0x3A // Flush the RX FIFO buffer.
162 #define CC2500_SFTX 0x3B // Flush the TX FIFO buffer.
163 #define CC2500_SWORRST 0x3C // Reset real time clock.
164 #define CC2500_SNOP \
165  0x3D // No operation. May be used to pad strobe commands to two
166  // bytes for simpler software.
167 //----------------------------------------------------------------------------------
168 // Chip Status Byte
169 //----------------------------------------------------------------------------------
170 
171 // Bit fields in the chip status byte
172 #define CC2500_STATUS_CHIP_RDYn_BM 0x80
173 #define CC2500_STATUS_STATE_BM 0x70
174 #define CC2500_STATUS_FIFO_BYTES_AVAILABLE_BM 0x0F
175 
176 // Chip states
177 #define CC2500_STATE_IDLE 0x00
178 #define CC2500_STATE_RX 0x10
179 #define CC2500_STATE_TX 0x20
180 #define CC2500_STATE_FSTXON 0x30
181 #define CC2500_STATE_CALIBRATE 0x40
182 #define CC2500_STATE_SETTLING 0x50
183 #define CC2500_STATE_RX_OVERFLOW 0x60
184 #define CC2500_STATE_TX_UNDERFLOW 0x70
185 
186 //----------------------------------------------------------------------------------
187 // Other register bit fields
188 //----------------------------------------------------------------------------------
189 #define CC2500_LQI_CRC_OK_BM 0x80
190 #define CC2500_LQI_EST_BM 0x7F
191 
192 void cc2500ReadFifo(uint8_t *dpbuffer, uint8_t len);
193 void cc2500WriteFifo(uint8_t *dpbuffer, uint8_t len);
194 
195 void cc2500ReadRegisterMulti(uint8_t address, uint8_t *data,
196  uint8_t length);
197 void cc2500WriteRegisterMulti(uint8_t address, uint8_t *data,
198  uint8_t length);
199 
201 void cc2500Strobe(uint8_t address);
202 void cc2500WriteReg(uint8_t address, uint8_t data);
203 void cc2500SetPower(uint8_t power);
204 uint8_t cc2500Reset(void);
205 
206 
207 #endif
cc2500_init
void cc2500_init(void)
Definition: cc2500.c:43
CC2500_25_FSCAL1
@ CC2500_25_FSCAL1
Definition: cc2500.h:102
CC2500_1A_BSCFG
@ CC2500_1A_BSCFG
Definition: cc2500.h:91
CC2500_07_PKTCTRL1
@ CC2500_07_PKTCTRL1
Definition: cc2500.h:72
CC2500_36_WORTIME1
@ CC2500_36_WORTIME1
Definition: cc2500.h:120
CC2500_2E_TEST0
@ CC2500_2E_TEST0
Definition: cc2500.h:111
CC2500_1F_WOREVT0
@ CC2500_1F_WOREVT0
Definition: cc2500.h:96
CC2500_13_MDMCFG1
@ CC2500_13_MDMCFG1
Definition: cc2500.h:84
CC2500_35_MARCSTATE
@ CC2500_35_MARCSTATE
Definition: cc2500.h:119
cc2500SetPower
void cc2500SetPower(uint8_t power)
Definition: cc2500.c:211
CC2500_38_PKTSTATUS
@ CC2500_38_PKTSTATUS
Definition: cc2500.h:122
CC2500_33_LQI
@ CC2500_33_LQI
Definition: cc2500.h:117
CC2500_0F_FREQ0
@ CC2500_0F_FREQ0
Definition: cc2500.h:80
CC2500_17_MCSM1
@ CC2500_17_MCSM1
Definition: cc2500.h:88
cc2500Strobe
void cc2500Strobe(uint8_t address)
Definition: cc2500.c:204
cc2500Reset
uint8_t cc2500Reset(void)
Definition: cc2500.c:228
CC2500_26_FSCAL0
@ CC2500_26_FSCAL0
Definition: cc2500.h:103
CC2500_24_FSCAL2
@ CC2500_24_FSCAL2
Definition: cc2500.h:101
CC2500_22_FREND0
@ CC2500_22_FREND0
Definition: cc2500.h:99
CC2500_09_ADDR
@ CC2500_09_ADDR
Definition: cc2500.h:74
CC2500_0C_FSCTRL0
@ CC2500_0C_FSCTRL0
Definition: cc2500.h:77
CC2500_31_VERSION
@ CC2500_31_VERSION
Definition: cc2500.h:115
CC2500_0E_FREQ1
@ CC2500_0E_FREQ1
Definition: cc2500.h:79
CC2500_39_VCO_VC_DAC
@ CC2500_39_VCO_VC_DAC
Definition: cc2500.h:123
CC2500_19_FOCCFG
@ CC2500_19_FOCCFG
Definition: cc2500.h:90
CC2500_00_IOCFG2
@ CC2500_00_IOCFG2
Definition: cc2500.h:65
CC2500_30_PARTNUM
@ CC2500_30_PARTNUM
Definition: cc2500.h:114
CC2500_0B_FSCTRL1
@ CC2500_0B_FSCTRL1
Definition: cc2500.h:76
CC2500_0D_FREQ2
@ CC2500_0D_FREQ2
Definition: cc2500.h:78
cc2500WriteRegisterMulti
void cc2500WriteRegisterMulti(uint8_t address, uint8_t *data, uint8_t length)
Definition: cc2500.c:193
cc2500WriteReg
void cc2500WriteReg(uint8_t address, uint8_t data)
Definition: cc2500.c:206
CC2500_2B_AGCTEST
@ CC2500_2B_AGCTEST
Definition: cc2500.h:108
CC2500_16_MCSM2
@ CC2500_16_MCSM2
Definition: cc2500.h:87
cc2500ReadFifo
void cc2500ReadFifo(uint8_t *dpbuffer, uint8_t len)
Definition: cc2500.c:174
cc2500ReadReg
uint8_t cc2500ReadReg(uint8_t reg)
Definition: cc2500.c:199
CC2500_01_IOCFG1
@ CC2500_01_IOCFG1
Definition: cc2500.h:66
CC2500_23_FSCAL3
@ CC2500_23_FSCAL3
Definition: cc2500.h:100
CC2500_06_PKTLEN
@ CC2500_06_PKTLEN
Definition: cc2500.h:71
CC2500_3A_TXBYTES
@ CC2500_3A_TXBYTES
Definition: cc2500.h:124
CC2500_29_FSTEST
@ CC2500_29_FSTEST
Definition: cc2500.h:106
CC2500_2A_PTEST
@ CC2500_2A_PTEST
Definition: cc2500.h:107
cc2500WriteFifo
void cc2500WriteFifo(uint8_t *dpbuffer, uint8_t len)
Definition: cc2500.c:180
CC2500_20_WORCTRL
@ CC2500_20_WORCTRL
Definition: cc2500.h:97
CC2500_2D_TEST1
@ CC2500_2D_TEST1
Definition: cc2500.h:110
CC2500_02_IOCFG0
@ CC2500_02_IOCFG0
Definition: cc2500.h:67
CC2500_08_PKTCTRL0
@ CC2500_08_PKTCTRL0
Definition: cc2500.h:73
uint8_t
unsigned char uint8_t
Definition: types.h:14
CC2500_2C_TEST2
@ CC2500_2C_TEST2
Definition: cc2500.h:109
CC2500_32_FREQEST
@ CC2500_32_FREQEST
Definition: cc2500.h:116
CC2500_1B_AGCCTRL2
@ CC2500_1B_AGCCTRL2
Definition: cc2500.h:92
CC2500_28_RCCTRL0
@ CC2500_28_RCCTRL0
Definition: cc2500.h:105
CC2500_0A_CHANNR
@ CC2500_0A_CHANNR
Definition: cc2500.h:75
CC2500_10_MDMCFG4
@ CC2500_10_MDMCFG4
Definition: cc2500.h:81
CC2500_11_MDMCFG3
@ CC2500_11_MDMCFG3
Definition: cc2500.h:82
CC2500_21_FREND1
@ CC2500_21_FREND1
Definition: cc2500.h:98
CC2500_1C_AGCCTRL1
@ CC2500_1C_AGCCTRL1
Definition: cc2500.h:93
CC2500_1E_WOREVT1
@ CC2500_1E_WOREVT1
Definition: cc2500.h:95
CC2500_34_RSSI
@ CC2500_34_RSSI
Definition: cc2500.h:118
CC2500_3E_PATABLE
@ CC2500_3E_PATABLE
Definition: cc2500.h:128
cc2500ReadRegisterMulti
void cc2500ReadRegisterMulti(uint8_t address, uint8_t *data, uint8_t length)
Definition: cc2500.c:188
CC2500_03_FIFOTHR
@ CC2500_03_FIFOTHR
Definition: cc2500.h:68
CC2500_14_MDMCFG0
@ CC2500_14_MDMCFG0
Definition: cc2500.h:85
CC2500_04_SYNC1
@ CC2500_04_SYNC1
Definition: cc2500.h:69
CC2500_3F_TXFIFO
@ CC2500_3F_TXFIFO
Definition: cc2500.h:129
CC2500_15_DEVIATN
@ CC2500_15_DEVIATN
Definition: cc2500.h:86
CC2500_3F_RXFIFO
@ CC2500_3F_RXFIFO
Definition: cc2500.h:130
CC2500_27_RCCTRL1
@ CC2500_27_RCCTRL1
Definition: cc2500.h:104
CC2500_05_SYNC0
@ CC2500_05_SYNC0
Definition: cc2500.h:70
CC2500_1D_AGCCTRL0
@ CC2500_1D_AGCCTRL0
Definition: cc2500.h:94
CC2500_12_MDMCFG2
@ CC2500_12_MDMCFG2
Definition: cc2500.h:83
CC2500_18_MCSM0
@ CC2500_18_MCSM0
Definition: cc2500.h:89
CC2500_37_WORTIME0
@ CC2500_37_WORTIME0
Definition: cc2500.h:121
CC2500_3B_RXBYTES
@ CC2500_3B_RXBYTES
Definition: cc2500.h:125