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/AMIC110:Profinet 从设备示例中的 SPI 用法

Guru**** 2943270 points

Other Parts Discussed in Thread: AMIC110

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/672255/rtos-amic110-spi-usage-in-profinet-slave-example

器件型号:AMIC110

工具/软件:TI-RTOS

大家好、

我想在 PRU-ICSS-PROFINET_Slave 示例中使用 SPI。

我到目前为止所做的是添加一个任务、该任务按如下方式初始化 SPI:

void Function (void){
静态 SPI_Handle spiHandle1 =空;
静态 SPI_Handle spiHandle2 =空;
静态 SPI_Params spiParams;
SPI_Transaction spiTransaction;


TaskP_SLEEP (20000);

//Board_initSPI ();
UART_printf ("启动 SPI 任务\n");

SPI_Params_init (&spiParams);
spiParams.transferMode = SPI_MODE_BLOCKING;
spiParams.transferTimeout = SPI_WAIT_FOREVER;
spiParams.transferCallbackFxn =空;
spiParams.mode = SPI_MASTER;
spiParams.bitrate = 4000000;
spiParams.dataSize = 6;
spiHandle1 = SPI_open (0、&spiParams);
spiHandle2 = SPI_open (1、&spiParams);

uint8_t transmitBuffer[1];

transmitBuffer[0]= 0xFF;

spiTransaction.count = 1;
spiTransaction.txBuf = transmitBuffer;
spiTransaction.rxBuf =空;


while (1){
TaskP_SLEEP (500);
SPI_transfer (spiHandle1、&spiTransaction);
SPI_transfer (spiHandle2、&spiTransaction);
UART_printf ("发送 SPI\n");
}
} 

之后、我检查了 TMDXICE110-BTA 板的引脚、没有任何反应。
我看了原理图、发现引脚头必须先通过将引脚 MII2_RXD0设置为低电平来启用。 但是在搜索了一个小时之后、我无法确定如何执行该操作。 首先、我需要通过某种方式定义我要与哪个引脚通信、我对吗?

这应该被写入一个 PIN-MUX 文件中。 但在哪里找到它呢? PROFINET_IRT_Slave_Datasheet 显示如下所示:

"实现 PROFINET IRT 从站功能所需的硬件信号如下所示、此信息需要
 与<a href="">">www.ti.com/.../PINMUXTOOL""> ti.com.cn/tool/cn/PINMUXTOOL"结合使用

那么、我是否需要创建我自己的 PINMUX-File?

或者如何与该项目讨论 SPI?

此致

Stefan

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

    您无需为 AMIC110 ICE 制作自己的 PINMUX 文件即可使 SPI 能够将其信号输出到 AMIC110 ICE 上的 J5。在 PDK 的 pinmux 文件中配置了除启用 PIN-heads 之外的 SPI 引脚(packages/ti\starterware\board\AM335x\AM335x_amic11x_pinmux_data 已经在 pdk.c 中配置)。

    是的、要使 SPI 能够将其信号输出到 AMIC110上的 J5、需要将 BUS_Switch_ENABLE 设置为低电平。 默认情况下设置的 pinmux/GPIO 不启用它、您可以手动将 BUS_Switch_ENABLE 设置为低电平。 下面是来自 EtherCAT - software-dl.ti.com/.../index_FDS.html 的示例代码 、您也可以参考它以了解 SPI 的使用。

    空 EnableBusSwitch()

    GPIOModuleEnable (SOC_GPIO_2_regs);
    GPIODirModeSet (SOC_GPIO_2_regs、21、GPIO_DIR_OUTPUT);
    GPIOPinWrite (SOC_GPIO_2_regs、21、GPIO_PIN_LOW);


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

    再次感谢您的回复!
    我今天已经准备好让 SPI 正常工作了、这正是您所描述的。 但是、现在我在哪里可以找到 pinmux 文件。

    但我遇到了另一个问题。 我希望在一帧中发送128位。 但是、当我将参数配置为超过32位时、SPI_open 会失败。 我目前不在我的 PC 上、因此我不知道确切的错误消息。 当我将其更改为更少的位时、它就会起作用。
    您有什么想法吗、问题可能出在哪?

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

    AMIC110的 SPI 中的最大位数为32。 来自 TRM:

    串行链路接口支持:
    –全双工/半双工
    –多通道主控或单通道受控操作
    –可编程1-32位发送/接收移位运算。
    –可选择4至32位连续 SPI 字长

    此致、
    Garrett
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有任何逻辑器帧? 如果是、我需要做什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我想,我明白了:)
    如果要发送超过32位的数据、我只需将 spiTransaction.count 设置为所需的值。 对吧?

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

    以下示例代码显示 spiTransaction.count 用法。 如果您将一个帧定义为 SPI CS 信号保持低电平、它实际上会发送最多32位的多帧。 如果在一帧(CS)中使用128位、您还需要通过更新控制模块寄存器(TRM、SPRUH73P.pdf 的9.3.1.50节)、将 AMIC110的 SPI0_CS0n A16引脚从默认的 spi0_cs0模式(0)配置为 GPIO0_5模式(7) 当 AMIC110配置为 SPI 主器件时、每次128位数据传输都会切换 GPIO0_5引脚。

    if (testID == SPI_TEST_ID_WORD_LEN)

    /*
    *字长可以是8/16/32位、
    *计算 SPI 字数
    *
    TransCount = testLen /(test->param / 8);
    xferBytes = transCount *(test->param /8);

    其他

    /*默认字长为8位*/
    TransCount = testLen;
    xferBytes = testLen;


    /*初始化从属 SPI 事务结构*/
    transaction.count = transCount;

    此致、
    Garrett