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.

[参考译文] AM6442:IO-Link 主站演示:配置端口失败

Guru**** 2927270 points

Other Parts Discussed in Thread: TIOL112, SYSCONFIG

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1652817/am6442-io-link-master-demo-failed-to-configure-port

器件型号: AM6442
Thread 中讨论的其他器件: TIOL112SysConfig

我正在尝试 SDK 中的 IO-Link 主站示例: https://software-dl.ti.com/processor-industrial-sw/esd/ind_comms_sdk/am64x/11_00_00_08/docs/am64x/iolink_master/page_quickstart.html

通过使用 IO-Link 主站 GUI、我能够通过 UART 检测主器件并设置/读取端口配置。 我使用 SIO 模式(端口 MODE=DI_CQ)测试了不同的器件、并且可以正确读取过程数据。 此外、还会正确读取 IQ 输入。

但每次我设置端口 MODE=IOL_autostart 时、都会得到“Port X State: No Device“(绿色 LED 慢速闪烁)。 我从该工具的输出中获得以下信息:

04:38:30 pm — 读回端口配置:
  ArgBlock ID:   PortConfigList
  端口模式:     IOL_autostart
  有效和备份:  无设备检查
  IQ 行为:   数字输入
  端口周期时间: 0 (0 ms)
  供应商 ID:     0  (0x0)
  器件 ID:     0  (0x0)
04:38:36 pm — 获取端口状态

  ArgBlock ID:   PortStatusList
  端口状态:   无设备
  数据输入有效:  false
  数据输出有效:  false
  数据 Len 输入:   0
  数据 Len 输出:   0
  修订 ID:   0.0
  TransmisissoionRate:COM1
  主周期时间:101 (21、2 ms)
  供应商 ID:     0  (0x0)
  器件 ID:     0  (0x0)
  诊断数: 1.
  DiagEntries:Diag   0:EventQualifier = 253 -> b11111101
                 实例:IOL_eEInstance_system
                 类型:  IOL_eEEType_error
                 资料来源: IOL_eESource_master
                 模式:  IOL_eEEMode_displayed
               EventCode = 6144 -> 0x1800

 

我仔细检查了器件是否支持正常模式(例如 P+H IQT1-F61-IO-V1、它甚至不 支持 SIO 模式)。

