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.

[参考译文] Eratta -AM243X:我们如何识别 MCU-PLUS-SDK i2310中描述的潜在故障

Guru**** 2451090 points
Other Parts Discussed in Thread: UNIFLASH

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1486503/mcu-plus-sdk-am243x-how-do-we-recognize-the-potential-failure-described-in-eratta-i2310

器件型号:AM243X - MCU-PLUS-SDK
Thread 中讨论的其他器件:UNIFLASH

工具/软件:

有关此问题、请参阅 TI 勘误表 i2310。

TI 告知我们、 由于故障率很小(~0.14%)、不建议对 AM243x 进行 UART 编程、因此我们应改用 USB 编程。 我们  的电路板没有 USB 端口、因此不对相关产品使用 USB。

我们不知道的是如何识别问题。 我们希望将此故障与另一个问题(坏芯片、坏部件放置、坏电路板、坏电缆、…)进行分类 我们不希望 TI 识别这些其他故障类型、我们希望找到确定 的方法来识别 i2310 故障。

如果我们的故障是"Send error:Expected ACK; Get None for block 1"或"[error] XMODEM send failed、no response or incorrect response from EVM"、那么我们应该查找的是什么、还是下面没有显示另一个症状? 我们是否可以预期或不会预期 URT 上存在`CCC`这一故障-我们已经看到这两种情况、有时是间歇性的。

在以下每种情况中、我们都尝试重新配置这些电路板。 电路板发生故障时、会从装置中取出电路板、然后重试多次(~ 10次)、然后再对电路板进行故障排除。

这些都是故障日志中的示例:

14:09:33 523 [INFO] Results of script:
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: expected ACK; got None for block 1
send error: NAK received 11 times, aborting.
 
Parsing config file ...
Parsing config file ... SUCCESS. Found 3 command(s) !!!
 
Executing command 1 of 3 ...
Found flash writer ... sending /root/calamari/tests/resources/sbl_uart_uniflash_0805_v3.hs_fs.tiimage
 
[ERROR] XMODEM send failed, no response OR incorrect response from EVM OR cancelled by user,

17:32:32 049 [INFO] Results of script:
send error: error_count reached 10, aborting.
 
Parsing config file ...
Parsing config file ... SUCCESS. Found 3 command(s) !!!
 
Executing command 1 of 3 ...
Found flash writer ... sending /root/calamari/tests/resources/sbl_uart_uniflash_0805_v3.hs_fs.tiimage
 
[ERROR] XMODEM send failed, no response OR incorrect response from EVM OR cancelled by user,
Power cycle EVM and run this script again !!!
 
17:32:32 050 [INFO] Script end (/root/calamari/calamari/am243x) ----------------------------------------
 
17:32:32 054 [DEBUG] closing client connection.  exiting passthroughs, releasing pdi mux, turning off leds.
17:32:32 054 [DEBUG] <><> conn.read util:try_func:108, client:close:88, connection:read:155
17:32:32 059 [DEBUG] Read finished - 0.005 sec

10:40:29 309 [INFO] Results of script:
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: expected ACK; got None for block 2
send error: NAK received 11 times, aborting.
 
Parsing config file ...
Parsing config file ... SUCCESS. Found 3 command(s) !!!
 
Executing command 1 of 3 ...
Found flash writer ... sending /root/calamari/tests/resources/sbl_uart_uniflash_0805_v3.hs_fs.tiimage
 
[ERROR] XMODEM send failed, no response OR incorrect response from EVM OR cancelled by user,
Power cycle EVM and run this script again !!!

15:15:32 623 [INFO] Results of script:
received CAN
received CAN
 
Parsing config file ...
Parsing config file ... SUCCESS. Found 3 command(s) !!!
 
Executing command 1 of 3 ...
Found flash writer ... sending /root/calamari/tests/resources/sbl_uart_uniflash_0805_v3.hs_fs.tiimage
Sent flashwriter /root/calamari/tests/resources/sbl_uart_uniflash_0805_v3.hs_fs.tiimage of size 317108 bytes in 32.32s.
 
Executing command 2 of 3 ...
Command arguments : --file="/root/calamari/tests/resources/bootloader_am243.Debug.hs_fs.tiimage" --operation=flash --flash-offset=0x0
 
[ERROR] XMODEM send failed, no response OR incorrect response from EVM OR cancelled by user,
Power cycle EVM and run this script again !!!
 
15:15:32 623 [INFO] Script end (/root/calamari/calamari/am243x) ----------------------------------------
 
