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:具有 DMA 缓冲器传输 CS 的 MibSPI 问题

Guru**** 2477075 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/995129/tms570lc4357-mibspi-with-dma-buffer-transfer-cs-issue

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

您好!

我正在两个 TMS570LC4357控制器之间进行数据传输、两个端 MibSPI-1都与 CS0、CLK、MISO/0]、MOSI[0]和 ENA 引脚连接。 我使用代码从示例中配置 DMA。 当我在 ECONT 为4和 FCOUNT 为4的条件下进行测试时、数据传输正常。 根据我的应用要求 、将 DMA 缓冲器传输的 ECOUNT 配置为94、将 FCOUNT 配置为4。 传输最初是可以的、但在几次传输后、数据开始滚动。 我已开始使用 SPI 分析器进行检查。

采用4x4数据的 CS 插入非常清晰、CS 是定期插入的。 对于较大的缓冲区传输、CS 看起来稍有不同、希望检查可能出现的问题。

整个缓冲区看起来是这样的。

放大第一部分(有2组相同的缓冲区)

进一步缩放(每个为4个字、每个字16位)

 缩放大缓冲区(有90个字、每个字16位)

共计4+4+90+4+4+90+4+4+4+90+4+4+4+4+4+90(共计98 x 4)

CS 在较大缓冲区期间不一致、如下所示(不确定原因)

  

如下所示的 DMA 配置。

/*-初始化传输组*/
mibspiREG1->TGCTRL[0U]=(uint32)((uint32) 1U << 30U)//OneShot
|(UINT32)((UINT32) 0U << 29U)//pcurrent 复位
|(UINT32)((UINT32) TRG_AYeUS<< 20U)//触发事件
|(UINT32)((UINT32) TRG_DISABLED << 16U)//触发源
|(uint32)((uint32) 0U << 8U);//开始缓冲区

mibspiREG1->TGCTRL[1U]=(uint32)((uint32) 1U <<30U)//OneShot
|(UINT32)((UINT32) 0U << 29U)//pcurrent 复位
|(UINT32)((UINT32) TRG_Always << 20U)//触发事件
|(UINT32)((UINT32) TRG_DISABLED << 16U)//触发源
|(uint32)((uint32) 98U << 8U);//开始缓冲区

//MibSPI1 TG0
对于(i=0;i<3;i++)

