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.

[参考译文] LAUNCHXL-CC1310:CC1310

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1316854/launchxl-cc1310-cc1310

器件型号:LAUNCHXL-CC1310
主题中讨论的其他器件:CC1310

大家好!
我使用的是 SPI 从设备。
这要求主机发送一个8字节命令、并且从器件用一个 IRQ 进行响应、以使主机发出两个字节的模式更改(主机读取或主机写入)。
发送这两个模式更改字节时、预计将接收到8个字节的信息。
在浏览 Simplelink CC13XX SPI.h 示例时、我只注意到 TX 和 RX 缓冲区大小是相同的。
有人知道如何发送2个字节和接收8个字节吗?


我已经试过这个想法,但它不适合我。

transaction.count = 2;
transaction.txBuf =&data;
transaction.count = 8;
transaction.rxBuf =&RXdata;
spiTransferOk = SPI_TRANSMIT (REF2_SPI、&TRANSACTION);

此致。

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

    不确定我是否理解问题、查看您尝试实现的 SPI 图将会有所帮助。

    但是、如果您要从从器件读取8个字节、则主器件需要生成时钟并在 MOSI 线路上发送数据。 如果对从端没有什么要求、您可以发送所需的任何虚拟字节。

    假设您需要类似如下的内容:

    事务需要为10个字节(两个模式更改字节和8个虚拟字节)、并且从器件将在接收到模式更改字节后发送8个数据字节。 接收到的前两个字节无关、除非从器件在此处发送有用的内容。

    正如我所说的,如果我不知道你们到底在做什么,就不可能作出更具体的回答。

    Siri

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

    你好、Siri。

    下面是我希望实现的 SPI 波形图。

    仔细观察 IRQ 和 CS 信号。

    感谢您的帮助

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

    这是我为 L6470步进驱动器执行的操作。 此函数获得3个字节。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    uint32_t GetParam3(uint8_t param)
    {
    uint8_t rxdata = 0;
    uint32_t data = 0;
    // Send command
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
    SPI_transmitData(EUSCI_B0_BASE, GET_PARAM | param);
    while (!(SPI_getInterruptStatus(EUSCI_B0_BASE, EUSCI_SPI_TRANSMIT_INTERRUPT)));
    while (!(SPI_getInterruptStatus(EUSCI_B0_BASE, EUSCI_SPI_RECEIVE_INTERRUPT)));
    // should be 0
    rxdata = SPI_receiveData(EUSCI_B0_BASE);
    MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
    MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    请注意、第一个字节是我需要的参数、然后我发送 NOPS 以获取其他字节。

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

    我从 SDK 中获取了以下 SPI 主设备示例并将其进行了很大简化。

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    unsigned char masterRxBuffer[8];
    unsigned char masterTxBuffer[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    void *masterThread(void *arg0)
    {
    SPI_Handle masterSpi;
    SPI_Params spiParams;
    SPI_Transaction transaction;
    /* Open SPI as master (default) */
    SPI_Params_init(&spiParams);
    spiParams.frameFormat = SPI_POL0_PHA1;
    spiParams.bitRate = 4000000;
    masterSpi = SPI_open(Board_SPI_MASTER, &spiParams);
    if (masterSpi == NULL) {
    while (1);
    }
    transaction.txBuf = (void *) masterTxBuffer;
    transaction.rxBuf = (void *) masterRxBuffer;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在 SPI 上、如下所示:

    我的主器件未连接到任何从器件、因此在 MISO 上不返回任何内容、也没有中断线路

    Siri

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

    尊敬的 Keith Barkley:

    非常感谢您的贡献。

    此致。

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

    你好、Siri。

    非常感谢您的帮助:)
    发送虚拟字节的概念为我解决了部分问题。
    我将根据提供的信息和示例继续测试、获得结果后、我将立即报告测试结果。

    再让人怀疑的是、如何控制 CS 引脚状态变化时间? 在本例中、我将其路由到 DIO12引脚上、这与默认的 SPI 实现不对应。

    此致。

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

    CS 信号拉低和拉高时的时间由驱动器实现决定、不是可从应用中配置的参数。 你为什么要改变?

    请参阅以下博文、了解如何将 SPI 引脚分配给 CC1310 Launchpad 上未使用的引脚。

    (+) LAUNCHXL-CC1310:GPIO 引脚的配置过程-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    Siri

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

    在本例中、我使用3线 SPI 以便我控制 CS。 它是一个 GPIO (2.4)、正如我的代码中显示的那样、完全受程序控制。

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

    你好、Siri。

    您能检查图像吗?
    SPI 驱动器的低至高 CS 时间与从机模块所需的实现不匹配。
    我将以250 KHz 的速率从主器件发送帧、并且未从器件得到响应。

    我想知道微秒差是否会真正影响我的通信。
    有没有什么办法可以改善这种局面?
    此致。

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

    我忘记了在这些测试中、我使用的是 SPI 驱动器的默认引脚配置。

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

    如果 CSn 信号的时序不是 从机模块的问题、需要咨询从机模块供应商、我无法回答。

    如果您想手动控制 CSn、您可以  在 spiCC26XXDMAHWAttrs 中设置.csnPin = PIN_UN利用 、然后设置 CSn 信号以由应用程序控制(请查看我1月26日提到的帖子有关如何执行此操作)。

    应用程序可能如下所示:

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    unsigned char masterRxBuffer[1];
    unsigned char masterTxBuffer[1];
    void *masterThread(void *arg0)
    {
    SPI_Handle masterSpi;
    SPI_Params spiParams;
    SPI_Transaction transaction;
    /* Open SPI as master (default) */
    SPI_Params_init(&spiParams);
    spiParams.frameFormat = SPI_POL0_PHA1;
    spiParams.bitRate = 250000;
    masterSpi = SPI_open(Board_SPI_MASTER, &spiParams);
    if (masterSpi == NULL)
    {
    while (1);
    }
    transaction.txBuf = (void *) masterTxBuffer;
    transaction.rxBuf = (void *) masterRxBuffer;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Siri

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

    你好,Siri。
    通过应用所提供信息中的概念、我的问题已经得到解决。
    非常感谢。