15:15:32 624 [DEBUG] closing client connection.  exiting passthroughs, releasing pdi mux, turning off leds.
15:15:32 624 [DEBUG] <><> conn.read util:try_func:108, client:close:88, connection:read:155
15:15:32 630 [DEBUG] Read finished - 0.005 sec
15:15:32 630 [DEBUG] <<< b'\x18'

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

    您好:Mark、

    指定的 IS 专家今天已离职。 对此主题的响应将延迟。 感谢您的合作。

    此致、

    Tushar

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

    尊敬的 Tushar:

    是否有任何更新?

    谢谢、Merril

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

    您好、

    感谢您的耐心。

    我已跟踪 i2310的提交所有者、现在可以在 MCU PLUS SDK 的 drivers/UART 下看到。

    我将讨论并在我有更新后通知您。

    此致、

    Vaibhav

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

    您好、

    我需要更多的时间来评论我对此的想法。

    此致、

    Vaibhav

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

    尊敬的 Vaibhav:

    是否有任何更新?

    谢谢、Merril

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

    您好 Newman:

    我尝试在 AM243 LP TI EVM 上重现此问题。

    这里的目标如下。

    UART_i2310WA 在控制器 ISR 函数内部调用。 只要调用 UART 读取和 UART 写入 API、就会调用此函数。
     
    因此、我正在运行一个简单的应用程序、在该应用程序中会执行大量写入和读取 操作、直到我在 UART_i2310WA 处达到断点或遇到一些错误。
    此致、
    Vaibhav
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请检查我的测试应用程序。 请注意、我已在 API UART_i2310WA 处放置一个断点、看看它是否达到它、因此我可以从中得出一些结论。

    /*
     *  Copyright (C) 2021 Texas Instruments Incorporated
     *
     *  Redistribution and use in source and binary forms, with or without
     *  modification, are permitted provided that the following conditions
     *  are met:
     *
     *    Redistributions of source code must retain the above copyright
     *    notice, this list of conditions and the following disclaimer.
     *
     *    Redistributions in binary form must reproduce the above copyright
     *    notice, this list of conditions and the following disclaimer in the
     *    documentation and/or other materials provided with the
     *    distribution.
     *
     *    Neither the name of Texas Instruments Incorporated nor the names of
     *    its contributors may be used to endorse or promote products derived
     *    from this software without specific prior written permission.
     *
     *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     */
    
    /* This example demonstrates the UART RX and TX operation by echoing char
     * that it recieves in blocking, interrupt mode of operation.
     * When user types 'quit', the application ends.
     */
    
    #include <string.h>
    #include <kernel/dpl/DebugP.h>
    #include "ti_drivers_config.h"
    #include "ti_drivers_open_close.h"
    #include "ti_board_open_close.h"
    
    #define APP_UART_BUFSIZE              (200U)
    #define APP_UART_RECEIVE_BUFSIZE      (8U)
    
    uint8_t gUartBuffer[APP_UART_BUFSIZE];
    uint8_t gUartReceiveBuffer[APP_UART_RECEIVE_BUFSIZE];
    volatile uint32_t gNumBytesRead = 0U, gNumBytesWritten = 0U;
    
    #define APP_UART_ASSERT_ON_FAILURE(transferOK, transaction) \
        do { \
            if((SystemP_SUCCESS != (transferOK)) || (UART_TRANSFER_STATUS_SUCCESS != transaction.status)) \
            { \
                DebugP_assert(FALSE); /* UART TX/RX failed!! */ \
            } \
        } while(0) \
    
    void uart_echo(void *args)
    {
        int32_t          transferOK;
        UART_Transaction trans;
    
        Drivers_open();
        Board_driversOpen();
    
        DebugP_log("[UART] Echo example started ...\r\n");
    
        uint32_t tries = 1000;
        while(tries > 0)
        {
            tries--;
            UART_Transaction_init(&trans);
    
            /* Send entry string */
            gNumBytesWritten = 0U;
            trans.buf   = &gUartBuffer[0U];
            strncpy(trans.buf,"This is uart echo test blocking mode\r\nReceives 8 characters then echo's back. Please input..\r\n", APP_UART_BUFSIZE);
            trans.count = strlen(trans.buf);
            transferOK = UART_write(gUartHandle[CONFIG_UART_CONSOLE], &trans);
            APP_UART_ASSERT_ON_FAILURE(transferOK, trans);
    
            /* Read 8 chars */
            gNumBytesRead = 0U;
            trans.buf   = &gUartReceiveBuffer[0U];
            trans.count = APP_UART_RECEIVE_BUFSIZE;
    
            for(int i = 0; i < 8; i++) gUartReceiveBuffer[i] = 97 + i;
    
    //        transferOK = UART_read(gUartHandle[CONFIG_UART_CONSOLE], &trans);
    //        APP_UART_ASSERT_ON_FAILURE(transferOK, trans);
    
            /* Echo chars entered */
            gNumBytesWritten = 0U;
            trans.buf   = &gUartReceiveBuffer[0U];
            trans.count = APP_UART_RECEIVE_BUFSIZE;
            transferOK = UART_write(gUartHandle[CONFIG_UART_CONSOLE], &trans);
            APP_UART_ASSERT_ON_FAILURE(transferOK, trans);
    
            /* Send exit string */
            gNumBytesWritten = 0U;
            trans.buf   = &gUartBuffer[0U];
            strncpy(trans.buf, "\r\nAll tests have passed!!\r\n", APP_UART_BUFSIZE);
            trans.count = strlen(trans.buf);
            transferOK = UART_write(gUartHandle[CONFIG_UART_CONSOLE], &trans);
            APP_UART_ASSERT_ON_FAILURE(transferOK, trans);
    
            DebugP_log("All tests have passed!!\r\n");
        }
    
        Board_driversClose();
        Drivers_close();
    
        return;
    }
    

    此致、

    Vaibhav

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

    我已经浏览了代码、并列出了一些我已经缩小的内容。

    有一个名为 UART_IIR_UART 的寄存器

    这将告诉我们中断类型、或者更正式地说明当前生成的中断类型。

    只关注黄色突出显示部分。  

    如果从 UART_IIR 寄存器读取的值为 1100 B、这意味着中断是 RX 超时读取6h。

    如果发生这种情况、我们会检查是否需要读取至少1个字节:

    1. 如果没有要读取的字节、我们最好继续。
    2. 如果是、我们会看到勘误表 i2310

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

    您好 Newman:

    我已经测试了很多次、但无法重现此问题。

    我编写了一个 python 脚本来将数据发送到 UART 并自动执行此过程、其中 UART Read API 将调用10000次、每次我们通过 python 脚本发送8个字符。

    要知道是否遇到了此勘误表、并将此错误与任何其他错误分离、一种简单的方法是检查 UART_EFR2寄存器的位6。 这样、如果位6每当它设置为1时、我们就会知道 i2310勘误表已达到。  

    另请注意、这可按如下方式配对:

    因此、当 UART_IIR_UART 寄存器设置为值1100b 且 UART_EFR2位6设置为1时、会遇到勘误表 i2310、否则不会。

    我已在 SDK 中检查、我们不会在任何位置写入 EFR2寄存器、而只会在 i2310勘误 API 中写入。

    您能尝试运用这个逻辑吗?

    供参考、这是我的 python 脚本。

    e2e.ti.com/.../script.py

    下面是测试代码:

    e2e.ti.com/.../uart_5F00_echo_5F00_am243x_2D00_lp_5F00_r5fss0_2D00_0_5F00_nortos_5F00_ti_2D00_arm_2D00_clang.zip

    此致、

    Vaibhav

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

    你好、Vaibhav、  

    我们没有简单的方法来读取  UART_EFR2寄存器、因为我们的生产固件 对此寄存器没有直接打印。  

    鉴于这是 TI 端已知的勘误表、根据上面的脚本日志、您能否帮助确认这些勘误表是否都源于此 UART 引导勘误表?   


    谢谢、  
    Hong  

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

    Hong Hong:

    鉴于这是 TI 方面的已知勘误表、根据上面的脚本日志、您能否帮助确认这些勘误表是否都是此 UART 引导勘误表导致的?  [/报价]

    我知道这是已知的勘误表、但目前很难说何时根据日志复制。

    之前、我们的测试团队已经在几个周期内通过主 UART 引导模式进行了测试。 他们的样片有故障、因此他们能够通过主 UART 引导模式上的 ROM 引导重现此问题。

    但这只是当它无法启动时,他们得出结论,由于勘误表 i2310失败,并提出了修复它。

    如果您正在使用 UART Uniflash、我不确定如何转换为日志。

    请告诉我,如果这在某种程度上帮助你: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/10_01_00_32/exports/docs/api_guide_am243x/TOOLS_FLASH.html#TOOLS_FLASH_ERROR_MESSAGES

    此致、

    Vaibhav