2369679_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2369679_zh-CN

2369679_zh-CN

PN7462 HSU UART TX 完全回调未触发

嗨,团队、

我正在使用 PN7462 进行 HSU UART 通信,并实现了如下的 HIF 初始化:

void Hif_UartInit(void)
{
    phStatus_t status;

    gHifConfig.eInterface = E_HIF_HSU;

    gHifConfig.sConfig.sHsuConfig.bIsHsuBoot  = 0;
    gHifConfig.sConfig.sHsuConfig.bBaudRate   = E_HSU_BAUDRATE_9_6K;
    gHifConfig.sConfig.sHsuConfig.bStopBits   = 1;
    gHifConfig.sConfig.sHsuConfig.bDummyBytes = 0;
    gHifConfig.sConfig.sHsuConfig.bEOF        = 0;

    gHifConfig.bTimeout       = 0;
    gHifConfig.eBufferType    = E_BUFFER_FORMAT_FREE;
    gHifConfig.bShortFrameLen = 0;
    gHifConfig.bStoreErrData  = 0;
    gHifConfig.bHeaderSize    = 0;

    status = phhalHif_Init(
        &gHifConfig,
        (pphhalHif_Callback_t)Hif_UartErrorCallback
    );

    status = phhalHif_InitRxBuffer(
        E_RX_BUFFER_ID0,
        HIF_UART_RX_MAX_FRAME,
        gHifRxBuffer,
        (pphhalHif_Callback_t)Hif_UartRxCallback
    );

    gUartStream = xStreamBufferCreate(
        HIF_UART_STREAM_SIZE,
        1
    );
}

在我的实施过程中观察到的行为:

  • 正确触发 RX 触发信号回调

  • 成功接收命令

  • 调用 TX 应用程序接口

  • 但是,TX 完成回调不会持续触发

  • 来自 main() 的连续传输未按预期完成

我的简化方案是

int main(void)
{
    phFlashBoot_Main();
    phhalTimer_Init();
    phOsal_Init();

    Hif_UartInit();

    while(1)
    {
        LOG_TXT("sending....\n");

        Hif_Print("hello");

        phUser_Wait(10000000);
    }

    return 0;
}

我还将其与 PN7462 phExDoorAccess 示例进行了比较。

以 DoorAccess 为例:

int main(void)
{
    phFlashBoot_Main();
    phhalTimer_Init();
    phOsal_Init();

    phExDoorAccess_SystemTaskInit();

    phExDoorAccess_BootHandler();

    phRtos_Start();

    return 0;
}

在 DoorAccess 中观察到的行为:

  • 系统任务初始化

  • 使用 phRtos_Start()启动实时操作系统调度程序

  • 卡检测/验证后,主机接口上的 UART 传输正常工作

  • 成功接收 TX 完成回调

但是,在我从 main () 持续触发传输的实现中,没有观察到 TX 完成回调。

我想了解一下:

  1. 除了 phhalHif_Init() 和 phhalHif_InitRxBuffer(),是否还需要额外的 HIF/HSU 配置?

  2. HSU TX 回调是否需要明确注册或启用?

  3. HSU TX 完成回调是否必须使用 phRtos_Start() / 调度器?

  4. HIF 是否需要单独的 API 来在缓冲区初始化后启动 RX/TX 处理?

  5. 在 DoorAccess 示例(任务/事件/RTOS 上下文)中,是否存在启用 UART TX 完成处理的依赖关系?

  6. 是否存在成功调用传输 API 但未生成 TX 完整回调的已知情况?

如果缺少任何初始化序列或配置,请告诉我。

谢谢。

Re: PN7462 HSU UART TX Complete Callback Not Triggering

你好

感谢您的意见和分享参考资料。我将介绍 PN7462 UART 通信讨论以及 NFC 阅读器库中的 ex_phexhif 演示。

同时,我直接在 phExDoorAccess示例项目中直接进行了一次简单的 UART 周期性传输测试:

#include 

int main(void)
{
    phFlashBoot_Main();
    phhalTimer_Init();
    phOsal_Init();

    /* Initialize HSU */
    phExDoorAccess_Utils_HsuHifConfig();

    while(1)
    {
        LOG_TXT("sending....\n");

        phExDoorAccess_Utils_Fill_Tx_Buffer("hello nxp ");

        phExDoorAccess_Utils_Hsu_Print(
            gphExDoorAccess_Utils_SysHsuTxBuffer);

        phUser_Wait(10000000);
    }

    return 0;
}

使用的传输应用程序接口是

void phExDoorAccess_Utils_Hsu_Print(uint8_t *inBuf)
{
#ifdef PHFL_ENABLE_HSU
    phhalHif_Transmit(
        (uint32_t *)inBuf,
        (uint16_t)strlen((const char *)inBuf),
        (pphhalHif_Callback_t)
        &phExDoorAccess_Utils_HsuHifTransmitCallBack);
#endif
}

观察:

  • 当 UART 传输从正常的 DoorAccess 流触发时(例如在卡检测/身份验证之后),传输将起作用并接收 TX 回调。
  • 但是,如果直接从 main()启动实时操作系统/任务流之前直接使用上述周期性传输测试时,传输效果并不尽如人意。

能否请您解释一下,为什么在 主程序中的这种周期性 HSU 传输方法不起作用,而常规 DoorAccess 流程中的 UART 传输却正常运行的原因?我想了解 HSU TX 的完成是否取决于 RTOS/任务初始化、额外的 HIF 设置或其他所需的执行环境。

谢谢。

Re: PN7462 HSU UART TX Complete Callback Not Triggering

你好@uday_gowda

希望你一切顺利。

我正在核实您的询问。

在此期间,请您看一下PN7462 UART 通信这篇文章。也许你能在讨论中找到一些有用的提示,请告诉我你的发现。

另外,你有没有参考过 NFC读取器库中针对 PN7462 的 ex_phexhif 演示?


Eduardo。

Re: PN7462 HSU UART TX Complete Callback Not Triggering

您好,

我尝试了以下配置,并通过逻辑分析仪看到了输出结果:

    gphExDoorAccess_Utils_HsuHifConfig.eInterface = E_HIF_HSU;
    gphExDoorAccess_Utils_HsuHifConfig.sConfig.sHsuConfig.bBaudRate = E_HSU_BAUDRATE_9_6K;
    gphExDoorAccess_Utils_HsuHifConfig.sConfig.sHsuConfig.bDummyBytes = 0;

    gphExDoorAccess_Utils_HsuHifConfig.sConfig.sHsuConfig.bStopBits = 1;
    gphExDoorAccess_Utils_HsuHifConfig.sConfig.sHsuConfig.bEOF = 0x8;
    gphExDoorAccess_Utils_HsuHifConfig.bTimeout = 0x00;

    gphExDoorAccess_Utils_HsuHifConfig.eBufferType = E_BUFFER_FORMAT_FREE;
    gphExDoorAccess_Utils_HsuHifConfig.bShortFrameLen = 0;
    gphExDoorAccess_Utils_HsuHifConfig.bStoreErrData = 0;


Eduardo。

Tags (1)
No ratings
Version history
Last update:
‎06-04-2026 03:29 AM
Updated by: