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.

[参考译文] RTOS/AM3352:具有中断的 NDK 示例工程

Guru**** 2546120 points
Other Parts Discussed in Thread: SYSBIOS, AMIC110, AM3352, DP83848M, MATHLIB

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/610850/rtos-am3352-example-project-for-ndk-with-interrupts

器件型号:AM3352
主题中讨论的其他部件:SYSBIOSAMIC110DP83848MEVMK2GMATHLIB

工具/软件:TI-RTOS

我希望其中一个 EVM 或 Beagle 板上有一个335x 示例项目、该项目使用具有中断功能的 NDK。 我一直在查看 Nimu_BasicExample_bbbAM335x_armExampleProject、但这似乎是为轮询而设置的、但我可能会错。 我在该项目中看不到中断被初始化的任何位置。 我也很不确定大多数设置会做什么、因为我不熟悉 Starterware 和 SoC、TI-RTOS 的文档也很少。

我的主要问题是使从 NDK 到硬件的接口正常工作、我希望我能找到一个示例、因为没有有关如何设置的文档(我找到了)。

我的初始化代码是:

/*芯片配置 MII/RMII 选择*/
SOCCtrlCpswPortMacModeSelect (1、Ethernet_MAC_TYPE_RMII);
SOCCtrlCpswPortMacModeSelect (2、Ethernet_MAC_TYPE_RMII);

EMAC_socGetInitCfg (0、&cfg);
cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_UTI;
cfg.port[1].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_UTI;
cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX;
EMAC_socSetInitCfg (0、&cfg);

NIMUDeviceTable[NIMU_DEVICE_index++].init =&CpswEmacInit;
NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;

我在 SYSBIOS 中设置了 NDK、它确实会运行。 它检测到电缆已插入、但之后没有任何内容(我希望 DHCP 客户端正在运行、这是因为它会因故障而超时、但网络不响应-是的、网络会执行 DHCP)

