#ifndef __FM175XX_H__ #define __FM175XX_H__ #ifdef __cplusplus extern "C" { #endif /******************************************************************************/ /* Include files */ /******************************************************************************/ #include "user_nfc.h" #include #include #define BIT7 0x80 #define BIT6 0x40 #define BIT5 0x20 #define BIT4 0x10 #define BIT3 0x08 #define BIT2 0x04 #define BIT1 0x02 #define BIT0 0x01 #define Anticollision 0x02 /* 寄存器地址宏定义 */ #define CommandReg 0x01 #define ComIEnReg 0x02 #define DivIEnReg 0x03 #define ComIrqReg 0x04 #define DivIrqReg 0x05 #define ErrorReg 0x06 #define Status1Reg 0x07 #define Status2Reg 0x08 #define FIFODataReg 0x09 #define FIFOLevelReg 0x0A #define WaterLevelReg 0x0B #define ControlReg 0x0C #define BitFramingReg 0x0D #define CollReg 0x0E #define ModeReg 0x11 #define TxModeReg 0x12 #define RxModeReg 0x13 #define TxControlReg 0x14 #define TxAutoReg 0x15 #define TxSelReg 0x16 #define RxSelReg 0x17 #define RxThresholdReg 0x18 #define DemodReg 0x19 #define MfTxReg 0x1C #define MfRxReg 0x1D #define SerialSpeedReg 0x1F #define CRCMSBReg 0x21 #define CRCLSBReg 0x22 #define ModWidthReg 0x24 #define GsNOffReg 0x23 #define TxBitPhaseReg 0x25 #define RFCfgReg 0x26 #define GsNOnReg 0x27 #define CWGsPReg 0x28 #define ModGsPReg 0x29 #define TModeReg 0x2A #define TPrescalerReg 0x2B #define TReloadMSBReg 0x2C #define TReloadLSBReg 0x2D #define TCounterValMSBReg 0x2E #define TCounterValLSBReg 0x2F #define TestSel1Reg 0x31 #define TestSel2Reg 0x32 #define TestPinEnReg 0x33 #define TestPinValueReg 0x34 #define TestBusReg 0x35 #define AutoTestReg 0x36 #define VersionReg 0x37 #define AnalogTestReg 0x38 #define TestDAC1Reg 0x39 #define TestDAC2Reg 0x3A #define TestADCReg 0x3B /* 指令集宏定义 */ #define Idle 0x00 /* 无动作,取消当前指令执行 */ #define Mem 0x01 /* 配置FM17550为FeliCa、MIFARE和NFCIP-1通讯模式 */ #define RandomID 0x02 /* 产生一个10字节随机数 */ #define CalcCRC 0x03 /* 激活CRC协处理器 */ #define Transmit 0x04 /* 发射FIFO缓冲器中的数据 */ #define NoCmdChange 0x07 /* 指令不改变,可以用来在不影响指令的情况下修改CommandReg寄存器,比如PowerDown位 */ #define Receive 0x08 /* 激活接收器电路 */ #define Transceive 0x0C /* 发射FIFO缓冲器中的数据到天线,并在发射后自动激活接收器 */ #define MFAuthent 0x0E /* 作为读写器模式执行MIFARE标准安全认证 密钥验证 */ #define SoftReset 0x0F /* 复位FM17550 */ //发射参数设置 #define MODWIDTH_106 0x26 //默认设置为 0x26 ,0x26 = 106K,0x13 = 212K, 0x09 = 424K ,0x04 = 848K #define MODWIDTH_212 0x13 #define MODWIDTH_424 0x09 #define MODWIDTH_848 0x04 //接收参数配置 //TYPE A #define RXGAIN_A 4 //设置范围0~7 #define GSNON_A 15 //设置范围0~15 #define GSP_A 31 //设置范围0~63 #define COLLLEVEL_A 4 //设置范围0~7 #define MINLEVEL_A 5 //设置范围0~15 //#define RXWAIT 4 //设置范围0~63 //#define UARTSEL 2 //默认设置为2 设置范围0~3 0:固定低电平 1:TIN包络信号 2:内部接收信号 3:TIN调制信号 //TYPE B #define RXGAIN_B 6 //设置范围0~7 #define GSNON_B 15 //设置范围0~15 #define MODGSNON_B 6 //设置范围0~15 #define GSP_B 31 //设置范围0~63 #define MODGSP_B 10 //设置范围0~63 #define MINLEVEL_B 4 //设置范围0~15 #define Int_idle 0 #define Int_LPCD 1 #define Int_Read_Card 2 #define Int_Card_Func 3 // #define BIT0 0x01 // #define BIT1 0x02 // #define BIT2 0x04 // #define BIT3 0x08 // #define BIT4 0x10 // #define BIT5 0x20 // #define BIT6 0x40 // #define BIT7 0x80 //============================================================================ #define JREG_EXT_REG_ENTRANCE 0x0F //ext register entrance //============================================================================ #define JBIT_EXT_REG_WR_ADDR 0X40 //wrire address cycle #define JBIT_EXT_REG_RD_ADDR 0X80 //read address cycle #define JBIT_EXT_REG_WR_DATA 0XC0 //write data cycle #define JBIT_EXT_REG_RD_DATA 0X00 //read data cycle //============================================================================ #define JREG_LVD_CTRL 0x1D //Low Votage Detect register //============================================================================ //============================================================================ #define JREG_LPCD_CTRL1 0x01 //Lpcd Ctrl register1 //============================================================================ #define JBIT_LPCD_EN 0x01 //enble LPCD #define JBIT_LPCD_RSTN 0X02 //lpcd reset #define JBIT_LPCD_CALIBRATE_EN 0x04 //into lpcd calibra mode #define JBIT_LPCD_SENSE_1 0x08 //Compare times 1 or 3 #define JBIT_LPCD_IE 0x10 //Enable LPCD IE #define JBIT_BIT_CTRL_SET 0x20 //Lpcd register Bit ctrl set bit #define JBIT_BIT_CTRL_CLR 0x00 //Lpcd register Bit ctrl clear bit //============================================================================ //============================================================================ #define JREG_LPCD_CTRL2 0x02 //Lpcd Ctrl register2 //============================================================================ //============================================================================ #define JREG_LPCD_CTRL3 0x03 //Lpcd Ctrl register3 //============================================================================ //============================================================================ //============================================================================ #define JREG_LPCD_CTRL4 0x04 //Lpcd Ctrl register4 //============================================================================ //============================================================================ //============================================================================ #define JREG_LPCD_BIAS_CURRENT 0x05 //Lpcd bias current register //============================================================================ //============================================================================ #define JREG_LPCD_ADC_REFERECE 0x06 //Lpcd adc reference register //============================================================================ //============================================================================ #define JREG_LPCD_T1CFG 0x07 //T1Cfg[3:0] register //============================================================================ //============================================================================ #define JREG_LPCD_T2CFG 0x08 //T2Cfg[4:0] register //============================================================================ //============================================================================ #define JREG_LPCD_T3CFG 0x09 //T2Cfg[4:0] register //============================================================================ //============================================================================ #define JREG_LPCD_VMIDBD_CFG 0x0A //VmidBdCfg[4:0] register //============================================================================ //============================================================================ #define JREG_LPCD_AUTO_WUP_CFG 0x0B //Auto_Wup_Cfg register //============================================================================ //============================================================================ #define JREG_LPCD_ADC_RESULT_L 0x0C //ADCResult[5:0] Register //============================================================================ //============================================================================ #define JREG_LPCD_ADC_RESULT_H 0x0D //ADCResult[7:6] Register //============================================================================ //============================================================================ #define JREG_LPCD_THRESHOLD_MIN_L 0x0E //LpcdThreshold_L[5:0] Register //============================================================================ //============================================================================ #define JREG_LPCD_THRESHOLD_MIN_H 0x0F //LpcdThreshold_L[7:6] Register //============================================================================ //============================================================================ #define JREG_LPCD_THRESHOLD_MAX_L 0x10 //LpcdThreshold_H[5:0] Register //============================================================================ //============================================================================ #define JREG_LPCD_THRESHOLD_MAX_H 0x11 //LpcdThreshold_H[7:6] Register //============================================================================ //============================================================================ #define JREG_LPCD_IRQ 0x12 //LpcdStatus Register //============================================================================ #define JBIT_CARD_IN_IRQ 0x01 //irq of card in #define JBIT_LPCD23_IRQ 0x02 //irq of LPCD 23 end #define JBIT_CALIBRATE_IRQ 0x04 //irq of calib end #define JBIT_LP10K_TESTOK_IRQ 0x08 //irq of lp osc 10K ok #define JBIT_AUTO_WUP_IRQ 0x10 //irq of Auto wake up //============================================================================ //============================================================================ #define JREG_LPCD_RFT1 0x13 //Aux1 select Register //============================================================================ //#define BFL_JBIT_AUX1_CLOSE 0x00 //close aux1 out //#define BFL_JBIT_AUX1_VDEM_LPCD 0x01 //vdem of lpcd //#define BFL_JBIT_AUX1_VP_LPCD 0x02 //voltage of charecap //============================================================================ //============================================================================ #define JREG_LPCD_RFT2 0x14 //Aux2 select Register //============================================================================ //#define BFL_JBIT_AUX2_CLOSE 0x00 //close aux1 out //#define BFL_JBIT_AUX2_VDEM_LPCD 0x01 //vdem of lpcd //#define BFL_JBIT_AUX2_VP_LPCD 0x02 //voltage of charecap //============================================================================ //============================================================================ #define JREG_LPCD_RFT3 0x15 //LPCD test1 Register //============================================================================ //#define BFL_JBIT_LP_OSC10K_EN 0x01 //enable lp osc10k //#define BFL_JBIT_LP_OSC_CALIBRA_EN 0x02 //enable lp osc10k calibra mode //#define BFL_JBIT_LP_CURR_TEST 0x04 //enable lp t1 current test //#define BFL_JBIT_LPCD_TEST2_LPCD_OUT 0x08 //lpcd_test2[3]:LPCD_OUT //============================================================================ //============================================================================ #define JREG_LPCD_RFT4 0x16 //LPCD test2 Register //============================================================================ //#define BFL_JBIT_T1_OUT_EN 0x01 //D5:T1_OUT //#define BFL_JBIT_OSCCLK_OUT_EN 0x02 //D4:OSC_CLK_OUT //#define BFL_JBIT_OSCEN_OUT_EN 0x04 //D3:OSC_EN //#define BFL_JBIT_LP_CLK_LPCD_OUT_EN 0x08 //D2:LP_CLK or LPCD_OUT //#define BFL_JBIT_T3_OUT_EN 0x10 //D1:T3_OUT //============================================================================ //============================================================================ //#define BFL_JREG_LP_CLK_CNT1 0x17 //lp_clk_cnt[5:0] Register //============================================================================ //============================================================================ //#define BFL_JREG_LP_CLK_CNT2 0x18 //lp_clk_cnt[7:6] Register //============================================================================ //============================================================================ //#define BFL_JREG_VERSIONREG2 0x19 //VersionReg2[1:0] Register //============================================================================ //============================================================================ //#define BFL_JREG_IRQ_BAK 0x1A //Irq bak Register //============================================================================ //#define BFL_JBIT_IRQ_INV_BAK 0x01 //Irq Inv backup //#define BFL_JBIT_IRQ_PUSHPULL_BAK 0x02 //Irq pushpull backup //============================================================================ //============================================================================ #define JREG_LPCD_RFT5 0x1B //LPCD TEST3 Register //============================================================================ //#define BFL_JBIT_LPCD_TESTEN 0x01 //lPCD test mode //#define BFL_JBIT_AWUP_TSEL 0x02 //Auto wakeup test mode //#define BFL_JBIT_RNG_MODE_SEL 0x04 //RNG mode sel //#define BFL_JBIT_USE_RET 0x08 //use retention mode //============================================================================ //============================================================================ #define JREG_LPCD_MISC 0x1C //LPCD Misc Register //============================================================================ #define BFL_JBIT_CALIBRATE_VMID_EN 0x01 //lPCD test mode #define BFL_JBIT_AMP_EN_SEL 0x04 //LPCD amp en select //============================================================================ bool FM175XX_Test(void); void FM175XX_Initial(void); uint8_t SetReg(uint8_t reg_add,uint8_t ucRegVal); uint8_t GetReg(uint8_t reg_add,uint8_t *regData); uint8_t Read_Reg(uint8_t reg_addr); bool Read_Reg_All(uint8_t *reg_value); bool Write_Reg(uint8_t reg_addr, uint8_t reg_value); void Read_FIFO(uint8_t length, uint8_t *fifo_data); void Write_FIFO(uint8_t length, uint8_t *fifo_data); bool Clear_FIFO(void); bool Set_BitMask(uint8_t reg_addr, uint8_t mask); bool Clear_BitMask(uint8_t reg_addr, uint8_t mask); uint8_t Read_Ext_Reg(uint8_t reg_add); bool Write_Ext_Reg(uint8_t reg_add, uint8_t reg_value); bool ModifyReg_Ext(uint8_t ExtRegAddr, uint8_t mask, uint8_t set); bool Get_FIFODataLenth(uint8_t *FIFOLen,uint8_t *LastBitsLen,uint32_t *pRecBitsLen); bool Set_Rf(uint8_t mode); bool Pcd_Comm(uint8_t Command, uint8_t *pInData, uint8_t InLenByte, uint8_t *pOutData, uint32_t *pOutLenBit); bool Pcd_SetTimer(uint32_t delaytime); bool Pcd_ConfigISOType(uint8_t type); void FM175X_SoftReset(void); bool FM175X_SoftPowerdown(void); #ifdef __cplusplus } #endif #endif /* __FM175XX_H__ */