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.

[参考译文] TMS570LC4357:MibSPI 通信-发送器和从器件配置

Guru**** 2451970 points
Other Parts Discussed in Thread: TMS570LC4357, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1228685/tms570lc4357-mibspi-communication---msater-and-slave-configuration

器件型号:TMS570LC4357
主题中讨论的其他器件: HALCOGEN

TI 团队、

我在使 MibSPI 正常工作时遇到了一些问题。 我想使用4引脚 MibSPI 1进行通信、即 MOSI、MISO、CLK、ENA。 以下是配置:

  1. 主器件:
    1. 主模式:被启用
    2. 内部时钟:被启用
    3. 等待启用:已启用
    4. 传输组0:CS_NONE、长度16
    5. SOMI[1]:GPIO:输出
    6. SOMI[0]:SPI:输入
    7. Simo[1]:GPIO:输出
    8. Simo[0]:SPI:输出
    9. CLK:SPI:输出
    10. ENA:SPI:输入
  2. 从器件:
    1. 主模式: 禁用
    2. 内部时钟:被禁用
    3. 等待启用:已启用
    4. 传输组0:CS_NONE、长度16
    5. SOMI[1]:GPIO:输出
    6. SOMI[0]:SPI: 输出
    7. Simo[1]:GPIO:输出
    8. Simo[0]:SPI: 输入
    9. CLK:SPI: 输入
    10. ENA:SPI: 输出

/* USER CODE BEGIN (0) */
/* USER CODE END */

/* Include Files */

#include "HL_sys_common.h"

/* USER CODE BEGIN (1) */
#include "HL_mibspi.h"
#define data_length 16
unsigned long counter1 = 0;
bool transmit_flag = 0;
/* USER CODE END */

/** @fn void main(void)
*   @brief Application main function
*   @note This function is empty by default.
*
*   This function is called after startup.
*   The user can use this function to implement the application.
*/

/* USER CODE BEGIN (2) */
/* USER CODE END */

int main(void)
{
/* USER CODE BEGIN (3) */
    uint16 tx_data[data_length] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};

    uint16 rx_data[data_length] = {0};

    _enable_IRQ_interrupt_();

    mibspiInit();

    mibspiEnableGroupNotification(mibspiREG1, 0, 1);

    // mibspiEnableLoopback(mibspiREG1, Analog_Lbk);

    while(1)
    {
        if(transmit_flag == 0)
        {
            mibspiSetData(mibspiREG1, 0, &tx_data[0]);
            mibspiTransfer(mibspiREG1, 0);
            transmit_flag=1;
        }
        /* if(mibspiIsTransferComplete (mibspiREG1, 0))
        {
            transmit_flag=0;
        }*/
    }
    // while(!(mibspiIsTransferComplete (mibspiREG1, 0)));

    // mibspiGetData(mibspiREG1, 0, &rx_data[0]);

    while(1);
    /* USER CODE END */

    return 0;
}


/* USER CODE BEGIN (4) */
void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group)
{
    printf("\n Transfer %d completed!!", counter1);
    printf("\n");
    counter1++;
    transmit_flag = 0;
}
/* USER CODE END */

/* USER CODE BEGIN (0) */
/* USER CODE END */

/* Include Files */

#include "HL_sys_common.h"

/* USER CODE BEGIN (1) */
#include "HL_mibspi.h"
#define data_length 16
unsigned char rx_data[data_length] = {0};
unsigned long counter1 = 0;
bool receive_flag = 1;          // this value is initialized to 1 becasue, the SPI transfer function shall only execute when the data is received.
                                // Hence, the moment any data is received on SPI receive buffer, Group Notification function will execute.
                                // This will set the flag value to 0 and then the received data will be processed.
/* USER CODE END */

/** @fn void main(void)
*   @brief Application main function
*   @note This function is empty by default.
*
*   This function is called after startup.
*   The user can use this function to implement the application.
*/

/* USER CODE BEGIN (2) */
/* USER CODE END */

