This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VE-Q1:Greely_Smart TDA4 SCI 问题

Guru**** 2478765 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1460689/tda4ve-q1-greely_smart-tda4-sci-issue

器件型号:TDA4VE-Q1

工具与软件:

您好、TI 专家!

当 A72内核引导时间以及移除 bootApp 中集成在自动加载操作系统中的一些日志时、我们会遇到一些发生的问题。 当请求 SCI 资源时、A72内核运行时会出现问题、我们对 A72内核进行了深度调试、我们发现了这一点  

 这里的 A72内核被吸住  

Value J7Mailbox_MessagesAvailable(
        J7MailboxDev * Dev,
        Value Channel)
{
    Assert(Dev != NULL);
    Assert(Channel < Dev->ValidQueues);
    
    volatile uint32_t * Status =
        (void *)(Dev->StatusKernAddr + Channel * MBOX_RGN_SIZE);
    
    
    console_printf("J7Mailbox_MessagesAvailable Channel %d address %x status %x *status %x\r\n",Channel,Dev->StatusKernAddr,Status,*Status);

    return ExtractField(*Status, MBOX_DBG_STS_MSG_CNT);
}

在函数中添加一些日志(如日志所示)后、我们发现 a72内核卡在这里的原因是当 sci 请求发送到 R5时、

在 R5回复请求后、A72内核将读取 3240b000 、 我认为这是一个 proxy_0_status 寄存器、

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000000

J7Mailbox_MessagesAvailable Channel 11 address 32400000 status 3240b000 *status 40000001

获取 cur_cnt 值、从而知道 R5是否成功重放了这条消息。

但当发出时间时、该寄存器的值始终为0x40000000。

