fm175xx.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. #ifndef __FM175XX_H__
  2. #define __FM175XX_H__
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. /******************************************************************************/
  7. /* Include files */
  8. /******************************************************************************/
  9. #include "user_nfc.h"
  10. #include <stdint.h>
  11. #include <stdbool.h>
  12. #define BIT7 0x80
  13. #define BIT6 0x40
  14. #define BIT5 0x20
  15. #define BIT4 0x10
  16. #define BIT3 0x08
  17. #define BIT2 0x04
  18. #define BIT1 0x02
  19. #define BIT0 0x01
  20. #define Anticollision 0x02
  21. /* 寄存器地址宏定义 */
  22. #define CommandReg 0x01
  23. #define ComIEnReg 0x02
  24. #define DivIEnReg 0x03
  25. #define ComIrqReg 0x04
  26. #define DivIrqReg 0x05
  27. #define ErrorReg 0x06
  28. #define Status1Reg 0x07
  29. #define Status2Reg 0x08
  30. #define FIFODataReg 0x09
  31. #define FIFOLevelReg 0x0A
  32. #define WaterLevelReg 0x0B
  33. #define ControlReg 0x0C
  34. #define BitFramingReg 0x0D
  35. #define CollReg 0x0E
  36. #define ModeReg 0x11
  37. #define TxModeReg 0x12
  38. #define RxModeReg 0x13
  39. #define TxControlReg 0x14
  40. #define TxAutoReg 0x15
  41. #define TxSelReg 0x16
  42. #define RxSelReg 0x17
  43. #define RxThresholdReg 0x18
  44. #define DemodReg 0x19
  45. #define MfTxReg 0x1C
  46. #define MfRxReg 0x1D
  47. #define SerialSpeedReg 0x1F
  48. #define CRCMSBReg 0x21
  49. #define CRCLSBReg 0x22
  50. #define ModWidthReg 0x24
  51. #define GsNOffReg 0x23
  52. #define TxBitPhaseReg 0x25
  53. #define RFCfgReg 0x26
  54. #define GsNOnReg 0x27
  55. #define CWGsPReg 0x28
  56. #define ModGsPReg 0x29
  57. #define TModeReg 0x2A
  58. #define TPrescalerReg 0x2B
  59. #define TReloadMSBReg 0x2C
  60. #define TReloadLSBReg 0x2D
  61. #define TCounterValMSBReg 0x2E
  62. #define TCounterValLSBReg 0x2F
  63. #define TestSel1Reg 0x31
  64. #define TestSel2Reg 0x32
  65. #define TestPinEnReg 0x33
  66. #define TestPinValueReg 0x34
  67. #define TestBusReg 0x35
  68. #define AutoTestReg 0x36
  69. #define VersionReg 0x37
  70. #define AnalogTestReg 0x38
  71. #define TestDAC1Reg 0x39
  72. #define TestDAC2Reg 0x3A
  73. #define TestADCReg 0x3B
  74. /* 指令集宏定义 */
  75. #define Idle 0x00 /* 无动作,取消当前指令执行 */
  76. #define Mem 0x01 /* 配置FM17550为FeliCa、MIFARE和NFCIP-1通讯模式 */
  77. #define RandomID 0x02 /* 产生一个10字节随机数 */
  78. #define CalcCRC 0x03 /* 激活CRC协处理器 */
  79. #define Transmit 0x04 /* 发射FIFO缓冲器中的数据 */
  80. #define NoCmdChange 0x07 /* 指令不改变,可以用来在不影响指令的情况下修改CommandReg寄存器,比如PowerDown位 */
  81. #define Receive 0x08 /* 激活接收器电路 */
  82. #define Transceive 0x0C /* 发射FIFO缓冲器中的数据到天线,并在发射后自动激活接收器 */
  83. #define MFAuthent 0x0E /* 作为读写器模式执行MIFARE标准安全认证 密钥验证 */
  84. #define SoftReset 0x0F /* 复位FM17550 */
  85. //发射参数设置
  86. #define MODWIDTH_106 0x26 //默认设置为 0x26 ,0x26 = 106K,0x13 = 212K, 0x09 = 424K ,0x04 = 848K
  87. #define MODWIDTH_212 0x13
  88. #define MODWIDTH_424 0x09
  89. #define MODWIDTH_848 0x04
  90. //接收参数配置
  91. //TYPE A
  92. #define RXGAIN_A 4 //设置范围0~7
  93. #define GSNON_A 15 //设置范围0~15
  94. #define GSP_A 31 //设置范围0~63
  95. #define COLLLEVEL_A 4 //设置范围0~7
  96. #define MINLEVEL_A 5 //设置范围0~15
  97. //#define RXWAIT 4 //设置范围0~63
  98. //#define UARTSEL 2 //默认设置为2 设置范围0~3 0:固定低电平 1:TIN包络信号 2:内部接收信号 3:TIN调制信号
  99. //TYPE B
  100. #define RXGAIN_B 6 //设置范围0~7
  101. #define GSNON_B 15 //设置范围0~15
  102. #define MODGSNON_B 6 //设置范围0~15
  103. #define GSP_B 31 //设置范围0~63
  104. #define MODGSP_B 10 //设置范围0~63
  105. #define MINLEVEL_B 4 //设置范围0~15
  106. #define Int_idle 0
  107. #define Int_LPCD 1
  108. #define Int_Read_Card 2
  109. #define Int_Card_Func 3
  110. // #define BIT0 0x01
  111. // #define BIT1 0x02
  112. // #define BIT2 0x04
  113. // #define BIT3 0x08
  114. // #define BIT4 0x10
  115. // #define BIT5 0x20
  116. // #define BIT6 0x40
  117. // #define BIT7 0x80
  118. //============================================================================
  119. #define JREG_EXT_REG_ENTRANCE 0x0F //ext register entrance
  120. //============================================================================
  121. #define JBIT_EXT_REG_WR_ADDR 0X40 //wrire address cycle
  122. #define JBIT_EXT_REG_RD_ADDR 0X80 //read address cycle
  123. #define JBIT_EXT_REG_WR_DATA 0XC0 //write data cycle
  124. #define JBIT_EXT_REG_RD_DATA 0X00 //read data cycle
  125. //============================================================================
  126. #define JREG_LVD_CTRL 0x1D //Low Votage Detect register
  127. //============================================================================
  128. //============================================================================
  129. #define JREG_LPCD_CTRL1 0x01 //Lpcd Ctrl register1
  130. //============================================================================
  131. #define JBIT_LPCD_EN 0x01 //enble LPCD
  132. #define JBIT_LPCD_RSTN 0X02 //lpcd reset
  133. #define JBIT_LPCD_CALIBRATE_EN 0x04 //into lpcd calibra mode
  134. #define JBIT_LPCD_SENSE_1 0x08 //Compare times 1 or 3
  135. #define JBIT_LPCD_IE 0x10 //Enable LPCD IE
  136. #define JBIT_BIT_CTRL_SET 0x20 //Lpcd register Bit ctrl set bit
  137. #define JBIT_BIT_CTRL_CLR 0x00 //Lpcd register Bit ctrl clear bit
  138. //============================================================================
  139. //============================================================================
  140. #define JREG_LPCD_CTRL2 0x02 //Lpcd Ctrl register2
  141. //============================================================================
  142. //============================================================================
  143. #define JREG_LPCD_CTRL3 0x03 //Lpcd Ctrl register3
  144. //============================================================================
  145. //============================================================================
  146. //============================================================================
  147. #define JREG_LPCD_CTRL4 0x04 //Lpcd Ctrl register4
  148. //============================================================================
  149. //============================================================================
  150. //============================================================================
  151. #define JREG_LPCD_BIAS_CURRENT 0x05 //Lpcd bias current register
  152. //============================================================================
  153. //============================================================================
  154. #define JREG_LPCD_ADC_REFERECE 0x06 //Lpcd adc reference register
  155. //============================================================================
  156. //============================================================================
  157. #define JREG_LPCD_T1CFG 0x07 //T1Cfg[3:0] register
  158. //============================================================================
  159. //============================================================================
  160. #define JREG_LPCD_T2CFG 0x08 //T2Cfg[4:0] register
  161. //============================================================================
  162. //============================================================================
  163. #define JREG_LPCD_T3CFG 0x09 //T2Cfg[4:0] register
  164. //============================================================================
  165. //============================================================================
  166. #define JREG_LPCD_VMIDBD_CFG 0x0A //VmidBdCfg[4:0] register
  167. //============================================================================
  168. //============================================================================
  169. #define JREG_LPCD_AUTO_WUP_CFG 0x0B //Auto_Wup_Cfg register
  170. //============================================================================
  171. //============================================================================
  172. #define JREG_LPCD_ADC_RESULT_L 0x0C //ADCResult[5:0] Register
  173. //============================================================================
  174. //============================================================================
  175. #define JREG_LPCD_ADC_RESULT_H 0x0D //ADCResult[7:6] Register
  176. //============================================================================
  177. //============================================================================
  178. #define JREG_LPCD_THRESHOLD_MIN_L 0x0E //LpcdThreshold_L[5:0] Register
  179. //============================================================================
  180. //============================================================================
  181. #define JREG_LPCD_THRESHOLD_MIN_H 0x0F //LpcdThreshold_L[7:6] Register
  182. //============================================================================
  183. //============================================================================
  184. #define JREG_LPCD_THRESHOLD_MAX_L 0x10 //LpcdThreshold_H[5:0] Register
  185. //============================================================================
  186. //============================================================================
  187. #define JREG_LPCD_THRESHOLD_MAX_H 0x11 //LpcdThreshold_H[7:6] Register
  188. //============================================================================
  189. //============================================================================
  190. #define JREG_LPCD_IRQ 0x12 //LpcdStatus Register
  191. //============================================================================
  192. #define JBIT_CARD_IN_IRQ 0x01 //irq of card in
  193. #define JBIT_LPCD23_IRQ 0x02 //irq of LPCD 23 end
  194. #define JBIT_CALIBRATE_IRQ 0x04 //irq of calib end
  195. #define JBIT_LP10K_TESTOK_IRQ 0x08 //irq of lp osc 10K ok
  196. #define JBIT_AUTO_WUP_IRQ 0x10 //irq of Auto wake up
  197. //============================================================================
  198. //============================================================================
  199. #define JREG_LPCD_RFT1 0x13 //Aux1 select Register
  200. //============================================================================
  201. //#define BFL_JBIT_AUX1_CLOSE 0x00 //close aux1 out
  202. //#define BFL_JBIT_AUX1_VDEM_LPCD 0x01 //vdem of lpcd
  203. //#define BFL_JBIT_AUX1_VP_LPCD 0x02 //voltage of charecap
  204. //============================================================================
  205. //============================================================================
  206. #define JREG_LPCD_RFT2 0x14 //Aux2 select Register
  207. //============================================================================
  208. //#define BFL_JBIT_AUX2_CLOSE 0x00 //close aux1 out
  209. //#define BFL_JBIT_AUX2_VDEM_LPCD 0x01 //vdem of lpcd
  210. //#define BFL_JBIT_AUX2_VP_LPCD 0x02 //voltage of charecap
  211. //============================================================================
  212. //============================================================================
  213. #define JREG_LPCD_RFT3 0x15 //LPCD test1 Register
  214. //============================================================================
  215. //#define BFL_JBIT_LP_OSC10K_EN 0x01 //enable lp osc10k
  216. //#define BFL_JBIT_LP_OSC_CALIBRA_EN 0x02 //enable lp osc10k calibra mode
  217. //#define BFL_JBIT_LP_CURR_TEST 0x04 //enable lp t1 current test
  218. //#define BFL_JBIT_LPCD_TEST2_LPCD_OUT 0x08 //lpcd_test2[3]:LPCD_OUT
  219. //============================================================================
  220. //============================================================================
  221. #define JREG_LPCD_RFT4 0x16 //LPCD test2 Register
  222. //============================================================================
  223. //#define BFL_JBIT_T1_OUT_EN 0x01 //D5:T1_OUT
  224. //#define BFL_JBIT_OSCCLK_OUT_EN 0x02 //D4:OSC_CLK_OUT
  225. //#define BFL_JBIT_OSCEN_OUT_EN 0x04 //D3:OSC_EN
  226. //#define BFL_JBIT_LP_CLK_LPCD_OUT_EN 0x08 //D2:LP_CLK or LPCD_OUT
  227. //#define BFL_JBIT_T3_OUT_EN 0x10 //D1:T3_OUT
  228. //============================================================================
  229. //============================================================================
  230. //#define BFL_JREG_LP_CLK_CNT1 0x17 //lp_clk_cnt[5:0] Register
  231. //============================================================================
  232. //============================================================================
  233. //#define BFL_JREG_LP_CLK_CNT2 0x18 //lp_clk_cnt[7:6] Register
  234. //============================================================================
  235. //============================================================================
  236. //#define BFL_JREG_VERSIONREG2 0x19 //VersionReg2[1:0] Register
  237. //============================================================================
  238. //============================================================================
  239. //#define BFL_JREG_IRQ_BAK 0x1A //Irq bak Register
  240. //============================================================================
  241. //#define BFL_JBIT_IRQ_INV_BAK 0x01 //Irq Inv backup
  242. //#define BFL_JBIT_IRQ_PUSHPULL_BAK 0x02 //Irq pushpull backup
  243. //============================================================================
  244. //============================================================================
  245. #define JREG_LPCD_RFT5 0x1B //LPCD TEST3 Register
  246. //============================================================================
  247. //#define BFL_JBIT_LPCD_TESTEN 0x01 //lPCD test mode
  248. //#define BFL_JBIT_AWUP_TSEL 0x02 //Auto wakeup test mode
  249. //#define BFL_JBIT_RNG_MODE_SEL 0x04 //RNG mode sel
  250. //#define BFL_JBIT_USE_RET 0x08 //use retention mode
  251. //============================================================================
  252. //============================================================================
  253. #define JREG_LPCD_MISC 0x1C //LPCD Misc Register
  254. //============================================================================
  255. #define BFL_JBIT_CALIBRATE_VMID_EN 0x01 //lPCD test mode
  256. #define BFL_JBIT_AMP_EN_SEL 0x04 //LPCD amp en select
  257. //============================================================================
  258. bool FM175XX_Test(void);
  259. void FM175XX_Initial(void);
  260. uint8_t SetReg(uint8_t reg_add,uint8_t ucRegVal);
  261. uint8_t GetReg(uint8_t reg_add,uint8_t *regData);
  262. uint8_t Read_Reg(uint8_t reg_addr);
  263. bool Read_Reg_All(uint8_t *reg_value);
  264. bool Write_Reg(uint8_t reg_addr, uint8_t reg_value);
  265. void Read_FIFO(uint8_t length, uint8_t *fifo_data);
  266. void Write_FIFO(uint8_t length, uint8_t *fifo_data);
  267. bool Clear_FIFO(void);
  268. bool Set_BitMask(uint8_t reg_addr, uint8_t mask);
  269. bool Clear_BitMask(uint8_t reg_addr, uint8_t mask);
  270. uint8_t Read_Ext_Reg(uint8_t reg_add);
  271. bool Write_Ext_Reg(uint8_t reg_add, uint8_t reg_value);
  272. bool ModifyReg_Ext(uint8_t ExtRegAddr, uint8_t mask, uint8_t set);
  273. bool Get_FIFODataLenth(uint8_t *FIFOLen,uint8_t *LastBitsLen,uint32_t *pRecBitsLen);
  274. bool Set_Rf(uint8_t mode);
  275. bool Pcd_Comm(uint8_t Command,
  276. uint8_t *pInData,
  277. uint8_t InLenByte,
  278. uint8_t *pOutData,
  279. uint32_t *pOutLenBit);
  280. bool Pcd_SetTimer(uint32_t delaytime);
  281. bool Pcd_ConfigISOType(uint8_t type);
  282. void FM175X_SoftReset(void);
  283. bool FM175X_SoftPowerdown(void);
  284. #ifdef __cplusplus
  285. }
  286. #endif
  287. #endif /* __FM175XX_H__ */