cc1200_protocol.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. /*
  2. * CC120X_protocol.h
  3. *
  4. * Created on: Apr 13, 2019
  5. * Author: curiousmuch
  6. */
  7. //*********************************//
  8. // IMPORTANT GPIO SIGNALS
  9. // REG DESCRIPTION
  10. // 0x1e TX CLK
  11. // 0x1d RX_CLK
  12. // 0x10 Carrier Sense Valid
  13. // 0x11 Carrier Sense
  14. //********************************//
  15. // Address Config = No address check
  16. // Bit Rate = 0.825
  17. // Carrier Frequency = 144.174988
  18. // Deviation = 2.994537
  19. // Device Address = 0
  20. // Manchester Enable = false
  21. // Modulation Format = 2-FSK
  22. // Packet Bit Length = 0
  23. // Packet Length = 63
  24. // Packet Length Mode = Not supported
  25. // RX Filter BW = 14.880952
  26. // Symbol rate = 0.825
  27. // Whitening = false
  28. #include <stdio.h>
  29. #include <stdint.h>
  30. #include "cc1200.h"
  31. // Bit Rate = 0.825kHz
  32. static const cc1200_reg_settings_t APRS_TX_RATE[]=
  33. {
  34. {CC120X_SYMBOL_RATE2, 0x35},
  35. {CC120X_SYMBOL_RATE1, 0xA0},
  36. {CC120X_SYMBOL_RATE0, 0x7B}
  37. };
  38. // Bit Rate = 13.2kHz
  39. static const cc1200_reg_settings_t APRS_RX_RATE[]=
  40. {
  41. {CC120X_SYMBOL_RATE2, 0x75},
  42. {CC120X_SYMBOL_RATE1, 0xA0},
  43. {CC120X_SYMBOL_RATE0, 0x7B}
  44. };
  45. static const cc1200_reg_settings_t APRS_RX_SETTINGS[]=
  46. {
  47. {CC120X_IOCFG3, 0x1e}, // TX Clock
  48. {CC120X_IOCFG2, 0x1d}, // RX Clock
  49. {CC120X_IOCFG0, 0x09},
  50. {CC120X_SYNC_CFG1, 0x00}, // Disable Sync Word [0x00]
  51. {CC120X_SYNC_CFG0, 0x13}, // Disable RX_CONFIG_LIMITATION 0x13
  52. {CC120X_DEVIATION_M, 0x9D},
  53. {CC120X_MODCFG_DEV_E, 0x00},
  54. {CC120X_DCFILT_CFG, 0x5D},
  55. {CC120X_PREAMBLE_CFG1, 0x00},
  56. {CC120X_PREAMBLE_CFG0, 0x00}, // Disable Preamble [0x00]
  57. {CC120X_IQIC, 0xCB},
  58. {CC120X_CHAN_BW, 0x9C},
  59. {CC120X_MDMCFG1, 0x00}, // Random guess
  60. {CC120X_MDMCFG0, 0x45},
  61. //{CC120X_MDMCFG0, 0x05},
  62. // 6 kHz
  63. {CC120X_SYMBOL_RATE2, 0x63},
  64. {CC120X_SYMBOL_RATE1, 0xA9},
  65. {CC120X_SYMBOL_RATE0, 0x2A},
  66. {CC120X_AGC_REF, 0x30},
  67. {CC120X_AGC_CS_THR, 0xEC},
  68. {CC120X_AGC_CFG3, 0x11}, // new
  69. {CC120X_AGC_CFG1, 0x51},
  70. {CC120X_AGC_CFG0, 0x87},
  71. {CC120X_FIFO_CFG, 0x00},
  72. {CC120X_FS_CFG, 0x1B},
  73. {CC120X_PKT_CFG2, 0x03},
  74. {CC120X_PKT_CFG1, 0x00},
  75. {CC120X_PKT_CFG0, 0x40}, // new
  76. {CC120X_RFEND_CFG1, 0x0F}, // new
  77. {CC120X_RFEND_CFG0, 0x00},
  78. {CC120X_PA_CFG1, 0x3F},
  79. {CC120X_PKT_LEN, 0xFF},
  80. {CC120X_IF_MIX_CFG, 0x1C},
  81. {CC120X_FREQOFF_CFG, 0x22},
  82. {CC120X_MDMCFG2, 0x0B}, // need to set CFM_DATA_EN bit for CFM mode and reduce upsampler rate
  83. {CC120X_FREQ2, 0x56},
  84. {CC120X_FREQ1, 0x81},
  85. {CC120X_FREQ0, 0x47},
  86. {CC120X_IF_ADC1, 0xEE},
  87. {CC120X_IF_ADC0, 0x10},
  88. {CC120X_FS_DIG1, 0x07},
  89. {CC120X_FS_DIG0, 0xAF},
  90. {CC120X_FS_CAL1, 0x40},
  91. {CC120X_FS_CAL0, 0x0E},
  92. {CC120X_FS_DIVTWO, 0x03},
  93. {CC120X_FS_DSM0, 0x33},
  94. {CC120X_FS_DVC0, 0x17},
  95. {CC120X_FS_PFD, 0x00},
  96. {CC120X_FS_PRE, 0x6E},
  97. {CC120X_FS_REG_DIV_CML, 0x1C},
  98. {CC120X_FS_SPARE, 0xAC},
  99. {CC120X_FS_VCO0, 0xB5},
  100. {CC120X_XOSC5, 0x0E},
  101. {CC120X_XOSC1, 0x03},
  102. };
  103. static const cc1200_reg_settings_t APRS_TX_SETTINGS[]=
  104. {
  105. {CC120X_IOCFG3, 0x1e}, // 0x1e for TX 0x1D for RX
  106. {CC120X_IOCFG0, 0x1d},
  107. {CC120X_SYNC_CFG1, 0xAB},
  108. {CC120X_DEVIATION_M, 0x9D},
  109. {CC120X_MODCFG_DEV_E, 0x00},
  110. {CC120X_DCFILT_CFG, 0x5D},
  111. {CC120X_PREAMBLE_CFG1, 0x00},
  112. {CC120X_PREAMBLE_CFG0, 0x8A},
  113. {CC120X_IQIC, 0xCB},
  114. {CC120X_CHAN_BW, 0x9C},
  115. {CC120X_MDMCFG0, 0x05},
  116. {CC120X_SYMBOL_RATE2, 0x35},
  117. {CC120X_SYMBOL_RATE1, 0xA0},
  118. {CC120X_SYMBOL_RATE0, 0x7B},
  119. {CC120X_AGC_REF, 0x30},
  120. {CC120X_AGC_CS_THR, 0xEC},
  121. {CC120X_AGC_CFG1, 0x51},
  122. {CC120X_AGC_CFG0, 0x87},
  123. {CC120X_FIFO_CFG, 0x00},
  124. {CC120X_FS_CFG, 0x1B},
  125. {CC120X_PKT_CFG2, 0x02},
  126. {CC120X_PKT_CFG1, 0x00},
  127. {CC120X_PKT_CFG0, 0x40},
  128. {CC120X_PA_CFG1, 0x3F},
  129. {CC120X_PKT_LEN, 0x3F},
  130. {CC120X_IF_MIX_CFG, 0x1C},
  131. {CC120X_FREQOFF_CFG, 0x22},
  132. {CC120X_MDMCFG2, 0x0D}, // need to set CFM_DATA_EN bit for CFM mode
  133. {CC120X_FREQ2, 0x56},
  134. {CC120X_FREQ1, 0x81},
  135. {CC120X_FREQ0, 0x47},
  136. {CC120X_IF_ADC1, 0xEE},
  137. {CC120X_IF_ADC0, 0x10},
  138. {CC120X_FS_DIG1, 0x07},
  139. {CC120X_FS_DIG0, 0xAF},
  140. {CC120X_FS_CAL1, 0x40},
  141. {CC120X_FS_CAL0, 0x0E},
  142. {CC120X_FS_DIVTWO, 0x03},
  143. {CC120X_FS_DSM0, 0x33},
  144. {CC120X_FS_DVC0, 0x17},
  145. {CC120X_FS_PFD, 0x00},
  146. {CC120X_FS_PRE, 0x6E},
  147. {CC120X_FS_REG_DIV_CML, 0x1C},
  148. {CC120X_FS_SPARE, 0xAC},
  149. {CC120X_FS_VCO0, 0xB5},
  150. {CC120X_XOSC5, 0x0E},
  151. {CC120X_XOSC1, 0x03},
  152. };
  153. // Address Config = No address check
  154. // Bit Rate = 1.2
  155. // Carrier Frequency = 144.389954
  156. // Deviation = 4.997253
  157. // Device Address = 0
  158. // Manchester Enable = false
  159. // Modulation Format = 2-FSK
  160. // Packet Bit Length = 0
  161. // Packet Length = 255
  162. // Packet Length Mode = Variable
  163. // RX Filter BW = 14.880952
  164. // Symbol rate = 1.2
  165. // Whitening = false
  166. static const cc1200_reg_settings_t APRS_RX2_SETTINGS[]=
  167. {
  168. {CC120X_IOCFG2, 0x08},
  169. {CC120X_IOCFG0, 0x09},
  170. {CC120X_SYNC_CFG1, 0x3F},
  171. {CC120X_MODCFG_DEV_E, 0x01},
  172. {CC120X_DCFILT_CFG, 0x5D},
  173. {CC120X_PREAMBLE_CFG1, 0x00},
  174. {CC120X_PREAMBLE_CFG0, 0x8A},
  175. {CC120X_IQIC, 0xCB},
  176. {CC120X_CHAN_BW, 0x9C},
  177. {CC120X_MDMCFG1, 0x00},
  178. {CC120X_MDMCFG0, 0x45},
  179. {CC120X_SYMBOL_RATE2, 0x3F},
  180. {CC120X_SYMBOL_RATE1, 0x75},
  181. {CC120X_SYMBOL_RATE0, 0x10},
  182. {CC120X_AGC_REF, 0x30},
  183. {CC120X_AGC_CS_THR, 0xEC},
  184. {CC120X_AGC_CFG3, 0x11},
  185. {CC120X_AGC_CFG1, 0x51},
  186. {CC120X_AGC_CFG0, 0x87},
  187. {CC120X_FIFO_CFG, 0x00},
  188. {CC120X_FS_CFG, 0x1B},
  189. {CC120X_PKT_CFG2, 0x03},
  190. {CC120X_PKT_CFG1, 0x00},
  191. {CC120X_PKT_CFG0, 0x20},
  192. {CC120X_PA_CFG1, 0x3F},
  193. {CC120X_PKT_LEN, 0xFF},
  194. {CC120X_IF_MIX_CFG, 0x1C},
  195. {CC120X_FREQOFF_CFG, 0x22},
  196. {CC120X_MDMCFG2, 0x0D},
  197. {CC120X_FREQ2, 0x56},
  198. {CC120X_FREQ1, 0xA2},
  199. {CC120X_FREQ0, 0x4C},
  200. {CC120X_IF_ADC1, 0xEE},
  201. {CC120X_IF_ADC0, 0x10},
  202. {CC120X_FS_DIG1, 0x07},
  203. {CC120X_FS_DIG0, 0xAF},
  204. {CC120X_FS_CAL1, 0x40},
  205. {CC120X_FS_CAL0, 0x0E},
  206. {CC120X_FS_DIVTWO, 0x03},
  207. {CC120X_FS_DSM0, 0x33},
  208. {CC120X_FS_DVC0, 0x17},
  209. {CC120X_FS_PFD, 0x00},
  210. {CC120X_FS_PRE, 0x6E},
  211. {CC120X_FS_REG_DIV_CML, 0x1C},
  212. {CC120X_FS_SPARE, 0xAC},
  213. {CC120X_FS_VCO0, 0xB5},
  214. {CC120X_XOSC5, 0x0E},
  215. {CC120X_XOSC1, 0x03},
  216. {CC120X_SERIAL_STATUS, 0x08},
  217. };
  218. // Address Config = No address check
  219. // Bit Rate = 1.2
  220. // Carrier Frequency = 144.389954
  221. // Deviation = 4.997253
  222. // Device Address = 0
  223. // Manchester Enable = false
  224. // Modulation Format = 2-FSK
  225. // Packet Bit Length = 0
  226. // Packet Length = 255
  227. // Packet Length Mode = Variable
  228. // RX Filter BW = 14.880952
  229. // Symbol rate = 1.2
  230. // Whitening = false
  231. static const cc1200_reg_settings_t APRS_TX2_SETTINGS[]=
  232. {
  233. {CC120X_IOCFG2, 0x08},
  234. {CC120X_IOCFG0, 0x09},
  235. {CC120X_SYNC_CFG1, 0x0B},
  236. {CC120X_MODCFG_DEV_E, 0x01},
  237. {CC120X_DCFILT_CFG, 0x5D},
  238. {CC120X_PREAMBLE_CFG1, 0x00},
  239. {CC120X_PREAMBLE_CFG0, 0x8A},
  240. {CC120X_IQIC, 0xCB},
  241. {CC120X_CHAN_BW, 0x9C},
  242. {CC120X_MDMCFG1, 0x06},
  243. {CC120X_MDMCFG0, 0x45},
  244. {CC120X_SYMBOL_RATE2, 0x3F},
  245. {CC120X_SYMBOL_RATE1, 0x75},
  246. {CC120X_SYMBOL_RATE0, 0x10},
  247. {CC120X_AGC_REF, 0x30},
  248. {CC120X_AGC_CS_THR, 0xEC},
  249. {CC120X_AGC_CFG1, 0x51},
  250. {CC120X_AGC_CFG0, 0x87},
  251. {CC120X_FIFO_CFG, 0x00},
  252. {CC120X_FS_CFG, 0x1B},
  253. {CC120X_PKT_CFG2, 0x03},
  254. {CC120X_PKT_CFG1, 0x00},
  255. {CC120X_PKT_CFG0, 0x20},
  256. {CC120X_PA_CFG1, 0x3F},
  257. {CC120X_PKT_LEN, 0xFF},
  258. {CC120X_IF_MIX_CFG, 0x1C},
  259. {CC120X_FREQOFF_CFG, 0x22},
  260. {CC120X_MDMCFG2, 0x0D},
  261. {CC120X_FREQ2, 0x56},
  262. {CC120X_FREQ1, 0xA2},
  263. {CC120X_FREQ0, 0x4C},
  264. {CC120X_IF_ADC1, 0xEE},
  265. {CC120X_IF_ADC0, 0x10},
  266. {CC120X_FS_DIG1, 0x07},
  267. {CC120X_FS_DIG0, 0xAF},
  268. {CC120X_FS_CAL1, 0x40},
  269. {CC120X_FS_CAL0, 0x0E},
  270. {CC120X_FS_DIVTWO, 0x03},
  271. {CC120X_FS_DSM0, 0x33},
  272. {CC120X_FS_DVC0, 0x17},
  273. {CC120X_FS_PFD, 0x00},
  274. {CC120X_FS_PRE, 0x6E},
  275. {CC120X_FS_REG_DIV_CML, 0x1C},
  276. {CC120X_FS_SPARE, 0xAC},
  277. {CC120X_FS_VCO0, 0xB5},
  278. {CC120X_XOSC5, 0x0E},
  279. {CC120X_XOSC1, 0x03},
  280. {CC120X_SERIAL_STATUS, 0x08},
  281. };