我将在定制电路板上运行示例、其中使用基于 TIOL112 的 IO-Link 功能。 IO-Link 器件电源正常、由于我在使用 SIO 模式时获得了一些过程数据、因此我假设 Rx - Tx 信号正常。

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

    您好 Martin、  

    您提到的是定制电路板。 您是否也使用我们的 EVM 进行了测试? 这可以正常工作吗?

    您定制电路板上的引脚排列是否与我们 EVM 中的引脚排列相同? 在 IO-Link 模式下、这些引脚会重新配置为不同的模式。 SIO 可能起作用、但如果引脚配置不匹配、则 IOL 不起作用。  

    您是否也可以测试 DO_CQ 模式并切换端口 0/1? 测量电压或在 CQ 引脚上放置一个 LED 来测量此电压。 这样我们就可以看到驱动器是否正常工作。 这对于发送唤醒脉冲并启动 IOL 通信非常重要

    此致

    Christof

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

    尊敬的 Christof:

    感谢您的快速答复。

    我尚未使用 EVM 进行演示测试、引脚排列与 EVM 不同。 我将为 IO-Link 相关的引脚连接 SysConfig 输出。

    我已经按照您的建议使用 DO_CQ 模式进行了测试、LED 响应正常:当我写入“01“时亮起、当我写入“00“时熄灭。 我可以假设 Rx /Tx/En 信号已正确映射吗?

    此致。

     e2e.ti.com/.../iolink-pin.txt

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

    对于自定义引脚排列、您还需要调整结构“iolPinSetup_g“中的“pruPin“和“ctlRegOffset“字段。 SysConfig 未涵盖此功能。 例如  

    根据您的 SysConfig、iolPinSetup_g[0].tx.pruPin 需要为 11。 默认值为 8、这对于您的设计来说是错误的。  
    iolPinSetup_g[0].tx.ctlRegOffset = PIN_PRG0_PRU0_GPO11
    此致
    Christof
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我调整了 iolPinSetup_g 中的字段、以匹配 SysConfig 设置、但 仍收到相同的“无器件“错误。

    -我只使用前 5 个端口,因为根据表,我的 RX 引脚的顺序只与端口 4 兼容。

    - pruPin 编号是否正确? 请注意、我将 PRG1_PRU0 用于所有 TX 信号。

    const IOLM_PL_sPortConfig_t iolPinSetup_g[] =
    {
     { // Port 0
        .rx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO0,
            .gpio.gpioBase = CONFIG_IOL_RX1_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_RX1_PIN
        },
        .tx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO11,
            .gpio.gpioBase = CONFIG_IOL_TX1_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TX1_PIN,
            .pruPin = 11,
        },
        .txEn = {
            .gpio.ctlRegOffset = PIN_OSPI0_LBCLKO,
            .gpio.gpioBase = CONFIG_IOL_TXEN1_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TXEN1_PIN,
            .gpioPhysAddr = CONFIG_IOL_TXEN1_BASE_ADDR + SOC_GPIO_GET_BASE_ADDR_OFS(CONFIG_IOL_TXEN1_PIN),
            .gpioPinMask = SOC_GPIO_GET_PIN_MASK(CONFIG_IOL_TXEN1_PIN),
        },
        .pwrEn = {
            .ctlRegOffset = PIN_ECAP0_IN_APWM_OUT,
            .gpioBase = CONFIG_IOL_ENL1_BASE_ADDR,
            .gpioPin = CONFIG_IOL_ENL1_PIN
        }
     },
     { // Port 1
        .rx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO1,
            .gpio.gpioBase = CONFIG_IOL_RX2_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_RX2_PIN
        },
        .tx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO12,
            .gpio.gpioBase = CONFIG_IOL_TX2_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TX2_PIN,
            .pruPin = 12,
        },
        .txEn = {
            .gpio.ctlRegOffset = PIN_OSPI0_CSN3,
            .gpio.gpioBase = CONFIG_IOL_TXEN2_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TXEN2_PIN,
            .gpioPhysAddr = CONFIG_IOL_TXEN2_BASE_ADDR + SOC_GPIO_GET_BASE_ADDR_OFS(CONFIG_IOL_TXEN2_PIN),
            .gpioPinMask = SOC_GPIO_GET_PIN_MASK(CONFIG_IOL_TXEN2_PIN),
        },
        .pwrEn = {
            .ctlRegOffset = PIN_OSPI0_CSN2,
            .gpioBase = CONFIG_IOL_ENL2_BASE_ADDR,
            .gpioPin = CONFIG_IOL_ENL2_PIN
        }
     },
     { // Port 2
        .rx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO2,
            .gpio.gpioBase = CONFIG_IOL_RX3_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_RX3_PIN
        },
        .tx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO13,
            .gpio.gpioBase = CONFIG_IOL_TX3_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TX3_PIN,
            .pruPin = 13,
        },
        .txEn = {
            .gpio.ctlRegOffset = PIN_GPMC0_WPN,
            .gpio.gpioBase = CONFIG_IOL_TXEN3_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TXEN3_PIN,
            .gpioPhysAddr = CONFIG_IOL_TXEN3_BASE_ADDR + SOC_GPIO_GET_BASE_ADDR_OFS(CONFIG_IOL_TXEN3_PIN),
            .gpioPinMask = SOC_GPIO_GET_PIN_MASK(CONFIG_IOL_TXEN3_PIN),
        },
      . pwrEn = {
            .ctlRegOffset = PIN_PRG0_PRU1_GPO19,
            .gpioBase = CONFIG_IOL_ENL3_BASE_ADDR,
            .gpioPin = CONFIG_IOL_ENL3_PIN
        }
     },
     { // Port 3
        .rx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO3,
            .gpio.gpioBase = CONFIG_IOL_RX4_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_RX4_PIN
         },
        .tx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO14,
            .gpio.gpioBase = CONFIG_IOL_TX4_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TX4_PIN,
            .pruPin = 14,
        },
        .txEn = {
            .gpio.ctlRegOffset = PIN_GPMC0_DIR,
            .gpio.gpioBase = CONFIG_IOL_TXEN4_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TXEN4_PIN,
            .gpioPhysAddr = CONFIG_IOL_TXEN4_BASE_ADDR + SOC_GPIO_GET_BASE_ADDR_OFS(CONFIG_IOL_TXEN4_PIN),
            .gpioPinMask = SOC_GPIO_GET_PIN_MASK(CONFIG_IOL_TXEN4_PIN),
        },
        .pwrEn = {
            .ctlRegOffset = PIN_PRG0_PRU1_GPO18,
            .gpioBase = CONFIG_IOL_ENL4_BASE_ADDR,
            .gpioPin = CONFIG_IOL_ENL4_PIN
        }
     },
     { // Port 4
        .rx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO4,
            .gpio.gpioBase = CONFIG_IOL_RX5_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_RX5_PIN
        },
        .tx = {
            .gpio.ctlRegOffset = PIN_PRG1_PRU0_GPO15,
            .gpio.gpioBase = CONFIG_IOL_TX5_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TX5_PIN,
            .pruPin = 15,
        },
        .txEn = {
            .gpio.ctlRegOffset = PIN_GPMC0_CSN1,
            .gpio.gpioBase = CONFIG_IOL_TXEN5_BASE_ADDR,
            .gpio.gpioPin = CONFIG_IOL_TXEN5_PIN,
            .gpioPhysAddr = CONFIG_IOL_TXEN5_BASE_ADDR + SOC_GPIO_GET_BASE_ADDR_OFS(CONFIG_IOL_TXEN5_PIN),
            .gpioPinMask = SOC_GPIO_GET_PIN_MASK(CONFIG_IOL_TXEN5_PIN),
        },
        .pwrEn = {
            .ctlRegOffset = PIN_GPMC0_WAIT1,
            .gpioBase = CONFIG_IOL_ENL5_BASE_ADDR,
            .gpioPin = CONFIG_IOL_ENL5_PIN
        }
     },
    };

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

    由于您正在使用 PRG1 (ICSSG1)、因此还需要调整 ICSS 实例。 如果您基于示例 SysConfig、可以更改 定义

    IOLM_PRUICSS_INST 连接到 CONFIG_PRU_ICSS1
    如果 SysConfig 中只有一个 CONFIG_PRU 条目、则可以调整 SysConfig 中的实例。  
    此致
    Christof
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你是对的。 我切换到 ICSS1、现在设备开始运行、我能够正确读取过程数据。

    感谢你的帮助。