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.

[参考译文] AM263P4-Q1:在带有装配的 AM263Px 控制卡中运行 MCAN 示例所需的更改:PROC159A (001)

Guru**** 2616675 points

Other Parts Discussed in Thread: TCA6424

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1457589/am263p4-q1-required-changes-to-run-mcan-example-in-am263px-control-card-with-assy-proc159a-001

器件型号:AM263P4-Q1
主题中讨论的其他器件:TCA6424

工具与软件:

尊敬的先生/ AM:

           mcan_external_read_write在带有装配(PROC159E2 (001)的 AM263Px 控制卡上从 MCU+SDK 版本10.0.0.35运行示例时、示例正常工作。 但是、它在装配:PROC159A(001)卡上无法正常工作。 在查看代码时、我注意到mcan_transceiver.c、第56至58行包含相关定义(随附代码片段)。 正如 BOM 和目视检查所确认的、两个卡版本中使用的 CAN 收发器是相同的。

/*
 *  Copyright (C) 2023-24 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.
 */

/* ========================================================================== */
/*                             Include Files                                  */
/* ========================================================================== */
#include <stdint.h>
#include <board/ioexp/ioexp_tca6424.h>
#include <board/eeprom.h>
#include <drivers/i2c.h>
#include "ti_drivers_open_close.h"
#include "ti_board_open_close.h"

/* ========================================================================== */
/*                           Macros & Typedefs                                */
/* ========================================================================== */

/* PORT 0, PIN 4         -> ioIndex : 0*8 + 4 = 4*/
#define IO_MUX_MCAN_SEL                             (4U)
/* PORT 2, PIN 1         -> ioIndex : 2*8 + 1 = 17 */
#define IO_MUX_MCAN_STB                             (17U)
/* MCAN_SEL PIN OUTPUT   -> 0 */
#define TCA6424_IO_MUX_MCAN_SEL_PORT_LINE_STATE     (TCA6424_OUT_STATE_LOW)
/* MCAN_STB PIN OUTPUT   -> 1 */
#define TCA6424_IO_MUX_MCAN_STB_PORT_LINE_STATE     (TCA6424_OUT_STATE_HIGH)

#define EEPROM_OFFSET_READ_PCB_REV                  (0x0022U)
#define EEPROM_READ_PCB_REV_DATA_LEN                (0x2U)
#define BOARD_VERSION_E2                            ('2')

/* ========================================================================== */
/*                            Global Variables                                */
/* ========================================================================== */

static TCA6424_Config  gTCA6424_Config;

/* ========================================================================== */
/*                          Function Definitions                              */
/* ========================================================================== */

int32_t TCA6424_Transceiver(void)
{
    int32_t             status = SystemP_SUCCESS;
    TCA6424_Params      tca6424Params;

    TCA6424_Params_init(&tca6424Params);
    status = TCA6424_open(&gTCA6424_Config, &tca6424Params);
    DebugP_assert(SystemP_SUCCESS == status);

    /* For MCAN_SEL */
    status = TCA6424_setOutput(
                    &gTCA6424_Config,
                    IO_MUX_MCAN_SEL,
                    TCA6424_IO_MUX_MCAN_SEL_PORT_LINE_STATE);
    DebugP_assert(SystemP_SUCCESS == status);

    status += TCA6424_config(
                    &gTCA6424_Config,
                    IO_MUX_MCAN_SEL,
                    TCA6424_MODE_OUTPUT);
    DebugP_assert(SystemP_SUCCESS == status);


    /* For MCAN_STB*/
    status += TCA6424_setOutput(
                    &gTCA6424_Config,
                    IO_MUX_MCAN_STB,
                    TCA6424_IO_MUX_MCAN_STB_PORT_LINE_STATE);
    DebugP_assert(SystemP_SUCCESS == status);

    status += TCA6424_config(
                    &gTCA6424_Config,
                    IO_MUX_MCAN_STB,
                    TCA6424_MODE_OUTPUT);

    if(status != SystemP_SUCCESS)
    {
        DebugP_log("Transceiver Setup Failure !!");
        TCA6424_close(&gTCA6424_Config);
    }

    TCA6424_close(&gTCA6424_Config);
    return status;
}

void mcanEnableTransceiver()
{
    int32_t status = SystemP_SUCCESS;
    uint8_t boardVer[2] = "";

    Board_eepromOpen();

    status = EEPROM_read(gEepromHandle[CONFIG_EEPROM0], EEPROM_OFFSET_READ_PCB_REV, boardVer, EEPROM_READ_PCB_REV_DATA_LEN);
    if(status == SystemP_SUCCESS)
    {
        if(boardVer[1] == BOARD_VERSION_E2)
        {
            /* boardVer is E2 */
            status = TCA6424_Transceiver();
        }
        else
        {
            /* boardVer is E1 */
            /* MCAN Transceiver is enabled by default in E1*/
        }
    }

    DebugP_assert(status == SystemP_SUCCESS);
    Board_eepromClose();
}
谢谢、此致、
Tarun
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Tarun:

    这是一个有效的错误。 我已将其内部归档、并会针对下一个 SDK 版本进行修复。
    在此之前、请使用这个更新后的 mcan_transceivers.c 文件。
    e2e.ti.com/.../mcan_5F00_transceiver.c

    谢谢。

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

    尊敬的 Aswathi:

             我已尝试使用上述 mcan_trasciever.c 文件、但在我的 装配(PROC159A (001) AM263Px 控制卡)中、MCAN 仍无法正常工作。

    此致、

    Tarun

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

    尊敬的 Tarun:
    我现场没有此电路板。 给我时间、这样我就可以获得一个。 同时、您能告诉我这次失败的原因是什么吗?  它不会 TCA6424_Transceiver()运行吗?

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

    另请告诉我 执行 EEPROM_READ()后第126行的 boardVer[1]的值是什么。

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

    尊敬的 Aswathi:

    boardVer[1]中的值为0、如下面随附的图中所示

    您可以看到应用程序正在启动、但在选择外部回送模式的情况下、使用 CANalyst 轻触 CAN 线时、输出端没有数据

    此致、

    Tarun

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

    感谢您发送编修。 请给我留出时间就此向硬件团队核实、因为我没有用于立即调试的电路板。

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

    当然、感谢 Aswathi…

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

    尊敬的 Tarun:
    我得到了硬件团队的响应。 PCB _REV 值看起来为"A0"。 请针对 REV_A 条件更新第126行以读取 boardVer 的索引0、而不是索引1。  
    if((boardVer[1] == BOARD_VERSION_E2) || (boardVer[0] == BOARD_VERSION_REV_A))

    我们将在下一个 SDK 版本中提供正确的修复。 如果可行、请告诉我。

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

    尊敬的 Aswathi:

    它现在正在运作…  

    感谢您的帮助

    此致、

    Tarun