我正在使用 clrc663 作为读卡器我在那里实现了 lpcd 模式我在运行 lpcd 校准功能时遇到了问题我得到了 i 而且 q 值是 0x00 我从天线得到的是什么问题怎么解决这个问题
我使用的这个函数
/* ------------------------------------------------------------------
* 开机后运行一次 LPCD 校准
* ------------------------------------------------------------------ */
phStatus_t LPCD_Calibrate(void)
{
phStatus_t status;
uint32_t refVal;
char dbg_buf[64];
// 确保在校准前开启 RF
phhalHw_FieldOn(pHal);
phhalHw_Wait(pHal,PHHAL_HW_TIME_MILLISECONDS,5);
status = Calibrate_LPCD(LPCD_DEMO_MODE_DEFAULT,&refVal);
// 校准后关闭射频
phhalHw_FieldOff(pHal);
if (status == PH_ERR_SUCCESS)
{
gLpcdValueI = (uint8_t)(refVal& 0xFF);
gLpcdValueQ = (uint8_t)((refVal 0xFF)); gLpcdValueQ = (uint8_t)((refVal 0xFF)).>>
gLpcdCalibrated = 1;
sprintf(dbg_buf,"LPCD Calibration OK (I=0x%02X, Q=0x%02X)\r\n",
gLpcdValueI, gLpcdValueQ);
DEBUG_UART2((unsigned char*)dbg_buf, strlen(dbg_buf));
}
else
{
DEBUG_UART2((unsigned char*)"LPCD Calibration FAILED\r\n", 28);
}
return status;
}
您好,先生,
非常感谢您与我们分享您的示意图。不过,我还是要问一下你们天线的史密斯图。我们确实有一份应用笔记,其中显示了使用廉价的纳米VNA进行这些测量的步骤。
我在这里附上我的硬件测试和原理图,在正常模式下,我得到的是 uid,这不是问题;在 lpcd 模式下,我得到的是 0x00,0x00 的 q 值。在此查看我的测试文件。
抱歉,但是对自定义板的支持非常有限。
要提供任何具体信息,我需要您的硬件,因为评估套件的天线设置配置与您的配置存在很大差异。
不过,您是否介意分享一下天线的史密斯图和原理图,这将是我们提供良好建议的一个很好的起点。
正如我在上一篇文章中提到的那样,我们建议从一开始就遵循一些步骤。其中之一是将我们的 EVK 与您的新天线和新的匹配电路一起使用。所有这些都显示在我们的许多文档中。请看 NFC天线设计|恩智浦半导体视频2。
发送 RF 开启命令后,I 和 Q 值应显示与 0x0 不同的值。
我使用的是带有 stm32 硬件的定制 PCB Clrc663,只有在软件中天线调谐是正确的,我使用了 nfcrdlibEx6_rc663_LPCD_Demo.c 库中的校准演示代码,但 i 和 q 值均为 0x00,然后我使用错误寄存器来确定我在其中出现了什么错误。
printf debug i getting
=== EEPROM / LPCD 检查开始 ===
VERSION(0x7F)=0x1A
ERROR(before)=0x00
ERROR(after LOADREG)=0x80
> > > EEPROM 错误 (0x80) 仍然存在。LPCD 可能无法正确校准!
=== EEPROM / LPCD 检查完成 ===
// 这是代码
phStatus_t Rc663_EepromInitAndCalibrateLPCD(
phhalHw_Rc663_DataParams_t *pHal,
uint32_t *pdwLPCDRefValue)
{
phStatus_t status;
uint8_t bVersion, bIrq1, bErr;
uint8_t bValueI = 0, bValueQ = 0;
char dbg[64];
uint8_t eepromVal;
uint8_t addr;
sprintf(dbg,"\r\n=== EEPROM + LPCD Init ===\r\n");
DEBUG_UART2((uint8_t*)dbg, strlen(dbg));
/* 1.读取芯片版本 */
status = phhalHw_Rc663_ReadRegister(pHal, PHHAL_HW_RC663_REG_VERSION,&bVersion);
CHECK_STATUS(status);
sprintf(dbg,"VERSION(0x7F)=0x%02X\r\n", bVersion);
DEBUG_UART2((uint8_t*)dbg, strlen(dbg));
/* 2.清除任何现有错误 */
phhalHw_Rc663_ReadRegister(pHal, PHHAL_HW_RC663_REG_ERROR,&bErr);
sprintf(dbg,"ERROR(before)=0x%02X\r\n", bErr);
DEBUG_UART2((uint8_t*)dbg, strlen(dbg));
/* 3. 强制将 LOADREG 从 EEPROM 写入寄存器 */
status = phhalHw_Rc663_WriteRegister(pHal,
PHHAL_HW_RC663_REG_COMMAND,
PHHAL_HW_RC663_CMD_LOADREG);
CHECK_STATUS(status);
/* EEPROM 加载稍有延迟 */
phhalHw_Wait(pHal, PHHAL_HW_TIME_MILLISECONDS, 5);
/* 4.再次检查错误寄存器 */
phhalHw_Rc663_ReadRegister(pHal, PHHAL_HW_RC663_REG_ERROR,&bErr);
sprintf(dbg,"ERROR(after LOADREG)=0x%02X\r\n", bErr);
DEBUG_UART2((uint8_t*)dbg, strlen(dbg));
if (bErr& PHHAL_HW_RC663_BIT_EE_ERR)
{
sprintf(dbg,"> > > EEPROM 错误 (0x%02X) detected!\r\n" 、berR);
DEBUG_UART2 ((uint8_t*) dbg、strlen (dbg));
/*---EEPROM 转储(前 16 个字节用于调试)---*/
for (addr = 0;addr < 0x10;addr++)
{
phalHW_rc663_cmd_reade2 (phAL,addr,1,& eePromade2) val); spr
intf (dbg," EEPROM [0x%02X] = 0x%02X\ r\n ",addr,eepromVal);DEBUG_UART2 ((uint8_t*) dbg,strlen (dbg));} /*---绕过 EEPROM 继续手动初始化---*/
sprintf (dbg," 绕过 EEPROM,使用手动 RF 设置...\ r\n ");
DEBUG_UART2 ((uint8_t*) dbg、strlen (dbg));phhalHW_rc663_WriteRegister(phal,PHHAL_HW_RC663_RC663_REGISTER,PHAL_HW_RC663_RC663_RC663_);
phalHW_RC663_WriteRegister REG_TXAMP,0x1F);phhalHW_RC663_WriteRegister(phal,PHHAL_HW_RC663_REG_DRVCON,0x18);} else {sprintf(dbg," EEPROM LOADREG OK。
\ r\n ");
DEBUG_UART2 ((uint8_t*) dbg,strlen (dbg));} /* 5.
清除 IRQ 标志 */
phHALHW_RC663_WriteRegister(phal、PHHAL_HW_RC663_REG_IRQ0、0x7F);phalHW_RC663_WriteRegister(phal、PHHAL_HW_RC663_REG_IRQ1、0x7F);/* 6。
启用校准模式 */
phHALHW_RC663_WriteRegister (phAL、PHHAL_HW_RC663_REG_LPCD_OPTIONS、0x02);/* 7.
启动 LPCD_CALIBRATE(0x37 是隐藏的校准命令)*/ phhalHW_RC663_WriteRegister(
phal,PHHAL_HW_RC663_REG_COMMAND,0x37);/* 8。
等待 LPCDIRQ */
做 {phHalHW_rc663_readRegister (
phAL、PHHAL_HW_RC663_REG_IRQ1、& birQ1);} while (!
(birQ1 & PHHAL_HW_RC663_BIT_LPCDIRQ)); /* 9.
读取 I/Q 结果 */
phHALHW_RC663_readRegister(phal、PHHAL_HW_RC663_REG_LPCD_RESULT_I、& bValueI);phalHW_rc663_readRegister(phal、PHHAL_HW_RC663_REG_LPCD_RESULT_Q、& bValueQ);/* 10。
存储 */
*pdwLPCDRefValue = (uint32_t)bValueI | ((uint32_t)bValueQ<< 8);
sprintf(dbg,"[LPCD] 校准完成:I=0x%02X Q=0x%02X Ref=0x%08X\r\n",
bValueI, bValueQ, *pdwLPCDRefValue);
DEBUG_UART2((uint8_t*)dbg, strlen(dbg));
return PH_ERR_SUCCESS;
}
您好,先生,
为了校准 CLRC663 的 LPCD,我们强烈建议您使用NFC Cockpit。
这是一个图形用户界面工具,允许用户以图形方式对天线进行微调,同时进行LPCD 校准(第 4.5 节)。我们鼓励您使用这种方法,因为校准必须根据您自己的设计进行。没有任何手册可以按部就班地完成这一程序。
NFC Cockpit 允许用户在读写器卸载和加载时进行实时校准。
请探讨查看以下天线设计视频系列的第 4 段视频的可能性:NFC 天线设计 | 恩智浦半导体