mibspiRAM1->TX[i]。control =(uint16)((uint16) 5U << 13U)//缓冲模式
|(uint16)((uint16) 1U << 12U)//芯片选择保持
|(uint16)((uint16) 0U << 10U)//启用 WDELAY
|(uint16)((uint16) 0U << 11U)//锁定传输
|(uint16)((uint16) 0U << 8U)//数据格式
|((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);//芯片选择

mibspiRAM1->TX[3].control =(uint16)((uint16) 5U << 13U)//缓冲模式
|(uint16)((uint16) 0U << 12U)//芯片选择保持
|(uint16)((uint16) 0U << 10U)//启用 WDELAY
|(uint16)((uint16) 0U << 8U)//数据格式
|((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);//芯片选择

//MibSPI1 TG1
(i=4;i<7;i++)

mibspiRAM1->TX[i]。control =(uint16)((uint16) 5U << 13U)//缓冲模式
|(uint16)((uint16) 1U << 12U)//芯片选择保持
|(uint16)((uint16) 0U << 10U)//启用 WDELAY
|(uint16)((uint16) 0U << 11U)//锁定传输
|(uint16)((uint16) 0U << 8U)//数据格式
|((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);//芯片选择

mibspiRAM1->TX[7]。control =(uint16)((uint16) 5U << 13U)//缓冲模式
|(uint16)((uint16) 0U << 12U)//芯片选择保持
|(uint16)((uint16) 0U << 10U)//启用 WDELAY
|(uint16)((uint16) 0U << 8U)//数据格式
|((uint16)(~((uint16) 0xFFU ^(uint16) CS_0))和(uint16) 0x00FFU);//芯片选择

/* TG 起始地址。 PSTARTx 存储相应 TG 的起始地址。 相应的*/
/*结束地址由后续 TG 起始地址减1 (PENDx[TXG]=*/)内在定义
/* PSTARTx[TGX+1]-1)。 在以下情况下,PSTARTx 被复制到 PCURRENTx 中:*/
for (i=0;i<8;i++)

tgPSTART1[i]=(mibspiREG1->TGCTRL[i]>> 8)& 0xFF;

在插入之前和之后、我已经为 CS 和 ENA 引脚提供了足够的延迟。

数据也是 UINT16大小的简单数组。

寻求帮助以了解问题可能是什么以及如何解决。

Chandra

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

    您好  Chandra、

    根据您的帖子中的代码、MibSPI1 TG0有98个缓冲区(TG1的起始位置)。 但是 MibSPI RAM 配置与 TGxCTRL 寄存器中定义的 TG0和 TG1不一致。

    请使用 HALCogen 生成 MibSPI 代码。

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

    您好、Wang、

    感谢您的回复。 我修改了我的示例并使用了 HALCoGen 生成的配置。 我仍然看到中 RX 上的一致数据和 CS 信号中的不连续性。 我还在为主设备和从设备连接我的示例项目。 您能否检查并帮助我解决问题?

    查看以下内容- 3个数据包、包含98 X 4数据

    缩放一个数据包

    缩放一个帧

    缩放帧没有正确的时钟

    计时不当


    e2e.ti.com/.../TMS570LC4357_5F00_MibSPI1_5F00_DMA_5F00_Master_2600_Slave.zip

    Chandra

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

    您好  Chandra、

    我在上一个图中看到了不正确的 SPI 时钟。  

    在 MibSPI 配置中、在主器件侧和从器件侧都将 CSHOLD 设置为1。 因此、CS 引脚不应 在两次缓冲器传输(在一帧传输中)之间失效。 为什么在上一个图表中 CS 无效:

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

    在从设备侧、如果禁用 CSHOLD、则对 CS 信号的取消应答将触发将接收到的数据复制到 RXRAM。 如果 CSHOLD 被置位、 MibSPI 不等待 SPICS 取消对  将接收到的数据复制到接收 RAM 的判断。 我的理解是、缓冲区传输之间的 SPICS 切换不应影响 SPI 从设备中的数据接收。

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

    您好、Wang、

    我的问题是主设备和从设备上的 Rx 数据。

    数据大部分时间被一帧或两帧偏移。 在两者之间、我们有适当的对齐方式。

    更清楚的是、对于从器件上的第一个实例、第一个元素数据将为0x5A00、几次传输后将为0x5A62、几个周期后可以为0x5A00或0x5B26。 这种起始帧与 RAM 的对齐方式不一致。 不确定原因是什么。 我们还连接了 ENA 线。 我已经在 1MHz 波特率和20MHz 之间进行了检查。 结果相同。 我希望您能查看并运行我的代码。

    Chandra

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

    您好、 Chandra、

    我们能否在同一器件上使用 MibSPI1和 MibSPI3产生这种问题? MibSPI 被用作主器件、而 MibSPI3被用作从器件。  

    我只有一个 LC43x Launchpad 来运行您的代码。

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

    大家好、我想举一个例子、我已经从 e2e 论坛下载了一个示例、这个示例由您发布、具有带有 DMA 的 MibSPI 1和3通道。 但我无法看到它在我的板上工作。 不确定问题是什么。 如果这是有效示例、我可以尝试修改此示例以模拟我的问题。 您能否查看电路板上的工作示例或需要一些修复? 很抱歉、我给您带来麻烦、但我已经用此示例尝试了三天、但不适用于 me.e2e.ti.com/.../TMS570LC4357_5F00_MibSPI1_2D00_3_5F00_DMA.zip

    Chandra   

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

    您好、Chandra、

    示例工程包括两个链接器 cmd 文件:hL_sys_link.cmd 和 hL_sys_link_ecc.cmd。

    1.如果使用 hL_sys_link.cmd (从编译中排除其他链接 cmd)、请在将程序加载到闪存时检查"Auto ECC generation"

    2.  如果使用 hL_sys_link_ecc.cmd (从编译中排除其他链接 cmd)、请取消选中"Auto ECC generation"并为"Flash Verification Settings"选择"none"。 要启用链接器 ECC 生成、请更改项目链接器输出设置:

    我刚刚测试了项目、它可以正常工作。

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

    您好、Wang、

    我能够执行该示例、并使用 dmaGroupANotification 而不是 mibspiGroupNotification 修改了代码。 它使用 的是 TMS570LC43x Hercules 开发套件(HDK)。 我已开始使用 FreeRTOS 创建项目、并执行多项任务来重新生成问题。 在测试期间、我的 HDK 出现故障、我尝试在 Launchpad 上测试相同的代码。 令人惊讶的是、两侧都没有 RX 数据。 我已验证所有配置、一切看起来都正常。  您能为我验证一下代码吗? 可能是我的 Launchpad 也很糟糕!! 此外、我还计划更改 HDK 上的控制器。 当我尝试订购几个样片时、我无法订购。 您能不能帮助我获取控制器的样片。 之前、我在 e2e 帮助下获得了一些 DAC 芯片、为我提出了请求。  

    Chandrae2e.ti.com/.../TMS570LC4357_5F00_MibSPI1x3_5F00_DMA.zip

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

    您可以在此处订购样片: www.ti.com/.../TMS570LC4357

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

    您好、Sunil、我收到以下消息 :"您的公司或大学无权从德州仪器订购免费样片。 如果您已访问此页面、则表示您无法申请样片订单"。 我已经尝试过 Infosys 帐户和 NTU 帐户、但遗憾的是、仍然有相同的消息。 这就是寻求您帮助的原因。

    此致、

    Chandra

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

    这些器件不提供免费样片、必须订购。 根据您订购的卷自动报价。

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

    您好、Sunil、我在使用 DAC 时遇到了相同的问题、由于收到了相同的消息、我得到了 e2e 代表订购的样片。 我将在定制板制造商的开发活动中订购控制器。 当我在新加坡与研发团队合作时、订购和获取这些商品需要很长时间才能完成处理。 我得等待。 感谢您提供相关信息。

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

    它在我的 LaunchPad 上不起作用。  

    注意到在 MibSPI1/3配置中选中了"Wait for Enable"、是否将 MibSPI3_Nena 连接到 MibSPI1_Nena?  

    我禁用 了"等待启用"、代码正常工作。

    mibspiInit();

    mibspiREG1->FMT0 &=(0xFFDFFFFF);//禁用“等待启用”
    mibspiREG3->FMT0 &=(0xFFDFFFFF);

    这是 RX 数据和 TX 数据:

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

    您好、Wang、

    感谢您多次检查代码。 我正在使用连接在电路板上的使能信号。

    最后、我可以制作代码来重现我在单板上面临的问题(帧丢失)。 这是 FreeRTOS 项目。

    文件夹 HL_include 和 HL_SOURCE 中的代码从 Halcogen 生成的代码中手动合并。

    我要附上代码。 请检查、并连接使能引脚。

    一些问题。

    当 BTC 中断被命中时、我将重新配置 DMA 以触发 TX。 可能是这不正确。 请告诉我、正确的方法是什么。

    为了在两个通道之间同步 TX 和 RX、我使用缓冲模式5 (等待直到 TX 满)。 请注意、我的通信是在两个不同的控制器之间进行的、我需要以尽可能低的延迟创建全局数据缓冲区的镜像。 是否需要使用不同的缓冲模式来实现正确同步。

    最高时钟速度可与 MibSPI 实际搭配使用。

    4.I 正在 ETPWM 中断中使用电机控制 FOC、该中断配置为25KHz 周期时间。

    e2e.ti.com/.../MotorMainController.zip

    Chandra

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

    您好、Wang、

    请忽略之前的代码并使用此代码。

    RXDATA_TG10的第一个元素总是不正确的、不会被更新。  

    MibSPI 时钟设置为1000、我们需要更改为更高的25MHz。

    e2e.ti.com/.../6366.MotorMainController.zip

    Chandra

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

    我稍后会检查

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

    您好、谢谢。

    您能否尝试将更新后的文件用于触发 BTC 标志的任务。

    我在两个控制器中看到的情况与这种情况有一些不同、但我们仍然可以获得线索。

    e2e.ti.com/.../ipc_5F00_primary.c

    Chandra

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

    使用您的更新代码、MibSPI CS 问题只能使用一个 MCU (MibSPI1-MibSPI3)生成、对吧?  

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

    单个 MCU 上的 CS 是纯净的。 我没有发现问题。 但我仍然看到帧丢失、TX 和 RX 任务的时钟设置为25MHz、任务延迟更改为2个节拍。

    Chandra

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

    您好、Wang、

    您能在5月12日查看此问题并回答我的问题吗?

    谢谢。 Chandra

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

    我将在 LC43 Launchpad 上运行测试。

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

    大家好、我是在检查示波器上的信号、而不是逻辑探头。 我看到 CS 信号的电平被移除、它是2.8V、工作电压为0.78V、有些噪声可能是由于示波器或导线造成的。 该捕捉是在时钟配置为15MHz 的情况下进行的。 我看到、当 时钟频率较低且频率较高时、帧重叠较低。 同样、如果我减小任务的延迟、帧重叠也会增加、这意味着数据传输更频繁。

    我认为噪声使逻辑探针捕获不需要的 CS 信号。 我在 CS 线路上有一个10K 上拉电阻器。  

    您是否可以再获得一个 LC43 Launchpad 并在两个不同的电路板上尝试我的代码? 我希望您能快速获得它。

    我的目标是每1ms 发送和接收一次数据。

    急切地等待您的回复。

    Chandra

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

    你好,王,祝你安全好。 我正在寻找您的回复。  

    我已经做了一些其他测试。 在10MHz 时钟和100个周期任务延迟的情况下、数据传输是稳定的。  

    我已将时钟更改为20MHz、看到非常少的帧丢失次数、数据再次稳定。

    我已将任务延迟更改为10个周期。 帧丢失的频率比之前高、同时存在数据偏移。 这意味着在 RX 缓冲区中、第一个数据元素为0x6A80、而不是0x6A00。 使用该偏移时、数据传输会继续。

    我不知道如何再次返回正确的数据集。  

    我已通过禁用 FOC 函数执行来移除 CPU 上的负载。

    请抽出一些时间回答我的问题、如下所示。

    当 BTC 中断被命中时、我将重新配置 DMA 以触发 TX。 可能是这不正确。 请告诉我、正确的方法是什么。

    为了在两个通道之间同步 TX 和 RX、我使用缓冲模式5 (等待直到 TX 满)。 请注意、我的通信是在两个不同的控制器之间进行的、我需要以尽可能低的延迟创建全局数据缓冲区的镜像。 是否需要使用不同的缓冲模式来实现正确同步。

    最高时钟速度可与 MibSPI 实际搭配使用。

    4.I 正在 ETPWM 中断中使用电机控制 FOC、该中断配置为25KHz 周期时间。

     Chandra

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

    大家好、可以回答我的上述问题吗?

    Chandra

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

    大家好、我仍在等待回复和一些帮助。

    Chandra