我相信我已经启用了所有时钟。 使用时钟树工具、当您启用模块时、我看到除一个时钟之外的所有时钟都打开、但我不确定在哪里打开250MHz 时钟或如何验证它已经打开。 我不确定哪个寄存器控制它

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    RTOS 团队已收到通知。 他们将在这里作出回应。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、鹅卵石

    有关接收路径中断功能、请参阅第1.3节- SPRUFP2A 上的流程图(NDK_2_25_01_11\docs)-网络开发者套件(NDK)支持包以太网驱动程序设计指南。

    NIMU_BasicExample_bbbAM335x_armExampleProject 使用静态 IP 地址、请参阅 NIMU_bbbam335x.cfg:VAR enableStaticIP = 1;您可以通过对 IP 地址192.168.1.4的 Beagle Board 执行 ping 操作来验证 NDK 示例是否正常工作。

    这些时钟由 Board_init_module_clock 启用:

    boardCfg = Board_init_PINMUX_CONFIG |
    Board_init_module_clock | Board_init_uart_stdio;
    board_init (boardCfg);

    它在下面的 pdk_am335x_1_0_x\packages/ti\starterware\soc \AM335x\AM335x_prcm.c 中调用 PRCMModuleEnable()函数。

    案例 CHIPDB_MOD_ID_CPSW:

    HW_WR_REG32 ((SOC_PRCM_REGS + CM_PER_CPGMAC0_CLKCTRL)、
    CM_PER_CPGMAC0_CLKCTRL_MODULEMODE_ENABLE);

    while (0U!=(HW_RD_REG32 (SOC_PRCM_regs + CM_PER_CPGMAC0_CLKCTRL)
    & CM_PER_CPGMAC0_CLKCTRL_IDLEST);

    寄存器 CM_PER_CPGMAC0_CLKCTRL 在《AM335x 和 AMIC110 SitaraTm处理器技术参考手册》的8.1.12时钟模块寄存器 SPRUH73P www.ti.com/.../spruh73中进行了说明

    此致、
    Garrett

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

    该流程图详细介绍了我认为已经针对 NDK 和 AM335x 之间的接口制定的流程图。

    我想我应该问 的是、NIMU_BasicExample_bbbAM335x_armExampleProject 是一个有关如何设置 NDK 硬件接口以便 AM3352可以运行以太网的好示例? 如果工程是静态 IP、我不在乎、我已经为 DHCP 设置了 cfg 文件。  我需要的是要初始化的接口、该接口适用于 RMII2引脚。  

    这是定制板。 我的印象是、所有硬件接口工作都已经完成、并随 SDK 一起提供、只需几次库调用即可启动并运行。 当然、上面的示例项目不包含运行 HW 接口所需的大量代码。 这是我错的吗?

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

    鹅卵石

    您可以为 bbb、EVM 或 icev2 AM335x 选择 Nimu 示例作为基准、以开发应用并设置 NDK 的硬件接口、具体取决于您的定制板与这些板的相似性。

    使用定制板时、仍需要对 SDK 进行一些修改。 有关详细信息,请查看 training.ti.com/application-development-using-processor-sdk-rtos 上的培训幻灯片“使用 Processor SDK RTOS 进行应用开发” 。 幻灯片中的"端口"部分介绍了在引脚多路复用器 phy...note 上修改电路板库幻灯片中列出的平台是 AM572x。 对于 AM335x、pinmux 文件位置存在细微差异、即 pdk_am335x_1_0_x\packages/ti\starterware\board\am335x。 如果您选择 NIMU_BasicExample_bbbAM335x_armExampleProject、请检查您是否具有与 Beagle Board 相同的 PHY 器件和地址。

    此致、
    Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们所做的是将现有项目移植到具有新处理器的新定制板上。 我无法从示例工程开始并从该工程编译、我必须从头开始。

    因此、我相信我拥有运行 EMAC 所需的所有启动部件:引脚多路复用、电源控制器。

    但是、尝试转换 SoC 的 API 是一件棘手的事情。 我似乎找不到一个 API 或指南来告诉我如何将 EMAC 初始化为与示例项目不同的端口、当然、示例项目没有任何以任何方式提供帮助的注释。

    我认为这就是为什么这个论坛存在的原因

    因此、我使用 RMII2的启动代码、要链接所有必要的硬件以便 NDK 能够运行、如下所示:

    空 InitNimu (空)

    EMAC_HwAttrs_V4 cfg;

    /*芯片配置 MII/RMII 选择*/
    SOCCtrlCpswPortMacModeSelect (2、Ethernet_MAC_TYPE_RMII);

    EMAC_socGetInitCfg (2、&cfg);
    cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_UTI;
    cfg.port[1].phy_addr = EMAC_CPSW_Port1_PHY_ADDR_UTI;
    cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX;
    EMAC_socSetInitCfg (2、&cfg);

    //NIMUDeviceTable[NIMU_DEVICE_index+].init = NULL;
    NIMUDeviceTable[0].init = NULL;
    NIMUDeviceTable[1].init = NULL;
    NIMUDeviceTable[2].init =&CpswEmacInit;
    //NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;



    这是错误的吗? 如果是、问题出在哪里? 是否还需要做更多的工作? 当我查看我之前列出的示例项目时、似乎只需启动处理器以与 NDK 配合使用即可。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想让我详细说明一下我为什么会对此感到困惑

    首先、我要做的是寻找一个示例项目、该项目至少可以为 EMAC 和 MDIO 设置硬件、因为这是通过 Starterware 为我完成的。 我找到了 NIMU_BasicExample_bbbAM335x_armExampleProject、它看起来正是我想要的(即:它实际上在 app.cfg 文件中使用 NDK)、但是对于如何更改项目以在定制板上工作、没有任何注释。 这应该是一个示例项目、但由于缺少注释、很难移植到我们的电路板上。

    当我请求帮助时、我得到了"如果您想自己编写整个 EMAC 层、这里是文档"或"查找示例项目并基于该项目进行一切"、我就是这么做的。 由于 Starterware 本来应该已经处理过这种情况、我选择不自己编写整个物理层。 因此、假设我在文件 main_bbbAM335x.c 中看到的设置就是设置硬件所需的全部设置。 我看到创建的任务除了输出一些文本(Nimu_log ("\n\rSYS/BIOS EtherNet/IP (CPSW)示例应用程序\n"r)之外什么也不执行;这看起来不像是实际执行任何操作)、也不设置任何内容、而实际的 SOC 和 Nimu 调用、因此我将重点介绍后者。

    现在、我必须挖掘代码的含义。 再说一次、没有意见

    当我找到例程 SOCCtrlCpswPortMacModeSelect 的源代码时、我看到第一个参数是端口。 很好。 我在源代码中看到端口2将开始设置 RMII2、太棒了。 I m 必须使用端口2。

    我查找 EMAC_socGetInitCfg 的源代码、第一个参数也应该是端口。 但等待、我看到如果使用2作为端口号、它将等于 EMAC_NUM_MAX_MAC_PORT (= 2)、这意味着代码不执行任何操作。 因此我不使用端口2、或者这是一个不同的端口。 好的、那么我看一下引脚复用工具和技术手册、我看到 RMII 只有 rmii1和 rmii2、所以我必须是端口1? 我想我会尝试一下

    现在、我看一下 cfg 变量以及 port[0]和 port[1]成员。 端口的类型为 EMAC_cpsw_port、其中包含 EMAC_NUM_MAX_MAC_PORTS (=2)端口。 那么、再说一次、我一定不能使用端口2、这意味着我要使用端口1? 我现在使用此假设两次。 我猜、因为他们使用相同 的#define 、它们必须意味着相同的东西。 我在示例中看到、它们仅使用结构的 phy_addr 成员。 我在示例中看到、它们为两个端口定义了相同的 PHY 地址、因此我假设我必须执行相同的操作? 尽管我只需要使用一个端口、但我不确定该端口是什么、因为我无法使用2。 这仍然令人困惑、因为我获得了端口1的配置、但在端口1的配置中、有端口0和端口1的成员、这意味着每个端口都有自己的2个端口吗? 这毫无意义、但我没有任何注释来清除内容、因此我想、即使我不清楚示例代码对我的作用是什么或它的真正意义、我也会这样做。

    接下来、我调用 EMAC_socSetInitCfg、我再次假设我使用端口1

    然后我设置 NIMUDeviceTable:在示例中、它们将表条目0设置为 CpswEmacInit、 但是、它是条目0、因为这是示例代码中用作 EMAC_socGetInitCfg 和 EMAC_socSetInitCfg 的端口号、还是更像器件数量为1、并且它们从0开始、直至达到空值? 同样、代码中也没有相关文档。 当我查看 sprufp2b.pdf 时、它仅表示我需要填充回调函数并定义所有内容、但它并不意味着哪个元素实际填充回调函数或元素实际含义的重要性。 当我进一步研究本文档时、它引用了对 C64+器件的支持。 当我查看代码并看到多个元素的原因时、可以看到它是由于 MAX_Table_entries (=3)、但这并不能真正解答任何问题。 我假设这意味着端口数+1、因此可以为空。 这是否意味着我设置了元件1? 我是否将元素0保留为空(不会立即导致服务错误 CIS_SRV_STATUS_FAILED)? 我是否使用回调加载元素0和元素1并将2保留为空(不会、这会导致_exit)? 让我思考一下应该填充元素0、但其结果仍然是没有网络流量

    当我转到 AM3352的技术手册以清楚地了解我应该将哪个端口用于仅接受0或1作为端口号的例程时、我唯一能找到的是、rmii2来自 CPRMII2、 但不指示 RMII2使用的端口。

    当我加载我认为是我最好的猜测并运行代码时、我在 ROV 中看到我没有用于 EMAC 的 HWI、 我认为、由于示例项目未定义任何内容、因此应通过 Nimu 代码进行一些动态设置。 我看到 NDK 堆栈线程是作为任务创建的、但也没有创建轮询任务。 因此、没有中断和轮询任务、因此没有任何可提醒我的网络流量的任务。 嗯、如果无法设置要实际使用的 NDK、示例项目的重点是什么? 确定 NDK 可以启动、但它可以做什么? 谁将 NDK 设置为加载、但不对其执行任何操作? 即使您可以对其执行 ping 操作、对于示例项目而言、这有多好? 大多数人需要对系统做更多的事情、而不仅仅是通过 ping 命令。

    我希望我能够说明为什么在尝试使其工作时感到困惑和失落。 我觉得我缺少了一些简单的东西、但我在尝试解决这个问题时却错过了这些东西。 很高兴知道我做了什么错、应该做什么以及为什么我做的事情。 我不喜欢回答"为什么这样设置"的问题"我不知道"、我知道我的老板不喜欢听到这个问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我会将您的反馈转发给我们的团队。

    在查看 NDK 配置或 NIMU 器件表之前、让我们首先确保 PHY 设置正确、您是否已检查 MDIOALIVE 和 MDIOLINK 寄存器? 我们期望在 MDIOALIVE 寄存器中设置 PHY 地址的相应位、如果存在链路和确认读取事务、则 MDIOLINK 寄存器中的 LINK 位将置位。

    对于 AM335x ICEv2、您可能需要在 main_icev2AM335x.c 中注释的定制 PhySetupAndReset()代码。

       /*芯片配置 MII/RMII 选择*/
       PhySetupAndReset();

    另请检查此主题是否对 e2e.ti.com/.../2231094有所帮助

    此致、Garrett

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

    我不知道您的项目代码关注对象是谁、但我发现很难相信您期望人们假设代码发生了什么情况、并且确切知道每个参数的作用或含义。 我不认为要求示例代码解释正在发生的情况太多、因此我不必假设一切。

    因此、我在项目 NIMU_BasicExample_bbbAM335x_armExampleproject 中看不到 PhySetupAndReset。 我是否要假设它在电路板初始化中、因为我没有查看项目 AM335x ICEv2?

    无论采用哪种方法、MDIOALIVE 和 MDIOLINK 都等于0x00000002

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

    是否将 EMAC_CPSW_PORT0_PHY_ADDR_UTI 定义为"1"? 您的 EMAC_CPSW_Port1_PHY_ADDR_UTI 如何定义?

    根据 MDIOALIVE 位、您似乎没有正确设置 PHY。 我们期望在 MDIOALIVE 中设置定义为 EMAC_CPSW_PORT0_PHY_ADDR_UTI 和 EMAC_CPSW_Port1_PHY_ADDR_UTI 的两位 PHY 端口。

    这是正确的、项目 bbbAM335x 不需要 PhySetupAndReset、但是、如果您的定制板与 bbb 不同、您确实需要一个类似的函数来根据原理图和 PHY 数据表进行 PHY 设置和复位、或者您需要在定制板初始化函数中对其进行介绍。 您的 PHY 器件型号是什么?

    此致、Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我将 EMAC_CPSW_PORT0_PHY_ADDR_UTI 定义为0、就像在 NIMU 示例中那样、将 EMAC_CPSW_PORT1_PHY_ADDR_UTI 定义为1。 我尝试这样做的示例仅将 EMAC_CPSW_PORT0_PHY_ADDR_UTI 用于 phy_addr、我尝试将 EMAC_CPSW_Port1_PHY_ADDR_UTI 用作端口[1].phy_addr、似乎没有什么不同。

    我们将 PHY 芯片的复位线置于控制之下。 我们使用的是 TI DP83848M

    为什么该项目没有 PhySetupAndReset? 您是否不想向用户展示从 BeagleBone 转到自己的定制板时需要更改哪些内容? 我注意到、EVM 的同一个项目也没有此例程。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请参阅 DP83848数据表 www.ti.com/.../dp83848m 的第6.4.4节 PHY 地址 和电路板原理图、以相应地配置 EMAC_CPSW_PORT0_PHY_ADDR_UTI 和 EMAC_CPSW_Port1_PHY_ADDR_UTI。 "PHY 地址引脚与 RXD 和 COL 引脚共享。 系统中共享 MDIO 总线的每个 DP83848x 或端口必须具有唯一的物理地址。"

    Beagle 板使用 PHY LAN8710A。 您是否有 DP83848M 和 LAN8710A 之间寄存器的比较表、如果遇到 PHY 地址以外的问题、这可能会有所帮助。

    从 BeagleBone 到定制板的变化确实有很多细节/挑战、您可以看到从 BeagleBone 到 ICEv2的变化。

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

    看看 BBB 与 ICE 和 EVM 板之间的 Nimu 项目差异、没有太多差异。 它们都有最少数量的代码来运行项目、并且几乎相同、只需进行少量(无法解释)更改。  

    这些都不能真正解释我有的任何代码或问题。 是的、我需要知道 PHY 地址。 在 EVM NIMU 示例中、甚至没有 EMAC_socGetInitCfg、但在 ICE 和 bbb 示例中、存在但我不知道原因。 在示例的注释中、定义 了 EMAC_CPSW_PORT0_PHY_ADDR_ICE2和 EMAC_CPSW_Port1_PHY_ADDR_ICE2的状态 /** PHY 地址 CPSW 端口1*/。 我是否相信它们都适用于端口1? 此外、BBB 示例具有以 EVM 结尾的定义的名称。 我看到这里有2个端口、这两个端口都有一个 phy addr。 推理是、我们可以将2个 phy 附加到该器件、只要它们具有不同的地址、我们就可以有2个不同的功能端口。 用于哪个端口的 phy 地址将输入 cfg.port[x].phy_addr。我是否有该权限? 如果是这样、我应该为 EMAC_socGetInitCfg 参数 port_num 使用什么? 该0是像 cfg.port 访问一样基于、还是像使用1和2的 SOCCtrlCpswPortMacModeSelect 一样基于1? 如何访问 NIMU 器件表? NIMU 表中的索引是基于端口还是其他内容? 在 ICE 和 bbb 示例中、EMAC_socSetInitCfg 对端口号使用0、即使在端口[1]或端口2上使用唯一有效的 phy 地址。

    我看到 phy 设置似乎只设置 GPIO 线路、这意味着我要设置硬件进行复位以及阻止以太网运行的任何其他操作。  在本例中、我们只有复位线。 因此、这部分内容应涵盖在内。  

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

    >>Q1)在 EVM NIMU 示例中,甚至没有 EMAC_socGetInitCfg,但在 ICE 和 bbb 示例中,存在但我不知道原因。
    这主要取决于 EMACInitCfg[0]中的默认值是否与电路板配置相匹配、例如、EMAC 端口的 PHY 地址在 EMAC_CpswPorts 端口[EMAC_NUM_MAX_MAC_PORTS]中配置;

    >>Q2)在示例的注释中,定义了 EMAC_CPSW_PORT0_PHY_ADDR_ICE2和 EMAC_CPSW_Port1_PHY_ADDR_ICE2的状态/** CPSW 端口1*/的 PHY 地址。 我是否相信它们都适用于端口1?
    这是一个拼写错误。 这两个定义分别用于 EMAC 接口端口0和端口1。

    >>Q3)用于哪个端口的 phy 地址被输入 cfg.port[x].phy_addr。我有这样的权限吗?
    是的、你是对的。

    >>Q4)如果是这样,我会对 EMAC_socGetInitCfg 参数 port_num 使用什么? 该0是像 cfg.port 访问一样基于、还是像使用1和2的 SOCCtrlCpswPortMacModeSelect 一样基于1?
    它基于0。 实际上、两个端口共享相同的 EMACInitCfg[0]结构。 如果您使用1作为参数 port_num、则会拒绝该参数、请参阅 pdk_am335x_1_0_7\packages/ti_drv\emac\soc \am335x\emac_soc.c

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    >>Q5)如何访问 NIMU 设备表? NIMU 表中的索引是基于端口还是其他内容?
    NIMUDeviceTable 在 NIMUInit()(NDK_x/packages/ti/NDK/stack/Nimu/Nimu.c)中被引用、在这里它循环通过 NIMU 器件表并初始化所有列出的网络器件。 NIMU 表的索引不是基于端口。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、那么让我看看我最终是否正确。  

    我想将我的 phy 芯片连接到 RMII2、根据 SOCCtrlCpswPortMacModeSelect、该芯片应该位于端口2上。  我的 phy 芯片地址应该为1、因为我在 phy 芯片地址引脚上没有上拉电阻、并且由于弱上拉和下拉电阻、它们默认为地址1。

    因此、代码的重要部分是设置 SOCCtrlCpswPortMacModeSelect (2、Ethernet_MAC_TYPE_RMII);设置端口2以使用 RMII2引脚 、EMAC_socGetInitCfg (0、&cfg);因为显然0是此例程调用的唯一有效端口号、 cfg.port[1]= EMAC_ADDR_ADDR_PHY_USW_ADDR_ADDR_ADPHY; 由于端口2是我想要的、所以我必须告诉驱动程序该端口的 phy 地址是什么、并且 NIMUDeviceTable[NIMU_DEVICE_index+].init = &CpswEmacInit;  

    代码的整体外观

    /** CPSW 端口0*/的 PHY 地址
    #define EMAC_CPSW_PORT0_PHY_ADDR_UTI 0
    /** CPSW 端口1*/的 PHY 地址
    #define EMAC_CPSW_Port1_PHY_ADDR_UTI 1.

    NIMU_DEVICE_TABLE 项 NIMUDeviceTable[MAX_TABLE 项];

    extern int CpswEmacInit (STKEVENT_Handle hEvent);

    空 InitNimu (空)

    EMAC_HwAttrs_V4 cfg;

    /*芯片配置 MII/RMII 选择*/
    SOCCtrlCpswPortMacModeSelect (1、Ethernet_MAC_TYPE_RMII);
    SOCCtrlCpswPortMacModeSelect (2、Ethernet_MAC_TYPE_RMII);

    EMAC_socGetInitCfg (0、&cfg);
    cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR_UTI;
    cfg.port[1].phy_addr = EMAC_CPSW_Port1_PHY_ADDR_UTI;
    cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX;
    EMAC_socSetInitCfg (0、&cfg);

    //NIMUDeviceTable[NIMU_DEVICE_index+].init = NULL;//&CpswEmacInit;
    NIMUDeviceTable[NIMU_DEVICE_index+].init =&CpswEmacInit;
    NIMUDeviceTable[NIMU_DEVICE_index].init = NULL;

    这似乎是对的吗?

    另一个问题:您之前说过我的 phy 地址错误、因为 MDIO_Alive/link 寄存器中没有设置2个位、但我只有1个 phy 连接到该板、所以我不会在这些寄存器中仅设置1个位?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这是根据您的上述说明确定的正确配置代码。
    如果您只有一个 phy 与地址1连接到电路板、而不是两个 phys 并仅使用端口2、则您观察到的 MDIO_Alive/link 中设置的一个位是正确的。

    在 Starterware 函数 SOCCtrlCpswPortMacModeSelect()中的端口2实际上是指 TRM 中定义的 CPSW_3G 端口,"CPSW_3G 包含两个 CPGMAC_SL 接口(端口1和2)、一个 CPPI 3.0接口主机端口(端口0)、通用平台时间同步(CPTS)、ALE 引擎和 CPDMA "。 这与索引 cfg.port[1]和 EMAC_CPSW_Port1_PHY_ADDR_UTI 有点混淆。

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

    太棒了

    那么、现在我有了我们认为应该...的部分、

    当我运行代码时、没有什么真正发生的事情。 我是说 NDK 正在运行、我得到了开放网络的东西、PHY 从复位中退出、但我没有发现任何流量。 此外、当我查看 ROV 时、我有 NDK 主任务和 DHCP 状态、时钟周期、但未定义其他 HWI。 我本来以为会使用以太网 HWI、如果不使用、则会生成某种周期性任务或时钟函数。 我在 ROV NDK 部分中的 DHCP 地址始终为0.0.0.0。 由于 DHCP 错误(超时)、NDK 最终出现错误

    是的、我使用 DHCP 服务连接到网络。

    我开始研究什么、以弄清为什么这会以这种方式运行?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我有一个 BBB、并将其对应的 NIMU 示例加载到电路板中。 在该项目中、HWI 似乎也没有打开、但它获得了一个 IP 地址、这意味着它正在处理数据。

    是否有某种类型的 NIMU 代码被使用或被定义在其他地方并且我以某种方式在错误的代码中进行链接?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    查看 PDK 中的 Nimu 代码: C:\ti\pdk_am335x_1_0_7\packages/ti\transport \ndk\Nimu 我看到该示例使用的是 NIMu 代码的 v4、该代码使用轮询而不是中断。 我想使用中断、因为我们对项目有实时要求。

    如果我想使用中断、看起来我想使用 v6。 示例代码仅使用 v4、当我在 v6中查找 CpswEmacInit 时、我看到没有 Cpsw 函数。 我确实发现 EmacInit 看起来是等效的、但它对该文件是静态的、因此我不确定如何使用它、而 Nimu 模块的文档似乎仅引用 cpsw (例如:v4)

    如何使用 NIMU 代码的 v6以便能够利用中断?

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

    如果您将 bbb 或电路板连接到 PC、是否能够成功 ping 通 IP 地址?

    虽然数据包接收 API 是 EMAC_POLL_pkt_v4 ()、但在内部它实际上在信号量 EMAC_GLOBAL_RX_SEM_Handle (0)上挂起、该信号量由 EMAC 中断例程 EMAC_cpswHwIntRx ()发布。


    此致、Garrett

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

    我没有尝试 ping 电路板、因为我有一个 DHCP 地址、这对我来说已经足够了。

    因此、由于它切换信号量、我应该能够看到 ROV 中列出的与某些事件 ID 相关联的信号量、对吧? 此外、我会假设信标位于一个任务中、我应该看到该信标上挂起的某种相应任务、对吧?

    因此、我确信我的 EMAC 甚至在运行、我的引脚多路复用器具有以下特性:

    *((U32 *)(PINMUX_BASE + 0x14c))=(PIN_OUTPUT | MUX_MODE0);//(M18) MDIO_clk.MDIO_clk *
    *((U32 *)(PINMUX_BASE + 0x148))=(PIN_INPUT | MUX_MODE0);//(M17) MDIO_DATA.MDIO_DATA *

    *((U32 *)(PINMUX_BASE + 0x70))=(PIN_INPUT | MUX_MODE3);//(T17) GPMC_wait0.rmii2_crs_dv *
    *((U32 *)(PINMUX_BASE + 0x74))=(PIN_INPUT | MUX_MODE3);//(U17) GPMC_WPN.rmii2_rxer *
    *((U32 *)(PINMUX_BASE + 0x40))=(PIN_OUTPUT | MUX_MODE3);//(R13) GPMC_a0.rmii2_txen */
    *((U32 *)(PINMUX_BASE + 0x54))=(PIN_OUTPUT | MUX_MODE3);//(V15) GPMC_A5.rmii2_txd0 */
    *((U32 *)(PINMUX_BASE + 0x50))=(PIN_OUTPUT | MUX_MODE3);//(R14) GPMC_A4.rmii2_txd1 *
    *((U32 *)(PINMUX_BASE + 0x6c))=(PIN_INPUT | MUX_MODE3);//(V17) GPMC_A11.rmii2_rxd0 *
    *((U32 *)(PINMUX_BASE + 0x68))=(PIN_INPUT | MUX_MODE3);//(T16) GPMC_A10.rmii2_rxd1 */
    *(((U32 *)(PINMUX_BASE + 0x108))=(PIN_INPUT | MUX_MODE1);//(H16) gmii1_col.rmii2_REFCLK *

    对于我的时钟、这将启用:

    PASS = PRCMModuleEnable (CHIPDB_MOD_ID_CPSW、0U、0U);

    其用途:

    * CM_PER_CPGMAC0_CLKCTRL = CM_PER_CPGMAC0_CLKCTRL_MODULEMODE_ENABLE;

    while (0U!=(* CM_PER_CPGMAC0_CLKCTRL & CM_PER_CPGMAC0_CLKCTRL_IDLEST));

    这方面我是否遗漏了任何东西?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果您已经从 DHCP 服务器获得了 IP 地址、则 EMAC 应该正在运行。 您可以通过 Wireshark 捕获来验证这一点。

    当您检查 ROV 中的信号量时、是否还运行 Wireshark 来捕获线路中是否有数据包? 此外,您是否曾尝试在反汇编窗口中的 EMAC_cpswHwIntRx()处设置断点以查看是否已命中?

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

    我在运行 BBB NIMU 示例的 BBB 板上获得了一个 IP 地址。 在我的定制板上、我仍然没有任何东西。 我很抱歉,如果我没有说明这一点。

    我已经运行了 Wireshark 几次、而且电路板上从未出现 DHCP 数据包。

    我从未达到我在 EMAC_cpswHwIntRx 中设置的断点

    因此、很显然、我的 HWI 被禁用或不会以某种方式为信标设置。

    DHCP 失败时的 MIR 位为:

    MIR0:0xFFFFFFFE -我没有在 MIR0中启用任何中断、似乎几乎所有中断都已启用

    MIR1:0xFFFFFF- 9显示我的以太网中断为0、我假设0表示关闭。 作为一个实验、当我运行 Hwi_EnableMIR1 (0x00000600)时、它会将这些位设置为0、这会使我感到困惑、我本以为是1

    MIR2:0x0000F5EF - F5xx 是我使用和打开的中断、我不知道为什么启用了 xxEF、我假设其中一些我没有打开的中断被驱动器打开?

    MIR3:0xFFFFFFFF -它们似乎全部打开

    现在、除非我误解了 MIR 位是什么(一个掩码、通常为1表示启用。 我在文档中找不到1意味着什么、在这个寄存器中、0意味着什么)、它看起来好像一直被禁用、当我运行 Hwi_enableMIR 时甚至被禁用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    现在、我终于让 printf 起作用了、这就是在控制台上输出的内容:

    [CortxA8] SetPhyMode:000021E1自动:1、FD10:64、HD10:32、FD100:256、HD100:128、 FD1000:8192 LPBK:0
    SetPhyMode:000021E1自动:1、FD10:64、HD10:32、FD100:256、HD100:128、 FD1000:8192 LPBK:0
    服务状态:DHCP:已启用: :000
    服务状态:DHCP:已启用:正在运行:000
    ENETPHY_FindingState:Timed out Finding for a PHY!
    ENETPHY_FindingState:PhyNum:1.
    ENETPHY_DisablePhy (1)
    使能 PHY 协商外部连接
    Nway 广播:FullDuplex-1000 FullDuplex-100 HalfDuplex-100 FullDuplex-10 HalfDuplex-10
    PHY:1、NegMode 00A1、NWAYadvertisRED 01E1、NWAYRE40A1
    协商连接:HalfDuplex 100 Mbs
    ENETPHY_FindingState:Timed out Finding for a PHY!
    ENETPHY_FindingState:Timed out Finding for a PHY!

    因此、很显然、我在与我的 phy 交谈时遇到了问题

    这是否意味着我尝试使用的地址错误? 如果无法找到、为什么它会告诉我所提供地址的链接位和活动位?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您可能已经在 pdk_AM335x_1_0_7\packages/ti\board\src\bbbAM335x\device 下的 enet_phy.c 中研究了 ENETPHY_FindingState ()函数。 如果您在 PHY 活动状态寄存器 MDIOALIVE 中设置了活动位、则实际上不应在"ENETPHY_FindingState:PhyNum:1"之后看到"超时查找 PHY"。 您是否已进入函数 ENETPHY_FoundState()来查看您的 phy 是否被 ENETPHY_DisablePhy ()屏蔽并随后禁用?

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

    是的、当我查看 phymask 时、它始终为1或8、这对我没有帮助、因为我的地址为1、所以我的 phy 地址将从 alive/link 寄存器中显示为2。  我很难跟踪 phymask 设置位置的时间

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

    您可以将 enet_phy.c 文件(实际上是任何 PDK 库文件)添加到 CCS 工程中、以便从源代码中步入、并跟踪在 phymask 为1/8时调用 ENETPHY_DisablePhy ()的原因。

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

    希望您在这一主题上取得了进展。 您是否能够跟踪并找出调用 ENETPHY_DisablePhy ()的原因? 对于 PhyMask 为1的 phy 地址0、以下逻辑实际上不应触发 ENETPHY_DisablePhy。

    J = 1;
    for (phynum=0;phynum<32;phynum++)

    if (0U!=(PhyMask & j))

    if (CSL_MDIO_isPhyAlive ((CSL_mdioHandle)((ENETPHY_DEVICE *) hPhyDev)->mibase、phynum))

    ENETPHY_DisablePhy (hPhyDev、phynum);



    关于 phymask 初始化、请参阅 emac_drv_v4.c 中的 EMAC_setupCpswInitConfig()、
    if (0U = I)

    针对端口1的/*编程 phy_mask */
    iCfg->macInitCfg[i].PhyMask =((uint32_t) 1U)<<(iCfg->baseConfig.port[i].phy_addr);
    iCfg->macInitCfg[i].MLinkMask = 0x0U;

    其他

    针对端口2的/*编程 phy_mask */
    iCfg->macInitCfg[i].PhyMask =((uint32_t) 1U)<<(iCfg->baseConfig.port[i].phy_addr);//对应于地址2 *
    iCfg->macInitCfg[i].MLinkMask = 0x1U;
    }/* else 块的末尾覆盖端口1的设置*/

    -Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不幸的是、我一段时间未能处理该项目。 我现在就回到它

    首先、在我的 phy 被禁用之前、我要点击的是日志消息"ENETPHY_FindingState:Timed out foring for a PHY!\n"、然后我得到_ENETPHY_DisablePhy、因为 CSL_MDIO_isPhyAlive 失败、即使 MDIOALIVE 和 MDIOLINK 都是0x00000002 (这将使 phy 掩码失效)

    当我收到超时消息时、MDIOALIVE 设置为2、但 MDIOLINK 未设置

    根据您发布的代码、我的 phy 掩码看起来是由 cfg.port[x].phy_addr 值确定的。 这些是在发生任何这种情况之前设置的、我的地址设置为0和1、这是我的 phy 地址应该是的样子

    当我将两个地址都设置为1时、我跳过了消息、而是收到消息"ENETPHY_FindingState: PhyNum: 1"、但我仍然按不可烧。 以下是运行时的输出:

    ENETPHY_FindingState:PhyNum:1.
    ENETPHY_FindingState:PhyNum:1.
    ENETPHY_DisablePhy (1)
    使能 PHY 协商外部连接
    Nway 广播:FullDuplex-1000 FullDuplex-100 HalfDuplex-100 FullDuplex-10 HalfDuplex-10
    ENETPHY_DisablePhy (1)
    使能 PHY 协商外部连接
    Nway 广播:FullDuplex-1000 FullDuplex-100 HalfDuplex-100 FullDuplex-10 HalfDuplex-10
    PHY:1、NegMode 00A1、NWAYadvertisRED 01E1、NWAYRE40A1
    协商连接:HalfDuplex 100 Mbs
    PHY:1、NegMode 00A1、NWAYadvertisRED 01E1、NWAYRE40A1
    协商连接:HalfDuplex 100 Mbs

    因此、看起来它会协商一个连接(一个很糟糕的连接、但进度正在进行)、但似乎没有 DHCP 数据包离开设备。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    CPSW_STATS 寄存器是否指示接收/发送的任何帧? 此外、如何配置 PHY 的 LED 以及 LED_LINK 和 LED_SPEED 是否指示正确的链路状态和数据速率? 您能否确认所使用的引脚多路复用器是使用 定制板的引脚多路复用工具而不是默认 IDK 或 EVM 板专门生成的?

    此致、Garrett

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

    以下是我的 CPSW_STATS 寄存器的几个屏幕截图:

    我们的板上有一个 LED、它仅在闪烁时呈稳定亮起、并执行此操作。

    我们的引脚多路复用代码发布在 RMII2的多篇文章的上方、我使用了引脚多路复用工具来开发它。 我还没有被告知这是错误的(但我开始认为这是因为没有人看到它)

    这里的任一种方式是我的 pinmux 代码:

    #define PINMUX_BASE          (CONTRAL_BASE + 0x800)

    #define CONTRAL_BASE         0x44E10000

    #define PIN_SLOW_SLEW 0x00000040
    #define PIN_INPUT 0x00000020
    #define PIN_OUTPUT 0x00000000
    #define PIN_INPUT_PULLUP 0x00000030
    #define PIN_INPUT_PULLDOWN 0x00000020
    #define PIN_PULL_DISABLE 0x00000008
    #define MUX_MODE0 0x00000000
    #define MUX_MODE1 0x00000001
    #define MUX_Mode2 0x00000002
    #define MUX_MODE3 0x00000003
    #define MUX_MODE4 0x00000004
    #define MUX_MODE5 0x00000005
    #define MUX_MODE6 0x00000006
    #define MUX_MODE7 0x00000007

    空 InitPinMux (空)

    *(((U32 *)(PINMUX_BASE + 0x1d0))=(PIN_INPUT | MUX_MODE0);//(C11) TMs.TMS *
    *(((U32 *)(PINMUX_BASE + 0x1d4))=(PIN_INPUT | MUX_MODE0);//(B11) TDI.tDI */
    *(((U32 *)(PINMUX_BASE + 0x1d8))=(PIN_OUTPUT | MUX_MODE0);//(A11) TDO.TDO */
    *(((U32 *)(PINMUX_BASE + 0x1dc))=(PIN_INPUT | MUX_MODE0);//(A12) TCK.TCK *
    *((U32 *)(PINMUX_BASE + 0x1e0))=(PIN_INPUT | MUX_MODE0);//(B10) nTRST.nTRST *
    *((U32 *)(PINMUX_BASE + 0x1e4))=(PIN_INPUT | MUX_MODE0);//(C14) EMU0.EMU0 *
    *(((U32 *)(PINMUX_BASE + 0x1e8))=(PIN_INPUT | MUX_MODE0);//(B14) EMU1.EMU1 *

    *(((U32 *)(PINMUX_BASE + 0x88))=(PIN_INPUT_PULLUP | MUX_MODE7);//(T13) GPMC_csn3.GPIO2[0]*
    *(((U32 *)(PINMUX_BASE + 0x8c))=(PIN_INPUT 下拉| MUX_MODE7);//(V12) GPMC_clk.GPIO2[1]*
    *(((U32 *)(PINMUX_BASE + 0x90))=(PIN_INPUT_PULLUP | MUX_MODE7);//(R7) GPMC_ADVn_ALE.GPIO2[2]*
    *(((U32 *)(PINMUX_BASE + 0x94))=(PIN_OUTPUT | MUX_MODE7);//(T7) GPMC_oen_ren.GPIO2[3]*/
    *(((U32 *)(PINMUX_BASE + 0x98))=(PIN_INPUT 下拉| MUX_MODE7);//(U6) GPMC_WN.GPIO2[4]*/
    *(((U32 *)(PINMUX_BASE + 0x9C))=(PIN_INPUT_PULLUP | MUX_MODE7);//(T6) GPMC_BE0n_cle。GPIO2[5]*
    *(((U32 *)(PINMUX_BASE + 0x134))=(PIN_INPUT 下拉| MUX_MODE7);//(L17) gmii1_rxd3.gpio2[18]*
    *(((U32 *)(PINMUX_BASE + 0x138))=(PIN_INPUT_PULLUP | MUX_MODE7);//(L16) gmii1_rxd2.gpio2[19]*
    *(((U32 *)(PINMUX_BASE + 0x13c))=(PIN_INPUT_PULLUP | MUX_MODE7);//(L15) gmii1_rxd1.gpio2[20]*/
    *(((U32 *)(PINMUX_BASE + 0x140))=(PIN_INPUT_PULLUP | MUX_MODE7);//(M16) gmii1_rxd0.gpio2[21]*

    *((U32 *)(PINMUX_BASE + 0x164))=(PIN_INPUT | MUX_MODE7);//(C18) eCAP0_IN_PWM0_OUT.GPIO0[7]*
    *(((U32 *)(PINMUX_BASE + 0x11c))=(PIN_INPUT | MUX_MODE7);//(J18) gmii1_txd3.gpio0[16]*
    *(((U32 *)(PINMUX_BASE + 0x120))=(PIN_INPUT | MUX_MODE7);//(K15) gmii1_txd2.gpio0[17]*/
    *(((U32 *)(PINMUX_BASE + 0x124))=(PIN_INPUT | MUX_MODE7);//(K16) gmii1_txd1.gpio0[21]*/
    *(((U32 *)(PINMUX_BASE + 0x20))=(PIN_INPUT | MUX_MODE7);//(U10) GPMC_AD8.GPIO0[22]*
    *(((U32 *)(PINMUX_BASE + 0x24))=(PIN_INPUT | MUX_MODE7);//(T10) GPMC_ad9.GPIO0[23]*
    *((U32 *)(PINMUX_BASE + 0x28))=(PIN_INPUT | MUX_MODE7);//(T11) GPMC_ad10.GPIO0[26]*
    *(((U32 *)(PINMUX_BASE + 0x2C))=(PIN_INPUT | MUX_MODE7);//(U12) GPMC_AD11.GPIO0[27]*
    *(((U32 *)(PINMUX_BASE + 0x144))=(PIN_INPUT_PULLUP | MUX_MODE7);//(H18) rmii1_ref_clk.GPIO0[29]*

    *((U32 *)(PINMUX_BASE + 0x0))=(PIN_INPUT | MUX_MODE7);//(U7) GPMC_ad0.GPIO1[0]*
    *((U32 *)(PINMUX_BASE + 0x4))=(PIN_INPUT | MUX_MODE7);//(V7) GPMC_ad1.GPIO1[1]*
    *((U32 *)(PINMUX_BASE + 0x8))=(PIN_INPUT | MUX_MODE7);//(R8) GPMC_ad2.GPIO1[2]*
    *((U32 *)(PINMUX_BASE + 0xc))=(PIN_INPUT | MUX_MODE7);//(T8) GPMC_ad3.GPIO1[3]*/
    *(((U32 *)(PINMUX_BASE + 0x10))=(PIN_INPUT | MUX_MODE7);//(U8) GPMC_AD4.GPIO1[4]*/
    *(((U32 *)(PINMUX_BASE + 0x14))=(PIN_INPUT | MUX_MODE7);//(V8) GPMC_AD5.GPIO1[5]*
    *(((U32 *)(PINMUX_BASE + 0x18))=(PIN_INPUT | MUX_MODE7);//(R9) GPMC_AD6.GPIO1[6]*
    *(((U32 *)(PINMUX_BASE + 0x1c))=(PIN_INPUT | MUX_MODE7);//(T9) GPMC_AD7.GPIO1[7]*
    *(((U32 *)(PINMUX_BASE + 0x170))=(PIN_INPUT | MUX_MODE7);//(E15) uart0_RxD.GPIO1[10]*
    *((U32 *)(PINMUX_BASE + 0x30))=(PIN_INPUT | MUX_MODE7);//(T12) GPMC_AD12.GPIO1[12]*
    *((U32 *)(PINMUX_BASE + 0x34))=(PIN_INPUT | MUX_MODE7);//(R12) GPMC_ad13.GPIO1[13]*
    *(((U32 *)(PINMUX_BASE + 0x38))=(PIN_INPUT | MUX_MODE7);//(V13) GPMC_ad14.GPIO1[14]*
    *(((U32 *)(PINMUX_BASE + 0x3c))=(PIN_INPUT | MUX_MODE7);//(U13) GPMC_ad15.GPIO1[15]*/
    *(((U32 *)(PINMUX_BASE + 0x44))=(PIN_INPUT | MUX_MODE7);//(V14) GPMC_A1.GPIO1[17]*
    *(((U32 *)(PINMUX_BASE + 0x48))=(PIN_INPUT | MUX_MODE7);//(U14) GPMC_A2.GPIO1[18]*
    *(((U32 *)(PINMUX_BASE + 0x4c))=(PIN_INPUT | MUX_MODE7);//(T14) GPMC_A3.GPIO1[19]*
    *(((U32 *)(PINMUX_BASE + 0x58))=(PIN_INPUT | MUX_MODE7);//(U15) GPMC_A6.GPIO1[22]*
    *(((U32 *)(PINMUX_BASE + 0x5c))=(PIN_INPUT | MUX_MODE7);//(T15) GPMC_A7.GPIO1[23]*
    *(((U32 *)(PINMUX_BASE + 0x60))=(PIN_INPUT | MUX_MODE7);//(V16) GPMC_A8.GPIO1[24]*
    *(((U32 *)(PINMUX_BASE + 0x64))=(PIN_INPUT | MUX_MODE7);//(U16) GPMC_A9.GPIO1[25]*
    *(((U32 *)(PINMUX_BASE + 0x78))=(PIN_INPUT | MUX_MODE7);//(U18) GPMC_BE1n.GPIO1[28]*/
    *(((U32 *)(PINMUX_BASE + 0x7c))=(PIN_INPUT | MUX_MODE7);//(V6) GPMC_csn0.GPIO1[29]*/
    *((U32 *)(PINMUX_BASE + 0x80))=(PIN_INPUT | MUX_MODE7);//(U9) GPMC_csn1.GPIO1[30]*
    *(((U32 *)(PINMUX_BASE + 0x84))=(PIN_INPUT | MUX_MODE7);//(V9) GPMC_csn2.GPIO1[31]*/

    *((U32 *)(PINMUX_BASE + 0x114))=(PIN_INPUT | MUX_MODE7);//(J16) gmii1_txen.GPIO3[3]*/
    *((U32 *)(PINMUX_BASE + 0x118))=(PIN_INPUT | MUX_MODE7);//(J17) gmii1_rxdv.GPIO3[4]*/
    *(((U32 *)(PINMUX_BASE + 0x188))=(PIN_INPUT_PULLUP | MUX_MODE7);//(C17) I2C0_SDA.GPIO3[5]*
    *(((U32 *)(PINMUX_BASE + 0x18c))=(PIN_INPUT | MUX_MODE7);//(C16) I2C0_SCL.GPIO3[6]*/
    *(((U32 *)(PINMUX_BASE + 0x12c))=(PIN_INPUT | MUX_MODE7);//(K18) gmii1_txclk.GPIO3[9]*
    *((U32 *)(PINMUX_BASE + 0x130))=(PIN_INPUT | MUX_MODE7);//(L18) gmii1_rxclk.GPIO3[10]*
    *(((U32 *)(PINMUX_BASE + 0x234))=(PIN_INPUT | MUX_MODE7);//(F15) USB1_DRVVBUS.GPIO3[13]*/
    *(((U32 *)(PINMUX_BASE + 0x19c))=(PIN_INPUT | MUX_MODE7);//(C12) McASP0_ahclkr.GPIO3[17]*/
    *(((U32 *)(PINMUX_BASE + 0x1a0))=(PIN_INPUT | MUX_MODE7);//(B12) McASP0_aclkr.GPIO3[18]*/
    *(((U32 *)(PINMUX_BASE + 0x1a4))=(PIN_INPUT | MUX_MODE7);//(C13) McASP0_fsr.GPIO3[19]*
    *(((U32 *)(PINMUX_BASE + 0x1ac))=(PIN_INPUT | MUX_MODE7);//(A14) McASP0_ahclkx.GPIO3[21]*

    *((U32 *)(PINMUX_BASE + 0x190))=(PIN_INPUT | MUX_MODE0);//(A13) McASP0_aclkx.McASP0_aclkx *
    *((U32 *)(PINMUX_BASE + 0x194))=(PIN_INPUT | MUX_MODE0);//(B13) McASP0_FSX.McASP0_FSX *
    *(((U32 *)(PINMUX_BASE + 0x198))=(PIN_INPUT | MUX_MODE0);/*(D12) McASP0_axr0.McASP0_axr0 */
    *(((U32 *)(PINMUX_BASE + 0x1a8))=(PIN_INPUT | MUX_MODE0);//(D13) McASP0_axr1.McASP0_axr1 *

    *(((U32 *)(PINMUX_BASE + 0x10c))=(PIN_INPUT | MUX_MODE4);//(H17) gmii1_crs.McASP1_aclkx *
    *((U32 *)(PINMUX_BASE + 0x110))=(PIN_INPUT | MUX_MODE4);//(J15) gmii1_rxer.McA1_FSX *
    *((U32 *)(PINMUX_BASE + 0x128))=(PIN_INPUT | MUX_MODE3);//(K17) gmii1_txd0.McASP1_axr2 *
    *(((U32 *)(PINMUX_BASE + 0x144))=(PIN_INPUT | MUX_MODE4);//(H18) rmii1_REFCLK/McASP1_axr3 *

    *((U32 *)(PINMUX_BASE + 0x14c))=(PIN_OUTPUT | MUX_MODE0);//(M18) MDIO_clk.MDIO_clk *
    *((U32 *)(PINMUX_BASE + 0x148))=(PIN_INPUT | MUX_MODE0);//(M17) MDIO_DATA.MDIO_DATA *

    *(((U32 *)(PINMUX_BASE + 0x1b0))=(PIN_INPUT | MUX_MODE0);//(A15) xdma_event_intr0.xdma_event_intr0 */
    *(((U32 *)(PINMUX_BASE + 0x1b4))=(PIN_INPUT | MUX_MODE0);//(D14) xdma_event_intr1.xdma_event_intr1 */

    *(((U32 *)(PINMUX_BASE + 0x174))=(PIN_OUTPUT | MUX_MODE4);//(E16) uart0_TXD.eCAP1_IN_PWM1_OUT *

    *((U32 *)(PINMUX_BASE + 0xe0))=(PIN_OUTPUT | MUX_MODE0);//(U5) LCD_vSYNC.LCD_vsync *
    *((U32 *)(PINMUX_BASE + 0xe4))=(PIN_OUTPUT | MUX_MODE0);//(R5) LCD_HSYNC.LCD_HSYNC *
    *((U32 *)(PINMUX_BASE + 0xe8))=(PIN_OUTPUT | MUX_MODE0);//(V5) LCD_pclk.LCD_pclk *
    *((U32 *)(PINMUX_BASE + 0xec))=(PIN_OUTPUT | MUX_MODE0);//(R6) LCD_AC_BIAS_EN.LCD_AC_BIAS_EN *
    *((U32 *)(PINMUX_BASE + 0xa0))=(PIN_OUTPUT | MUX_MODE0);//(R1) LCD_Data0.LCD_Data0 *
    *(((U32 *)(PINMUX_BASE + 0xa4))=(PIN_OUTPUT | MUX_MODE0);//(R2) LCD_data1.LCD_data1 *
    *(((U32 *)(PINMUX_BASE + 0xa8))=(PIN_OUTPUT | MUX_MODE0);//(R3) LCD_data2.LCD_data2 *
    *(((U32 *)(PINMUX_BASE + 0xac))=(PIN_OUTPUT | MUX_MODE0);//(R4) LCD_data3.LCD_data3 *
    *((U32 *)(PINMUX_BASE + b0))=(PIN_OUTPUT | MUX_MODE0);//(T1) LCD_data4.LCD_data4 *
    *((U32 *)(PINMUX_BASE + b4))=(PIN_OUTPUT | MUX_MODE0);//(T2) LCD_data5.LCD_data5 *
    *((U32 *)(PINMUX_BASE + b8))=(PIN_OUTPUT | MUX_MODE0);//(T3) LCD_data6.LCD_data6 *
    *((U32 *)(PINMUX_BASE + bb c))=(PIN_OUTPUT | MUX_MODE0);//(T4) LCD_data7.LCD_data7 *
    *((U32 *)(PINMUX_BASE + 0xc0))=(PIN_OUTPUT | MUX_MODE0);//(U1) LCD_data8.LCD_data8 *
    *((U32 *)(PINMUX_BASE + 0xc4))=(PIN_OUTPUT | MUX_MODE0);//(U2) LCD_data9.LCD_data9 *
    *((U32 *)(PINMUX_BASE + 0xc8))=(PIN_OUTPUT | MUX_MODE0);//(U3) LCD_data10.LCD_data10 *
    *(((U32 *)(PINMUX_BASE + 0xcc))=(PIN_OUTPUT | MUX_MODE0);//(U4) LCD_data11.LCD_data11 *
    *(((U32 *)(PINMUX_BASE + 0xd0))=(PIN_OUTPUT | MUX_MODE0);//(V2) LCD_data12.LCD_data12 *
    *(((U32 *)(PINMUX_base + 0xd4))=(PIN_OUTPUT | MUX_MODE0);//(V3) LCD_data13.LCD_data13 *
    *((U32 *)(PINMUX_BASE + 0xd8))=(PIN_OUTPUT | MUX_MODE0);//(V4) LCD_data14.LCD_data14 *
    *(((U32 *)(PINMUX_BASE + 0xdc))=(PIN_OUTPUT | MUX_MODE0);//(T5) LCD_data15.LCD_data15 *

    *((U32 *)(PINMUX_BASE + 0x70))=(PIN_INPUT | MUX_MODE3);//(T17) GPMC_wait0.rmii2_crs_dv *
    *((U32 *)(PINMUX_BASE + 0x74))=(PIN_INPUT | MUX_MODE3);//(U17) GPMC_WPN.rmii2_rxer *
    *((U32 *)(PINMUX_BASE + 0x40))=(PIN_OUTPUT | MUX_MODE3);//(R13) GPMC_a0.rmii2_txen */
    *((U32 *)(PINMUX_BASE + 0x54))=(PIN_OUTPUT | MUX_MODE3);//(V15) GPMC_A5.rmii2_txd0 */
    *((U32 *)(PINMUX_BASE + 0x50))=(PIN_OUTPUT | MUX_MODE3);//(R14) GPMC_A4.rmii2_txd1 *
    *((U32 *)(PINMUX_BASE + 0x6c))=(PIN_INPUT | MUX_MODE3);//(V17) GPMC_A11.rmii2_rxd0 *
    *((U32 *)(PINMUX_BASE + 0x68))=(PIN_INPUT | MUX_MODE3);//(T16) GPMC_A10.rmii2_rxd1 */
    *(((U32 *)(PINMUX_BASE + 0x108))=(PIN_INPUT | MUX_MODE1);//(H16) gmii1_col.rmii2_REFCLK *

    *((U32 *)(PINMUX_BASE + 0x100))=(PIN_OUTPUT | MUX_MODE0);//(G17) mmc0_clk.mmc0_clk *
    *((U32 *)(PINMUX_BASE + 0x104))=(PIN_OUTPUT | MUX_MODE0);//(G18) mmc0_cmd.mmc0_cmd *
    *(((U32 *)(PINMUX_BASE + 0xFC))=(PIN_INPUT | MUX_MODE0);//(G16) mmc0_data0.mmc0_data0 */
    *(((U32 *)(PINMUX_BASE + 0xf8))=(PIN_INPUT | MUX_MODE0);//(G15) mmc0_data1.mmc0_data1 *
    *(((U32 *)(PINMUX_BASE + 0xf4))=(PIN_INPUT | MUX_MODE0);//(F18) mmc0_data2.mmc0_data2 *
    *(((U32 *)(PINMUX_BASE + 0xf0))=(PIN_INPUT | MUX_MODE0);//(F17) mmc0_data3.mmc0_data3 *

    *((U32 *)(PINMUX_BASE + 0x16c))=(PIN_INPUT | MUX_MODE3);//(E17) uart0_rtsn.I2C1_SCL *
    *((U32 *)(PINMUX_BASE + 0x168))=(PIN_INPUT | MUX_MODE3);//(E18) uart0_CTSN.I2C1_SDA *

    *(((U32 *)(PINMUX_BASE + 0x21c))=(PIN_OUTPUT | MUX_MODE0);//(F16) USB0_DRVVBUS.USB0_DRVVBUS *

    *(((U32 *)(PINMUX_BASE + 0x150))=(PIN_INPUT | MUX_MODE0);//(A17) spi0_SCLK.spi0_SCLK */
    *((U32 *)(PINMUX_BASE + 0x154))=(PIN_OUTPUT | MUX_MODE0);//(B17) spi0_d0.spi0_d0 *
    *(((U32 *)(PINMUX_BASE + 0x158))=(PIN_INPUT | MUX_MODE0);//(B16) spi0_D1.spi0_D1 *
    *((U32 *)(PINMUX_BASE + 0x15c))=(PIN_OUTPUT | MUX_MODE0);//(A16) spi0_cs0.spi0_cs0 *
    *((U32 *)(PINMUX_BASE + 0x160))=(PIN_OUTPUT | MUX_MODE0);//(C15) spi0_CS1.spi0_CS1 *

    *(((U32 *)(PINMUX_BASE + 0x180))=(PIN_INPUT | MUX_MODE0);//(D16) uart1_Rxd.uart1_RxD */
    *((U32 *)(PINMUX_BASE + 0x184))=(PIN_OUTPUT | MUX_MODE0);//(D15) uart1_TXD.uart1_TXD *
    *((U32 *)(PINMUX_BASE + 0x178))=(PIN_INPUT | MUX_MODE0);//(D18) uart1_CTSN.uart1_CTSn *
    *(((U32 *)(PINMUX_BASE + 0x17c))=(PIN_OUTPUT | MUX_MODE0);//(D17) uart1_rtsn.uart1_rtsn *}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    让我们后退一步、看看您的硬件实现。

    请发布原理图的 RMII 部分。 请确保同时包含 PHY 和 MAC 部分以及接口时钟。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    CPSW_STATS 中没有 COLD_Rx 帧、并且 Rx_CRC_ERROR 表示 EMAC/PHY 是一个错误连接、如您之前的日志中所示-"协商连接:HalfDuplex 100 Mbs"。 PHY 链路/连接可能非法通过、因为您将相同的 PHY 地址设置为两个端口。 我们必须了解在为每个端口设置正确的 phy 地址时为什么会发生 ENETPHY_DisablePhy (1)。

    >>在我的 phy 被禁用之前,我首先要点击的是日志消息"ENETPHY_FindingState:Timed out foring for a PHY!\n"和>>然后我得到_ENETPHY_DisablePhy,因为 CSL_MDIO_isPhyAlive 失败,即使 MDIOALIVE 和 MDIOLINK 都是0x00002>失败的掩码
    >>当我收到超时消息时,MDIOALIVE 设置为2,但 MDIOLINK 没有

    当 MDIOALIVE 和 MDIOLINK 都为0x00000002并且在超时后 MDIOLINK 不是2时、预计端口0/phy Num 0会被禁用。 MDIOALIVE 和 MDIOLINK 均为0x00000002时、不应禁用端口1/phy 编号1。 您是否能够跟踪 abd 以确定它是否真正是由 PhyMask 引起的? 如果是、您可以尝试注释掉端口1的 phymask 检查、并查看 CPSW_STATS 中是否有任何正常的帧。

    for (phynum=0;phynum<32;phynum++)

    if (0U!=(PhyMask & j))

    if (CSL_MDIO_isPhyAlive ((CSL_mdioHandle)((ENETPHY_DEVICE *) hPhyDev)->mibase、phynum))

    ENETPHY_DisablePhy (hPhyDev、phynum);



    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您还能将所有 PHY 寄存器从0x0转储到0x1D 吗? 我们要检查链接参数是否设置正确。

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

    我使用了:

    ENETPHY_UserAccessRead (hPhyDev、I、1、&PhyReg[i]);

    读取寄存器0-0x1E (额外!) 例程 _ENETPHY_FoundState 的顶部

    我正在尝试了解此代码的运行方式。 根据我可以看到的 ENETPHY_Tic 例程内部的情况、有一条 switch 语句根据当前状态运行多个例程。 因此、我们始终从 init 转到 finding、然后在内部发现 _ENETPHY_DisablePhy 出现。 根据它显示的代码、如果 PhyMask 设置为具有 PHY 地址的内容、它将检查 Phy 是否处于活动状态、如果是、它将禁用它。 在我看来、这似乎是按照预期的方式工作的、因为它在地址处找到了一个 phy、它是有效的、并且它会禁用它。 我同意禁用 phy 似乎是错误的操作、但根据代码、它似乎发现 phy 处于活动状态、并且正在禁用 phy。  目标是否不是进入"已找到"状态? 因为在我看来、如果我们有一个活跃的 phy、它将始终被禁用。

    因此、当我将第一个端口地址设置回0时、它会查找 phy nonstop、并且具有有效 phy 地址的端口仍会协商为半双工。 它的行为就像我们告诉它该板上有2个 phy、需要继续寻找它。 这是预期行为吗?

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

    这是原理图页面

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

    Michael、

    >>目标是否不是进入“已找到”状态? 因为在我看来、如果我们有一个活跃的 phy、它将始终被禁用。
    它需要进入"已找到"状态。 ENETPHY_DisablePhy 下面有 ENETPHY_ResetPhy (hPhyDev、PhyNum)、正如我的同事 Dave 所解释的那样-"DisablePHY 函数可用于在 MAC 稳定 RMII 接口后通过 EMAC_RESET 复位 PHY。 这可防止 PHY 在共享的 RMII 引脚上锁存不正确的配置。"
     
    BBB 的 EMAC 示例设计有两个端口、当该示例通过一个 PHY 移植到您的电路板时、下面的超时日志会令人困惑。 我认为这些消息仅适用于端口0、而不存在端口0。
         ENETPHY_FindingState:Timed out Finding for a PHY!
         ENETPHY_FindingState:Timed out Finding for a PHY!

    在 MDIOALIVE 和 MDIOLINK 中、我们确定端口1已连接、现在让我们重点讨论半双工连接。 端口是否连接到 PC? 您是否尝试将 PC NIC 的“Link Speed & Duplex”(链路速度和双工)设置为100Mbps Full Duplex 而不是“Auto Negotiation”(自动协商)? 我将查看 PHY 寄存器的每个位...

    此致、Garrett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Michael、
    请提供所有 RMII 信号的总布线长度。 由于您使用的是通用时钟、因此还请提供 OSC1提供的时钟布线长度(RMII 时钟到 PHY)和(RMII 时钟到 MAC)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想、当您试图让我了解为什么它称为 phy disable 时、我感到困惑、并认为它可能不应该调用它。

    我知道尝试执行静态 IP 并对电路板执行 ping 操作是演示的目的、但我已将其连接到路由器、并且我正在尝试获取 DHCP、因为我不打算将此器件连接到 PC。

    是否有办法禁止驱动程序查看 PHY 的端口0? 我无法让它永远寻找 PHY。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Michael、
    您是否在演示中添加了 DHCP 客户端代码? 默认情况下、BBB 演示不支持 DHCP 客户端。 为了简化调试、我建议您将电路板直接连接到 PC 中的独立以太网卡。
    供参考- DHCP 示例代码-e2e.ti.com/.../294840

    它应该能够从应用层禁用端口0。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、DHCP 正在运行(正如我所说的)、并且它最终会失败、因为没有数据包离开我的板。 我不是在运行演示、而是从该演示中获取驱动程序设置来设置我的硬件。 从 NDK 设置 DHCP 没有问题、我们使用 NDK 已有多年了、但问题非常少。 如果我能让驾驶员工作、我认为我的项目会很好。

    那么、如何禁用端口0? 所有示例似乎几乎完全相同、我没有找到相关文档、因此我不知道如何"从应用层"禁用端口0。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是我们板布局人员的回复:

    MDIO_DATA–46.4 + 6.4 = 52.8mm

    MDIO_CLK–45.9 + 4.2 = 50.1mm

    RMII2_RXD0–30.5 + 2.0 = 32.5mm

    RMII2_RXD1–31.8 + 2.2 = 34.0mm

    RMII2_CRS_DV–34.2 + 4.0 = 36.2mm

    RMII2_RXER–32.1 + 2.1 = 34.2mm

    RMII2_TXD0–28.6 + 5.7 = 34.3mm

    RMII2_TXD1–28.4 + 6.8 = 35.2mm

    RMII2_TXEN–32.5 + 4.8 = 37.3mm

    RMII2_REFCLK (50MHz_CLOCK)–51.1mm (OSC1放置在 PHY 芯片旁边)。 该布线中没有22 Ω 电阻器。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    >>如何禁用端口0? 所有示例似乎几乎完全相同、我没有找到相关文档、因此我不知道如何从应用层禁用端口0 >>。

    您可以在以下 EMAC SoC 配置中添加'cfg.numPorts = 1'、地址端口[0]也是物理 PHY 地址1

       EMAC_socGetInitCfg (0、&cfg);
       cfg.port[0].phy_addr = EMAC_CPSW_PORT0_PHY_ADDR;//= 1.
       cfg.port[1].phy_addr = EMAC_CPSW_Port1_PHY_ADDR;//无关

       cfg.macModeFlags = EMAC_CPSW_CONFIG_MODEFLG_FULLDUPLEX| EMAC_CPSW_CONFIG_MODEFLG_IFCTLA;

       cfg.numPorts = 1;
       EMAC_socSetInitCfg (0、&cfg);

    您的 Board_init 配置是什么样的? 是否启用了 Board_init_PINMUX_CONFIG? 如果是,它可能会覆盖 pinmux_init()。 您能否转储所有引脚多路复用寄存器以便我们进行检查?

    谢谢、Garrett

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

    感谢您告诉我如何禁用一个端口。 我认为可能有一条命令用于禁用特定端口。 我不认为这会这么简单。

    我不会从驱动程序中执行任何电路板初始化配置。 要设置 pinmux、我只调用 pimux_init、要设置我调用时钟初始化的时钟(我从驱动程序中提取的时钟)

    以下是 RMII2和 MDIO 引脚多路复用器的转储:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我没有发现您的 RMII2/MDIO 引脚多路复用器有任何问题、但是我看不到 RMII2_CRS_DV、RMII2_RXER 或 RMII2_REFLCK 转储。 请提供这些信息吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哎呀、错过了一张图片:

    其中突出显示了一些额外的内容

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

    您能否验证50MHz (OSC1)时钟是否正在运行?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的。 示波器验证50MHz

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢、
    您能否提供 OSC1的器件型号?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Abraacon ASV-50.000MHZ-EJ-T

    www.abracon.com/.../ASV.pdf