我们想知道 R5在哪里写入寄存器、以及为什么当 R5重放到 A72内核时不能更改该寄存器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我可以知道您在使用哪个 SDK 吗? 哪个 HLOS A72正在运行?

    您能将整个日志分享给我们吗?

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tarun、您好!

    我们将对 A72内核使用温室、对 MCU R5使用 AUTOSAR OS、对 SCI 服务器使用 BL31、问题出在 GHS 内核引导中。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    如果 AUTOSAR OS 在 MCU1_0上运行、并且 SCI 服务器在确认后正确运行。 什么是原因? 据我所知、TI 没有任何 GHS SDK 支持。 如果没有完整的日志、我在这里可能帮助不大。

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tarun、您好!

    这是 GHS 内核启动的最初阶段、此处仅从 BL31打印两个日志

    通知: BL31:建造时间: 2024年5月1日09:28:03

    错误: GTC_CNTFID0为0! 假设频率为200000000 Hz。 修复引导加载程序

    错误: GTC_CNTFID0为0! 假设频率为200000000 Hz。 修复引导加载程序

    当问题解决时、我打开 CCS 以连接 A72内核、发现代码卡在中  

    我深入探究源代码、发现故障是由该函数发送的  

    static Error J7Sci_IssueRequestSynchronous(
            J7SciDev * Dev,
            J7SciRequest Request,
            J7SciMessage * ToSend,
            J7SciMessage * ToReceive)
    {
        J7SciMessage Dummy = { 0 };
        /* According to some definitions ti_sci.c in the TI linux repo the
         * RX timeout should be 1000msec to 10000msec depending on the target.
         */
        const Value TimeoutMax = RX_TIMEOUT_1MSEC * 1000;
        Error TheError = OperationTimedOut;
    
        Assert(Dev != NULL);
        Assert(ToSend != NULL);
    
        if (ToReceive == NULL)
            ToReceive = &Dummy;
        
        *&ToSend->msg.data.header = (struct SciHeader) {
            .type = Request.MessageType,
            .host = Dev->HostId,
            .seq = (Dev->MsgSequenceNo) % 255,
            .flags = Request.AdditionalFlags | (
                    Request.PleaseAck? FieldValue(SCI_HDR_FLAG_ACK_ON_PROC, 1) : 0),
        };
    
        J7Mailbox_SendAsync(&Dev->MailboxDev, Dev->TxChanNo,
                (Address)&ToSend->msg.raw[0], sizeof(ToSend->msg.raw));
    
        Value Try = TimeoutMax;
        while (Try && J7Mailbox_MessagesAvailable(
                &Dev->MailboxDev, Dev->RxChanNo) == 0) {
            usDelay(10000);
            Try--;
        }
    
        if (Try)
            TheError = Success;
    
        if (TheError == Success) {
            J7Mailbox_DequeueMessage(&Dev->MailboxDev, Dev->RxChanNo,
                    (Address)&ToReceive->msg.raw[0], sizeof(ToReceive->msg.raw));
        
            /* We should have gotten back an ACK with the same sequence number */
            Assert(ToReceive->msg.data.header.seq == ToSend->msg.data.header.seq);
        
            Dev->MsgSequenceNo += 1;
        }
    
        return TheError;
    }

    该函数调用该函数并检查是否有来自 MCU R5的重放发送

    Value J7Mailbox_MessagesAvailable(
            J7MailboxDev * Dev,
            Value Channel)
    {
        Assert(Dev != NULL);
        Assert(Channel < Dev->ValidQueues);
        
        volatile uint32_t * Status =
            (void *)(Dev->StatusKernAddr + Channel * MBOX_RGN_SIZE);
        return ExtractField(*Status, MBOX_DBG_STS_MSG_CNT);
    }

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    这是一个 sci 客户机、叫 J7CLA Sci_Issue 吗? 我可以知道您如何确认 SCI 服务器在 MCU1_0上运行吗?

    此致

    Tarun Mukesh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tarun、您好!

    我认为 SCI 服务器运行成功,因为之前的 GHS 内核运行了 bl31 ,从 bl31的 sci 客户端运行成功。

    和  

    我们添加 g_dump_time_SCI 数组以保存 R5内核接收到 由 A72内核为 数组索引0发送的 ISR 的时间、以及为数组索引1增加 SCI 消息时间的任务、以及为数组索引2添加重放函数的时间

    我们在 GHS kenel 的源 BSP 代码中添加日志来计算发送数和成功记录数、以查看某些地方是否错过了消息。

    void J7Mailbox_SendAsync(
           J7MailboxDev * Dev,
           Value Channel,
           Address Data,
           Value Len)
    {
        Assert(Dev != NULL);
        Assert(Data != 0);
        Assert(Channel < Dev->ValidQueues);
        static uint32_t send_count=0;
        if (Len > Dev->MaxMessageSize)
            Len = Dev->MaxMessageSize;
        
        console_printf("success send %d ",send_count++);
    
        /* This must be an TX Queue with some message slots available */
        Assert(J7Mailbox_IsTransmitChannel(Dev, Channel));
        Assert(J7Mailbox_MessagesAvailable(Dev, Channel) > 0);

    Value J7Mailbox_MessagesAvailable(
            J7MailboxDev * Dev,
            Value Channel)
    {
        Assert(Dev != NULL);
        Assert(Channel < Dev->ValidQueues);
        static uint32_t count_success=0;
        volatile uint32_t * Status =
            (volatile uint32_t*)(Dev->StatusKernAddr + Channel * MBOX_RGN_SIZE);
            
        if  (ExtractField(*Status, MBOX_DBG_STS_MSG_CNT)!=0)
        {
            console_printf("success recv %d ",count_success++);
        }
    
        return ExtractField(*Status, MBOX_DBG_STS_MSG_CNT);
    }

    在问题发生后、 日志显示为波纹管:

    在 R5重放 A72内核之后、GHS 内核似乎无法读取邮箱 cnt

    Value J7Mailbox_MessagesAvailable(
            J7MailboxDev * Dev,
            Value Channel)
    {
        Assert(Dev != NULL);
        Assert(Channel < Dev->ValidQueues);
        
        volatile uint32_t * Status =
            (void *)(Dev->StatusKernAddr + Channel * MBOX_RGN_SIZE);
        
        
        console_printf("J7Mailbox_MessagesAvailable Channel %d address %x status %x *status %x\r\n",Channel,Dev->StatusKernAddr,Status,*Status);
    
        return ExtractField(*Status, MBOX_DBG_STS_MSG_CNT);
    }

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

    J7240b000 Mailbox_Messages * 40000000 *状态40000000

     当我们访问寄存器 3240b000 邮箱状态寄存器时有什么预防措施吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我认为 SCI 服务器运行成功、因为之前的 GHS 内核运行了 bl31、来自 bl31的 sci 客户端运行成功。

    您能给我们分享 ATF 日志吗? 并在正常运行的地方运行。 另外、请告诉我您的引导流程。

    如果 SCI 服务器在 AUTOSAR MCU R5F 上运行正常、那么您是否可以在不运行 GHS 的情况下运行 TI 提供的 Linux 并看到一切正常?

    由于我们最终没有与 GHS 相关的 API、因此我们无法推断出什么是问题。 TI 不提供任何 GHS SDK 供查看。 可以在使用 IPC 时访问邮箱寄存器。

    此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Tarun、您好!

    ATF 日志已在 数据包中、我们只有 bl31没有 optee、因此这已经是 ATF 中的所有日志

    [报价用户 id="544469" url="~/support/processors-group/processors/f/processors-forum/1460689/tda4ve-q1-greely_smart-tda4-sci-issue/5604300 #5604300"]

    通知: BL31:建造时间: 2024年5月1日09:28:03

    错误: GTC_CNTFID0为0! 假设频率为200000000 Hz。 修复引导加载程序

    错误: GTC_CNTFID0为0! 假设频率为200000000 Hz。 修复引导加载程序

    [报价]

    您能给我们分享 ATF 日志吗? 并在正常运行的地方运行。 请与我分享您的引导流程。
    由于我们最终没有与 GHS 相关的 API、我们无法推断出什么可能会出现问题。 TI 不提供任何 GHS SDK 供查看。 使用 IPC 时可以访问邮箱寄存器。

    还可以、很好的封闭衬垫