FM17550读不到身份证UID的问题

项目需要读身份证UID,用的是复旦微FM17550芯片,这款芯片封装是QFN32,管脚兼容RC522、SI522。 RC522只支持ISO/IEC-14443-A类卡片, FM17550同时支持A类和B类,身份证是ISO/IEC-14443-B类卡片。

软件驱动用的是复亘微官方提供的DEMO程序,该程序是基于STM32F103平台。 简单更换GPIO和SPI接口后,移植到STM32F429平台。 测试能读到A类卡的UID,但刷身份证没有反应,ReaderB_Request返回244(FM175XX_TIMER_ERR),表示请求超时。

经过一番摸索后,修改JREG_GSN和JREG_MODGSP寄存器解决问题。 初始化B类接收器的代码如下:


void FM175XX_Initial_ReaderB(void)
{
	ModifyReg(JREG_STATUS2,BIT3,RESET);
	SetReg(JREG_TXMODE,BIT7|BIT1|BIT0);//BIT1~0 = 11 :ISO/IEC 14443B
	SetReg(JREG_RXMODE,BIT7|BIT1|BIT0);//BIT1~0 = 11 :ISO/IEC 14443B
	SetReg(JREG_TXAUTO,0);
	SetReg(JREG_MODWIDTH,0x26);
	SetReg(JREG_RXTRESHOLD,0x55);
	SetReg(JREG_GSN,0xF8);  //低4位值越小,调制度越深,原值是0xF8未修改。
	SetReg(JREG_CWGSP,0x3F);
	SetReg(JREG_MODGSP,0x08); //低6位值越小,调制度越深。原值是0x20读不到身份证。
	SetReg(JREG_CONTROL,0x10);
	SetReg(JREG_RFCFG,0x48);
	return;
}

经过上面的修改后,刷身份证可以成功识别到了,但是还不能读UID。 因为身份证不是标准的B类卡,需要使用下面的流程读取UID:


1. REQB
: 05 00 00
: 50 00 00 00 00 d1 03 86 0c 00 80 80

2. ATTRIB
: 1d 00 00 00 00 00 08 01 08
: 08

3. UID
: 00 36 00 00 08
: xx xx xx xx xx xx xx xx 90 00
UID是前面8个字节