int main(void)
{
/* USER CODE BEGIN (3) */

    _enable_IRQ_interrupt_();

    mibspiInit();

    mibspiEnableGroupNotification(mibspiREG1, 0, 1);

    while(1)
    {
        // if(receive_flag == 0)
        {
            mibspiTransfer(mibspiREG1, 0);
            // receive_flag = 1;
        }
    }
/* USER CODE END */

    return 0;
}


/* USER CODE BEGIN (4) */
void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group)
{
    uint16 *data;
    data = &rx_data[0];
    mibspiGetData(mibspi, group, data);
}
/* USER CODE END */

问题: 无法在从器件上接收数据

查询:  我认为 ENA 引脚的数据传输启用存在一些问题。 如何将与 ENA 相关的程序加入到我的代码中?  

此致、

萨梅尔

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

    Sameer、您好!

    我们已着手解决您的问题、并将很快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    好的。 我将等待您的回答。  

    谢谢。

    萨梅尔

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

    您好 Jagadish:

    您有机会了解一下吗?

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

    Sameer、您好!

    我想用 ENA 创建一个示例、我想对其进行测试并对其进行更新。

    --

    谢谢。此致、
    Jagadish。

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

    Sameer、您好!

    正如我告诉过您的、我使用 ENA 创建了一个示例项目。

    您能测试一下并更新我吗? 我现在没有设置来测试它。

    e2e.ti.com/.../MibSPI_5F00_Master_5F00_with_5F00_ENA_5F00_TEST_5F00_LC4357.zip

    e2e.ti.com/.../MibSPI_5F00_Slave_5F00_with_5F00_ENA_5F00_TEST_5F00_LC4357.zip

    --

    谢谢。此致、
    Jagadish。

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

    感谢您分享 Jagadish 的文件。 我会检查并返回给您。

    此致、

    萨梅尔

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

    您好 Jagadish:

    我已经介绍了您的示例。 我不知道该怎么说。" 通过分析、我发现了几个问题:  

    • 主器件和从器件的 TG 长度不相同。 对于主器件、此字节为128字节、而对于从器件、此字节为8字节。 在代码中、创建的 Tx 和 Rx 数组为10个字节。
    • 对于主器件、等待已选中启用、而对于从器件、未选中启用。  

    这是否就是该示例最终不起作用的原因之一?

    我再次学习了 TRM、并使用我自己的4引脚 MibSPI 创建了项目。 它不能 正常工作。 您能检查一下吗? 附件中包含用于主器件和从器件的 sys_main.c 和用于主器件和从器件的 HCG 文件。

    请告诉我,从我的最后是否需要其他细节。  

    e2e.ti.com/.../ENA-pin-.zip

    谢谢。

    Sameer。

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

    Sameer、您好!

    我将验证并更新您的信息。

    --

    谢谢。此致、
    Jagadish。

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

    感谢 Jagadish 的感谢。 我误点击了"这个问题解决了我的问题"按钮。 您可以撤消吗?

    此外,我预计明天会有任何更新吗?

    此致、

    萨梅尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我误点击了"这解决了我的问题"按钮。 您能否撤消它?

    没问题。

    此外,我是否可以预计明天进行任何更新?

    当然、我明天会尽量提供最新情况。

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

    Sameer、您好!

    以下是工作项目。

    e2e.ti.com/.../8446.MibSPI_5F00_Master_5F00_with_5F00_ENA_5F00_TEST_5F00_LC4357.zip

    e2e.ti.com/.../6064.MibSPI_5F00_Slave_5F00_with_5F00_ENA_5F00_TEST_5F00_LC4357.zip

    基本上、我发现了两个问题、即我以前的项目无法正常工作。

    1.如果您使用 TMS570LC4357 HDK 板、则应确保 DIP_SWITCH_4的1和4按钮处于关闭状态。

    这很重要、因为 SPI ENA 引脚连接到一个多路信号分离器、它具有多个功能、因此要将此 ENA 引脚连接到 J9连接器、我们应该关闭1个和4个按钮。

       

    2.有时,我发现只有一部分数据正在移动到终端缓冲区"Rx_data1",即使 MIB SPI Rx 缓冲区接收所有数据。

    调试后、我发现这是由于"mibspiGetData"函数中缺少 RXEMPTY 标志验证所致。

    如果上面突出显示的行不存在、那么我们只是将整个 MIB SPI Rx 缓冲区数据移动到目标缓冲区、甚至不验证是否接收到新数据、因为这一点有时会有一些字节作为零移动到目标缓冲区。

    在确保完成上述两项任务之后、我成功地在 MibSPI 主设备和从设备之间接收了数据。

    --

    谢谢。此致、
    Jagadish。

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

    感谢您分享 Jagadish 项目。 我会检查并返回给您。  

    由于我将使用 LaunchXL2、因此第一点不适用于我的开发。  

    第2点、我签入了代码、但代码行不在那里。 是否需要手动添加?  

    此致、

    萨梅尔

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

    Sameer、您好!

    第2点我检查了我的代码,但该行不存在。 是否需要手动添加?  [/报价]

    是的、需要手动添加。

    --

    谢谢。此致、
    Jagadish。

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

    另一个查询 Jagadish。 您的实现不使用 MIBSPI 中断。 而我共享的中断涉及中断(通过启用组通知)、那么、如果我要在实现中使用中断、那么我还需要将此行添加到代码中?

    谢谢。此致、

    萨梅尔

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

    Sameer、您好!

    另一个查询 Jagadish。 您的实现不使用 MIBSPI 中断。 而我共享的中断涉及中断(通过启用组通知)、因此、如果我要在实现中使用中断、那么还需要将此行添加到代码中?

    最好将其用于中断代码、

    我添加的条件将在读取该数据之前仅检查新数据是否在相应的 TG 缓冲区中可用。 因此、最好添加它。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    我认为您分享的这个项目也在我结束时发挥了作用。 我仍希望对其进行以下修改并给予您最终确认:

    • 对基于中断的 配置实现了相同的内容
    • 针对256字节传输实现相同的配置、
    • 以较高的波特率实施。

    但是、对于当前实现、我有一个关联的问题。 虽然我们保持了一切不变、但为什么从主器件到从器件的传输速率存在差异、反之亦然? 请参阅以下屏幕截图。 正如可以看到的,橡皮 在3到4个循环的50次传输引领奴隶。  

      

    谢谢。此致、

    萨梅尔

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

    您好 Jagadish:

    在继续我之前的查询时、如果我暂停从器件的执行、主器件不应该发送、是正确的(因为它不会接收到使能信号)吗? 然而、在本例 中、即使从站执行已暂停(在调试角度)、主站仍在继续传输。

    相反、当我暂停主器件的执行时、从器件会自动暂停。

    是因为我们在 HALCoGen 中对主器件启用了"等待 ENA"、而对从器件启用了"等待 ENA"?

    在我进一步调试时、还有一点需要注意:

    当我从主板移除从主板到从属板的 ENA 电缆时、代码仍在运行。 两个器件都继续发送和接收数据。 所以、我认为有一些问题。

    谢谢。此致、

    萨梅尔

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

    Sameer、您好!

    正如可以看到的那样,maser 以3-4个循环50次传输引领奴隶。  [/报价]

    我必须对此进行分析、您是否有可能分享您的整个项目?

    如果我暂停从设备的执行、主设备不应发送、是否正确(因为它不会接收到使能信号)?

    是的、应该如此、但请确保您配置的 ENA 引脚的默认状态。

    在主侧、确保启用上拉。

    在从器件侧、确保保持 DOUT=1且上拉电阻处于启用状态。

    在进行上述修改后、现在对其进行测试、如果仍然存在问题、我将在结束时进行测试、并为您提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    我对拖延答复表示歉意。  

    现附上以下项目:

    e2e.ti.com/.../MibSPI1_5F00_Master_5F00_Jagadish.zip

    e2e.ti.com/.../MibSPI1_5F00_Slave_5F00_Jagadish.zip

    是的、应该如此、但请确保您配置的 ENA 引脚的默认状态。

    在主侧、确保启用上拉。

    在从器件侧、确保保持 DOUT=1且上拉电阻处于启用状态。

    在进行上述修改后、现在对其进行测试、如果仍然存在问题、我将在结束时进行测试、并为您提供更新。

    [/报价]

    我今天尝试了这种方法。 但是、存在相关的问题。 当 ENA 的引脚处于下拉模式时、正如我在之前的回复中确认的那样、发生了主从通信。 但是、当我按照建议将其更改为上拉时、传输完全不会开始。 代码等待时间 同时 PSpice 语句。 您能否在结束时查看此内容?

    谢谢。此致、

    萨梅尔

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

    您好 Jagadish:

    您能深入了解一下吗?

    此致、

    萨梅尔

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

    Sameer、您好!

    处理您的问题、并在当天结束前提供更新。

    --
    谢谢。此致、
    Jagadish。

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

    Sameer、您好!

    如果我暂停从设备的执行,主设备应该不会发送,是否正确(因为它不会收到启用信号)?

    对于前面的答案、很抱歉、

    实际上、暂停调试不会使 ENA 引脚值变为逻辑高电平。

    实际上、SPIENA 将按以下方式工作

    在我们将数据写入 SPIDAT0寄存器后、它将变为低电平有效、一旦进行数据移位、它将再次变为高电平。 这是 SPI 的行为、但对于 MibSPI、情况还是不同。

    对于 MibSPI、它在调用函数"mibspiTransfer"后变为低电平有效

    因为这将启用数据传输权利。

    但我所观察的是、在传输所有数据后、ENA 引脚不会恢复到逻辑高电平。

    它只有在我们调用函数"mibspiReset"后才回来。

    --

    谢谢。此致、
    Jagadish。

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

    感谢您发送编修。  

    那么、对于我的实现、我如何使它工作呢? 也就是说、一旦主器件接收到从器件发送的 ENA 信号、它就只进行发送、否则它会等待从器件发送的信号?

    另外、能否对我分享的项目进行分析? 将引脚上拉(在主器件侧)完全不发送数据!

    谢谢。此致、

    Sameer。

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

    Sameer、您好!

    此外,您能分析我分享的项目吗? 将引脚上拉(在主侧)完全不会传输数据!

    下面是我结束时的工作主器件和从器件代码。

    将其与您的项目进行一次比较:

    e2e.ti.com/.../0841.MibSPI_5F00_Master_5F00_with_5F00_ENA_5F00_TEST_5F00_LC4357.zip

    e2e.ti.com/.../5810.MibSPI_5F00_Slave_5F00_with_5F00_ENA_5F00_TEST_5F00_LC4357.zip

    在本项目中、我启用了主侧的上拉电阻。

    如果问题仍然存在、我将再次尝试在我身边调试您的项目一次。

    --
    谢谢。此致、
    Jagadish。

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

    Sameer、您好!

    那么,对于我的实施,我该如何使它起作用? 也就是说、一旦主器件从从器件接收到 ENA 信号、它就只发送、否则它会等待从器件的信号?

    如果从器件调用函数 "mibspiTransfer"、则意味着从器件准备好与主器件进行通信。 因此、在从器件就绪后在从器件侧调用此函数、一旦从器件调用此函数、主器件将发送时钟及其数据、并且与该从器件并行还将其数据发送给主器件。 这样、两者都可以交换数据。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    感谢您共享项目文件。 我还在我的终端评估了代码、并发现了以下内容:

    1. 如果 ENA 设置为在主器件侧上拉、则主器件和从器件之间的数据传输根本不会开始。 当我在 HALCoGen 中将其更改为下拉状态时、仍然可以使用相同的代码。  
      1. 执行期间我是否遗漏了任何东西? 请查找我的执行过程的以下步骤:
        1. 主器件和从器件:更改工程属性:将调试器设置为 XDS110、将编译器版本设置为 TI V20.2.5.LTS。
        2. 主器件和从器件: 将闪存设置更改为仅必要的扇区。  
        3. 仅主机:在调试模式下运行项目。
        4. 仅从器件:在调试模式下运行项目。  
      2. 我还尝试了交换执行序列、即 D 在前、C 在后。 但是,它没有区别。  
    2. 如果我们要重置从器件、为什么需要单独清除 Rx 缓冲区?
    3. 请在下面找到我的项目:
      1. 在我的项目中、通信会一直起作用、直到主器件的 ENA 被拉低。 我拉高电阻的那一刻、通信就会停止。 附加的视频供您参考(显示下拉状态期间的通信)。 而当 ENA 被下拉时、它对4引脚 MibSPI 没有影响。 也就是说、如果我移除 ENA 连接、数据传输会继续。  
      2. 我之前说过的另一件奇怪的事情是、当我首先启动主设备时、通信运行顺畅。 如果我先启动从设备、则主频率会减半。 即、对于每一次由 主器件发送的传输、从器件发送两次。  

    e2e.ti.com/.../MibSPI_5F00_Master_5F00_with_5F00_ENA_5F00_H1.zip

    e2e.ti.com/.../MibSPI_5F00_Slave_5F00_with_5F00_ENA_5F00_H1.zip

    e2e.ti.com/.../MibSPI.mp4

    如果您需要我帮助解决此问题、请告诉我。

    此致、

    Sameer。

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

    Sameer、您好!

    如果 ENA 设置为主端上拉,则主机和从机之间的数据传输根本没有开始。 当我在 HALCoGen 中将其更改为下拉状态时、仍然可以使用相同的代码。  
    [/报价]

    如果它仅在更改为下拉意味着后工作、则此 ENA 线路实际上不由从器件驱动。 我的意思是,即使您完全移除了主设备和从设备之间的 ENA 线路,您的通信也会起作用(您也可以在没有 ENA 线路的情况下看到相同的行为)。

    我这边正在处理相同的代码、因此可能不会有任何代码问题、您能否正确检查硬件连接?

    如果问题仍未得到纠正、我们将尽可能在您身边安排一个实时调试会话。 我将在 IST 的上午10点至晚上7点之间有空、只需在会议上创建并分享详细信息即可。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    您能深入了解一下吗?

    谢谢。

    Sameer。

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

    Sameer、您好!

    让我们计划一个实时调试会话、只需共享您的屏幕并在通话中显示问题即可。

    只需让我知道你明天的空闲时间。

    我将在印度标准时间(IST)上午10点至下午6点开放。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    我的 CCS 系统存在互联网连接问题、因此无法共享我的屏幕。 我可以捕获视频并在此处分享吗? 如果需要、您希望我捕获的只是什么?

    您是否有其他方法可以帮助我解决此问题?

    谢谢。此致、

    萨梅尔

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

    Sameer、您好!

    视频没有太大帮助。

    通过进行屏幕分享、很容易在电话中进行讨论。 在我们的组织中、我们将使用 WebEx 进行会议;如果您也在组织中使用 WebEx、我们可以拨打电话并讨论问题、即使您使用的是适合我的任何其他会议应用、我也可以下载并进行呼叫。

    --
    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    我想最后一个答案是其他帖子吗?

    此致、

    萨梅尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我认为最后一个答案是一些其他帖子?

    你是对的。

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

    您好 Jagadish:

    正如我们在电话里讨论的那样、我尝试了实施您的建议。 请回答如下:

    1. 尝试从单台计算机运行代码。
      1. 无论它是同一台计算机还是不同的计算机、都没有关系。 我尝试了按照您的建议从单台计算机运行调试会话。 不过、结果保持不变。  
      2. 我观察到的情况是从器件没有足够的时间从其 ISR 返回、因此从器件的计数器值不会增加。  
    2. 重要观察结果:
      1. 观察结果1:  无论是单台计算机还是两台不同的计算机、如果从设备在两次传输之间有足够的时间、则所有操作都会按所需方式运行。 我是通过在主 ISR 调用中引入一个 printf 行来实现这一点的。 因此、在主设备打印新行时、从设备完成其 ISR 并使其计数器递增、然后再发送。  
      2. 观察结果2:  如果我们在从 ISR 中添加额外的线路、那么主器件将在没有从设备就绪信号的情况下继续发送数据、因此从器件将不会退出 ISR 执行、从而 一次又一次地发送相同的值。  
      3. 观察结果3:  如果我们先运行主器件代码、然后运行从器件、则问题仍然正常、因为主器件不允许从器件退出 ISR。 但是、如果首先运行从器件、然后运行主器件、那么执行会正常运行。  

    请提出进一步行动建议。

    此致、

    萨梅尔  

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

    Sameer、您好!

    非常感谢您的详细介绍

    我将再次进行测试、并在明天提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:  

    除了前面的问题、您还可以提供 通过 MibSPI 实现相同256字节传输所需的修改建议? 我想我能够使用4引脚 MibSPI 进行通信。 我在再进行一些测试后、仍会向您提供最终确认。  

    请注意、对于 MIBSPI 环回实现、我已经实现了256字节传输(参考文章: https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1206854/faq-tms570lc4357-how-to-enable-256-buffers-extended_buf_ena-feature-of-mibspi/4553473#4553473)。

    在实现3引脚 MibSPI 时、尽管执行了上述文章(https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1213532/tms570lc4357-tms570lc4357-mibspi-master-and-slave-communication/4709365#4709365)中提供的步骤、但我一次无法传输超过128个字节。

    谢谢。此致、

    Sameer。

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

    Sameer、您好!

    我的第一个疑问是、请确认您在 TMS570LC4357控制器中将 MibSPI1用于主器件和从器件。

    除了 MibSPI1、没有其他 MibSPI 将支持256个缓冲器。 因此、我们应该在主器件和从器件两侧都只使用 MibSPI1。

    如果您正确执行了上述操作、请使用以下主器件和从器件项目作为参考:

    e2e.ti.com/.../4666.MIBSPI1.zip

    e2e.ti.com/.../MibSPI1_5F00_Extended_5F00_buffer_5F00_testing_5F00_slave_5F00_LC4357.zip

    与您的项目唯一的区别应该是 CS0和 ENA。 在上面的项目中、我使用了 CS0、但我没有配置 ENA、但其余的一切都是一样的、这是正常工作的。 因此、请将上述项目作为参考并进行必要的修改。

    另外、请确保配置我在下面的常见问题解答中提到的所有设置、因为这些设置对于扩展缓冲模式是必需的。

    (14)[常见问题解答] TMS570LC4357:如何启用 MibSPI 的256缓冲区/EXTENDED_BUF_ENA 功能? -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    感谢您的及时响应。 我知道只有 MibSPI 1能够支持扩展缓冲器、因此 只使用 MibSPI 1 。  

    我将尝试评估你提供的项目,并尽快返回给你。  

    与您的项目唯一的区别应该是 CS0和 ENA。 在上面的项目中、我使用了 CS0、但我没有配置 ENA、但其余的一切都是一样的、这是正常工作的。 因此,请将上述项目作为参考并进行必要的修改。

    有没有任何理由 为什么我不能在具有 ENA 和没有 CS0的4引脚模式下使用 MibSPI ? 这是我实施上一个项目并考虑实际开发的方式、因此 ENA 需要用于我的终端应用。

    另外、请确保配置我在下面的常见问题解答中提到的所有设置、因为这些设置对于扩展缓冲模式是必需的。

    (14)[常见问题解答] TMS570LC4357:如何启用 MibSPI 的256缓冲区/EXTENDED_BUF_ENA 功能? -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    [/报价]

    是的,我确实遵循了所有这些事情。  

    谢谢。此致、

    Sameer。

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

    Sameer、您好!

    是否有任何理由 为什么我不能在具有 ENA 和没有 CS0的4引脚模式下使用 MibSPI ? 因为这是我实施先前项目并考虑实际开发的方式,ENA 将需要用于最终应用。

    没有理由、你可以使用 ENA。 由于我有一个带有 CS0的项目、因此我对现有的项目进行了修改。 但您可以使用 ENA 来代替 CS0。

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    非常感谢您的帮助。 我现在能够将其用于256个大小的缓冲器。 但我没有使用 CS0。 我继续使用4引脚 MibSPI (MOSI、MISO、CLK 和 ENA)。 代码似乎正常运行。  

    不过我还有一个疑问。 是否有可能为使用动态内存分配自定义此代码?  

    1. 在第一个版本的代码中,我声明 TX_DATA[256]和 RX_DATA[256] 。 在10000kHz 波特率下、端到端 MibSPI 通信运行良好。
    2. 在第二个代码版本中,我将 TX_DATA 声明为 CHAR*并动态分配其内存,同时保持其余部分相同。 在这种情况下、会发生一些随机数据传输。 附件是用于您的即用型参考的代码。  

    /* USER CODE BEGIN (0) */
    /* USER CODE END */
    
    /* Include Files */
    
    #include "HL_sys_common.h"
    
    /* USER CODE BEGIN (1) */
    #include "HL_mibspi.h"
    #define data_length 256
    unsigned long counter1 = 0;
    bool transmit_flag = 0;
    
    // uint16 tx_data[data_length] = {0};
    char *tx_data;
    
    uint16 rx_data[data_length] = {0};
    
    void load_data_function()
    {
        tx_data = (char*)malloc(data_length*sizeof(char));
        unsigned int l = 0;
        for(l=0; l<=data_length; l++)
        {
            tx_data[l] = l+20;
        }
    }
    /* USER CODE END */
    
    /** @fn void main(void)
    *   @brief Application main function
    *   @note This function is empty by default.
    *
    *   This function is called after startup.
    *   The user can use this function to implement the application.
    */
    
    /* USER CODE BEGIN (2) */
    /* USER CODE END */
    
    int main(void)
    {
    /* USER CODE BEGIN (3) */
    
        _enable_IRQ_interrupt_();
    
        mibspiInit();
    
        mibspiEnableGroupNotification(mibspiREG1, 0, 1);
    
        // mibspiEnableLoopback(mibspiREG1, Analog_Lbk);
    
        load_data_function();
    
        while(1)
        {
            if(transmit_flag == 0)
            {
                tx_data[data_length-1] = counter1+10;
                mibspiSetData(mibspiREG1, 0, *tx_data);
                mibspiTransfer(mibspiREG1, 0);
                transmit_flag=1;
            }
        }
    
        while(1);
        /* USER CODE END */
    
        return 0;
    }
    
    
    /* USER CODE BEGIN (4) */
    void mibspiGroupNotification(mibspiBASE_t *mibspi, uint32 group)
    {
        counter1++;
        transmit_flag = 0;
        mibspiGetData(mibspi, group, &rx_data);
        if(counter1 % 100 == 0)
        {
            printf("\n Transmitted data is :: %d !!", tx_data[data_length-1]);
            printf("\n Received Data is :: %d", rx_data[data_length-1]);
        }
    }
    /* USER CODE END */
    

    您能指导一下吗?

    谢谢。此致、

    Sameer。

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

    Sameer、您好!

    对迟交的答复表示歉意。

    我想您以前发送和接收具有16位帧的数据、但现在为什么要声明 具有8位大小的 TX_DATA 指针?

    您选择的8位或16位格式是什么?

    --

    谢谢。此致、
    Jagadish。

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

    您好 Jagadish:

    在指定数据类型时出错、我们深表歉意。 它只有16位。 相对于我之前的实施、该参数没有变化。

    我在这里要尝试实现的是为要传输的数据进行动态内存分配。 在当前实现中、我用于将 TX_DATA 声明为256字节的静态数组。 但是、我希望它是动态的。 现在、将一个变量声明为动态变量、为其分配所需的存储器是我已经实现的。 唯一的问题是如何通过 mibspiSetData 和 mibspiTransfer 函数发送它。 这是我需要你帮助的地方。

    请告诉我、我是否需要就此输入其他信息。

    此致、

    萨梅尔

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

    Sameer、您好!

    为了便于跟踪、我将在此处添加我们的邮件对话。

    e2e.ti.com/.../RE-EXTERNAL-TI-E2E-reply.zip

    很高兴听到您的问题已解决。

    --

    谢谢。此致、
    Jagadish。