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.

[参考译文] TM4C123GH6PZ:用于 SD 卡读取的 CAN DMA

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/897203/tm4c123gh6pz-can-dma-use-for-sd-card-read

器件型号:TM4C123GH6PZ

您好!

在我的项目中、我希望使用 DMA 从 SD 卡读取数据。我正在检查有关这方面的一些示例、但没有获得任何信息。 如果有人执行此操作、请指导我如何使用 DMA 读取 SD 卡。  

SD 卡具有与微控制器的 SSI 接口。

谢谢、

Alphy

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

    您好、Alphy、

    我们没有这样做的示例。 SD 卡示例使用第三方 fatfs 库来处理 SD 卡操作、而这不包括任何 DMA 处理。 理论上、可以编辑 MMC-dk-tm4c123g.c 等文件中的物理接口 、但这不是我们在结尾支持的内容

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

    您好!

    感谢您的快速回复。 我已经尝试编辑  MMC-dk-tm4c123g.c 文件、下面给出了对库所做的更改。

    //在系统级别启用 uDMA 控制器。 使其继续
    //在处理器处于睡眠状态时运行。
    //
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UDMA);
    ROM_SysCtlPeripheralSlepEnable (SYSCTL_Periph_UDMA);
    
    //
    //启用 uDMA 控制器错误中断。 将发生该中断
    //如果在传输过程中出现总线错误。
    //
    //rom_IntEnable (INT_UDMAERR);
    
    //
    //启用 UDMA 控制器。
    //
    ROM_uDMAEnable();
    
    //
    //指向控制表以用于通道控制结构体。
    //
    ROM_uDMAControlBaseSet (ui8ControlTable); 

    静态
    空 POWER_ON (空)
    {
    /*
    *这并不是真正打开电源、而是初始化
    *与卡通信所需的 SSI 端口和引脚。
    *
    
    /*启用用于驱动 SSI 上 SDC 的外设*/
    ROM_SysCtlPeripheralEnable (SDC_SSI_SYSCTL_Periph);
    ROM_SysCtlPeripheralEnable (SDC_GPIO_SYSCTL_Periph);
    
    /*
    *将相应的引脚配置为 SSI 而不是 GPIO。 FSS (CS)
    *信号被直接驱动、以确保我们可以通过将其保持在低电平
    *完成与 SD 卡的交易。
    *
    ROM_GPIOPinTypeSSI (SDC_GPIO_PORT_BASE、SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK);
    ROM_GPIOPinTypeGPIOOutput (SDC_GPIO_PORT_base、SDC_SSI_FSS);
    
    /*
    *将 SSI 输出引脚设置为4mA 驱动强度并接合
    *接收线上的上拉电阻。
    *
    MAP_GPIOPadConfigSet (SDC_GPIO_PORT_base、SDC_SSI_RX、GPIO_Strength _4mA、
    GPIO_PIN_TYPE_STD_WPU);
    MAP_GPIOPadConfigSet (SDC_GPIO_PORT_base、SDC_SSI_CLK | SDC_SSI_TX | SDC_SSI_FSS、
    GPIO_Strength _4mA、GPIO_PIN_TYPE_STD);
    
    /*配置 SSI0端口*/
    ROM_SSIConfigSetExpClk (SDC_SSI_base、ROM_SysCtlClockGet ()、
    SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、400000、8);
    ROM_SSIEnable (SDC_SSI_base);
    /*测试*/
    uDMAChannelDisable (UDMA_CHANGE_SSI0RX);
    
    /*如您所见,UDMAChannelAssign 非常重要
    ChINC 具有许多触发器、因此您需要通过此操作来确定
    
    
    
    
    
    
    
    
    
    
    
    无效触发器、在本例中为 UDMA_CHANNE_SSI0RX*/ uDMAChannelAssign (UDMA_CHANNE_SSI0RX);uDMAChannelDisable (UDMA_CHANNEL_SSI0RX、UDMA_PRI_UDMA_TRIGN);uDMA_SDR_UDMA_INT_SSING_UDMA_SDR_0 (UDMA_INT_SSINT_SSINT_SSINT_SDR_SION_SI_SI_SIEMA_CONTRAL_UDR_SION_TRIGN)| UDMA_CONTRAL_UDMA_CONTRAL_UDMA_SDA_SDA_CONTRAL_UDMA_IN_TRIGN (UDR_UDMA_CONTRAM_UDMA_IN_UDMA_IN_UDMA_CONTRAM_UDMA_IN_UDMA_CONTRAM_UDR_SSINT_ 
    G_ui32RxBufA、sizeof (g_ui32RxBufA);
    
    SSIDMAEnable (SSI0_BASE、SSI_DMA_RX);
    /*测试结束*/
    
    /*将 DI 和 CS 设置为高电平并向卡的 SCLK 施加超过74个脉冲*/
    /*才能接受本机命令。 *
    send_inition_clock_train ();
    
    PowerFlag = 1;
    } 
    静态
    字节 RCVR_SPI (void)
    {
    uint32_t ui32RcvDat;
    
    ROM_SSIDataPut (SDC_SSI_base、0xFF);//
    
    写入虚拟数据*// ROM_SSIDataGet (SDC_SSI_base、&ui32RcvDat);//读取来自 Rx fifo 的数据*
    //ROM_SSIIntStatus (SSSI0_BASE、&u32RcvDat);// SSSI0_RAM_BASE_DMA
    (U0_RATE_RATE_RATE_RATE_RATE_N
    )*、* USSI0_RATE_RATE_RATE_RATE_0 (UDR_RATE_RATE_RATE_RATE_RATE_RATE_RATE_RATE_N)* 
    g_ui32RxBufA、sizeof (g_ui32RxBufA); 
    返回(字节) ui32RcvDat; 

    上面提到的是  在 MMC-dk-tm4c123g.c 文件上所做的更改。

    (void *)(SSI0_BASE + SSI_O_DR)步骤、给出了未定义 SSI_O_DR 标识符的错误。 如何解决此问题。

    我正在使用 DMA 轮询方法。上述更改是否正常、或者我必须执行任何其他更改才能从 SD 卡读取数据。

    谢谢、
    Alphy

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

    您好、Alphy、

    [引用 USER="Alphy Ouseph "](void *)(SSI0_BASE + SSI_O_DR)步骤、给出了未定义 SSI_O_DR 标识符的错误。 如何解决此问题。[/quot]

    您需要将标头包含在该定义中、因此 #include "inc/hw_ssi.h"应该具有您所需的全部内容。 如果这还不够、请检查主代码中的 include。

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

    您好!

    我已包含标头、错误已解决。 现在、我能够运行我的代码。

     RCVR_SPI 函数始终返回零。 ROM_uDMAChannelModeGet 函数不返回 UDMA_MODE_STOP。

    我正在使用 DMA 轮询方法。 DMA 初始化是否有任何问题? 是否需要添加任何其他步骤来使 DMA 正常工作?

    下面  给出了我对 MMC-dk-tm4c123g.c 文件所做的更改、

    静态
    空 POWER_ON (空)
    {
    /*
    *这并不是真正打开电源、而是初始化
    *与卡通信所需的 SSI 端口和引脚。
    *
    
    /*启用用于驱动 SSI 上 SDC 的外设*/
    ROM_SysCtlPeripheralEnable (SDC_SSI_SYSCTL_Periph);
    ROM_SysCtlPeripheralEnable (SDC_GPIO_SYSCTL_Periph);
    
    /*
    *将相应的引脚配置为 SSI 而不是 GPIO。 FSS (CS)
    *信号被直接驱动、以确保我们可以通过将其保持在低电平
    *完成与 SD 卡的交易。
    *
    ROM_GPIOPinTypeSSI (SDC_GPIO_PORT_BASE、SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK);
    ROM_GPIOPinTypeGPIOOutput (SDC_GPIO_PORT_base、SDC_SSI_FSS);
    
    /*
    *将 SSI 输出引脚设置为4mA 驱动强度并接合
    *接收线上的上拉电阻。
    *
    MAP_GPIOPadConfigSet (SDC_GPIO_PORT_base、SDC_SSI_RX、GPIO_Strength _4mA、
    GPIO_PIN_TYPE_STD_WPU);
    MAP_GPIOPadConfigSet (SDC_GPIO_PORT_base、SDC_SSI_CLK | SDC_SSI_TX | SDC_SSI_FSS、
    GPIO_Strength _4mA、GPIO_PIN_TYPE_STD);
    
    /*配置 SSI0端口*/
    ROM_SSIConfigSetExpClk (SDC_SSI_base、ROM_SysCtlClockGet ()、
    SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、400000、8);
    ROM_SSIEnable (SDC_SSI_base);
    /*测试*/
    ROM_SysCtlPeripheralEnable (SYSCTL_PERIPh_UDMA);
    ROM_SysCtlPeripheralSlepEnable (SYSCTL_Periph_UDMA);
    
    //
    //启用 uDMA 控制器错误中断。 将发生该中断
    //如果在传输过程中出现总线错误。
    //
    ROM_IntEnable (INT_UDMAERR);
    
    //
    //启用 UDMA 控制器。
    //
    ROM_uDMAEnable();
    
    //
    //指向控制表以用于通道控制结构体。
    //
    ROM_uDMAControlBaseSet (ui8ControlTable);
    
    uDMAChannelDisable (UDMA_CHANGE_SSI0RX);
    
    /*如您所见、UDMAChannelAssign 非常重要
    ChINC 具有许多触发器、因此您需要通过此命令来确定
    
    
    
    
    
    
    
    
    
    
    
    无效的触发器、在本例中为 UDMA_CHANNE_SSI0RX*/ uDMAChannelAssign (UDMA_CHANNE_SSI0RX);uDMAChannelDisable (UDMA_CHANNEL_SSI0RX、UDMA_PRI_UDMA_TRIGN);uDMA_SDA_IN_UDMA_SDR_UDMA_SDK_CONTROL_UDR_SDA_STR_USS32_TRIGN | UDMA_SDA_SDA_CONTROL_UDMA_TRIGN (UDR_UDMA_CONTRAM_UDR_UDMA_SDR_UDR_TRIGN)| UDMA_CONTRAM_UDMA_TRIGN (UDMA_SDR_UDMA_CONTRAM_UDMA_SDA_TRIGN)| UDMA_TRIGN (UDMA_CONTRAM_UDMA_SDA_SDA_SD
    G_ui32RxBufA、sizeof (g_ui32RxBufA);
    
    SSIDMAEnable (SSI0_BASE、SSI_DMA_RX);
    
    
    //测试结束
    
    /*将 DI 和 CS 设置为高电平并向卡的 SCLK 施加超过74个脉冲*/
    /*才能接受本机命令。 *
    send_inition_clock_train ();
    
    PowerFlag = 1;
    }
    静态
    字节 RCVR_SPI (空)
    {
    uint32_t ui32RcvDat、ui32Mode;
    
    ROM_SSIDataPut (SDC_SSI_base、0xFF);//
    
    ROM 写入虚拟数据*// ROM_SSIDataGet (SDC_SSI_base、&ui32RcvDat);//*读取数据 frm Rx fifo *//
    ROM_SSIIntStatus (SSD0_base、&ui32Rcs_u32Rv0*
    
    
    = uSD_u_u_uSDK_uSDRA_u_u32Rdma_u_u_uSD_u_u_uSDK_u_u0u_uSDK_u_uSDK_u_u_uSDK_uSDK_u_u32u_u_u_uSDK_u_u_uSDK_u_u_uSDK_u_uSDK_u_u_uSDK_u_u_u_uSDK_u_uSDK_u_u_u_uSDK_u_uSDK_u_u_uSDK_u_u_u_uSDK_u_u_uSDK_u_u_uSDK_uSDK_u_uSDK_u
    
    
    返回(字节) ui32RcvDat;
    } 

    谢谢、

    Alphy

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

    您好!

    我们的小型技术团队致力于 SD 卡和 MCU 的 µDMA è re 的"枪式"婚姻中的"先锋"努力。

    你注意到,"没有这样的例子"--这可能是"故意的?"

    SPI FIFO 的大小非常小-这与 μ µDMA 的1024传输容量没有"冲突"吗?   (即 µDMA µDMA "呼叫开销"必须重复(无目的)-可能会削弱 T Ü V 的效率!)

    这就值得你考虑--不是吗?

    今天到了一个(有点)类似的帖子(通过 μ µDMA 通过 MCU 的 SPI 进行 EPI SD RAM 转换)。   也许是有益的——值得你读一下……  

    e2e.ti.com/.../897931

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

    您好!

    再次感谢您的快速回复。

    正如您提到的、SPI FIFO 的大小非常小-这与 μ µDMA 的1024事务容量没有"冲突"吗?   (即 µDMA µDMA 的"呼叫开销"必须重复(无目的)-可能会削弱 T Ü V 的效率!)。 但在我的程序中、仲裁数目仅为8。 它会产生任何问题吗?  

    ui32Mode = ROM_uDMAChannelModeGet (UDMA_CHANGE_SSI0RX | UDMA_PRI_SELECT);函数不返回 UDMA_MODE_STOP 可能是什么问题?

    我将程序从轮询方法更改为中断。 该程序不会进入 SSI 中断处理程序函数、原因可能是什么、如何解决?

    下面给出了新的修改代码、

    静态
    空 POWER_ON (空)
    {
    
    /*
    *这并不是真正打开电源、而是初始化
    *与卡通信所需的 SSI 端口和引脚。
    *
    
    /*启用用于驱动 SSI 上 SDC 的外设*/
    ROM_SysCtlPeripheralEnable (SDC_SSI_SYSCTL_Periph);
    ROM_SysCtlPeripheralEnable (SDC_GPIO_SYSCTL_Periph);
    
    /*
    *将相应的引脚配置为 SSI 而不是 GPIO。 FSS (CS)
    *信号被直接驱动、以确保我们可以通过将其保持在低电平
    *完成与 SD 卡的交易。
    *
    ROM_GPIOPinTypeSSI (SDC_GPIO_PORT_BASE、SDC_SSI_TX | SDC_SSI_RX | SDC_SSI_CLK);
    ROM_GPIOPinTypeGPIOOutput (SDC_GPIO_PORT_base、SDC_SSI_FSS);
    
    /*
    *将 SSI 输出引脚设置为4mA 驱动强度并接合
    *接收线上的上拉电阻。
    *
    MAP_GPIOPadConfigSet (SDC_GPIO_PORT_base、SDC_SSI_RX、GPIO_Strength _4mA、
    GPIO_PIN_TYPE_STD_WPU);
    MAP_GPIOPadConfigSet (SDC_GPIO_PORT_base、SDC_SSI_CLK | SDC_SSI_TX | SDC_SSI_FSS、
    GPIO_Strength _4mA、GPIO_PIN_TYPE_STD);
    
    /*配置 SSI0端口*/
    ROM_SSIConfigSetExpClk (SDC_SSI_base、ROM_SysCtlClockGet ()、
    SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、400000、8);
    //SSIEnable (SSI0_BASE);
    
    /*清除 SSI0 RX 缓冲器*/
    while (ROM_SSIDataGetNonBlocking (SSI0_BASE、&g_ui32RxBufA[0])){}
    ROM_SSIEnable (SDC_SSI_base);
    ROM_SSIIntEnable (SSI0_BASE、SSI_DMARX);
    /*测试*/
    ROM_SysCtlPeripheralEnable (SYSCTL_PERIPH_UDMA);
    ROM_SysCtlPeripheralSlepEnable (SYSCTL_Periph_UDMA);
    
    //
    //启用 uDMA 控制器错误中断。 将发生该中断
    //如果在传输过程中出现总线错误。
    //
    ROM_IntEnable (INT_UDMAERR);
    
    //
    //启用 UDMA 控制器。
    //
    ROM_uDMAEnable();
    //
    //为 TX 和 RX 通道启用 uDMA 接口。
    //
    ROM_SSIDMAEnable (SSI0_BASE、SSI_DMA_RX);
    //
    //指向控制表以用于通道控制结构体。
    //
    ROM_uDMAControlBaseSet (ui8ControlTable);
    //uDMAChannelDisable (UDMA_CHANGE_SSI0RX);
    
    /* UDMAChannelAssign 非常重要,正如您看到的那样
    Chanel 有很多触发器、所以您需要这样做来决定触发器、在本例中、它是 UDMA_CHANGE_SSI0RX*/
    
    uDMAChannelAssign (UDMA_CHANGE_SSI0RX);
    
    uDMAChannelAttributeDisable (UDMA_CHANGE_SSI0RX、UDMA_ATTR_ALTSELECT |
    UDMA_ATTR_HIGH_PRIOR|
    uDMA_ATTR_REQMASK);
    
    
    uDMAChannelControlSet (UDMA_CHANNE_SSI0RX | UDMA_PRI_SELECT、
    UDMA_SIZE 32 | UDMA_SRC_NONE | UDMA_DST_INC_32 | UDMA_ARB_8);
    
    
    uDMAChannelTransferSet (UDMA_SDA_BASE_0
    )、UDMA_INC_DIO_INC_NED、UDMA_SIZE *、UDMA_CAL_O_INC_NED + UDMA_DIO_RAY (UDMA_FO_INC_NED)
    G_ui32RxBufA、sizeof (g_ui32RxBufA);
    ROM_SSIIntEnable (SDC_SSI_base、SSI_DMARX);
    //SSIDMAEnable (SDC_SSI_base、 SSI_DMA_RX);
    //
    //启用 SSI0外设中断。
    //
    ROM_IntEnable (INT_SSI0);
    
    
    //测试结束*/
    
    /*将 DI 和 CS 设置为高电平并向卡的 SCLK 施加超过74个脉冲*/
    /*才能接受本机命令。 *
    send_inition_clock_train ();
    
    PowerFlag = 1;
    }
    void
    SSI0_Handler (void)
    {
    uint32_t ui32Status;
    uint32_t ui32Mode;
    
    ui32Status = ROM_SSIIntStatus (SDC_SSI_base、1); //将返回中断原因(SSITX 或 SSIRX 中断)
    
    ROM_SSIIntClear (SDC_SSI_BASE、ui32Status);
    
    ui32Mode = ROM_uDMAChannelModeGet (UDMA_CHANGE_SSI0RX | UDMA_PRI_SELECT);
    
    //if (ui32Mode = ROM_uDMA_USDA_RESP= U32_UDR_SION_UDR_SION_FO_SIU0RX
    
    )
    ;// uSDK_U32uSDK_UDMA_RESP= u0_U64_UDR_UDR_UDR_SION_SION_SION_SION_SION_SION_SION_SION_SION_SION_SION_SION_UDR_SION_SION_SION_SION_SION_SION_SIMODE/(U0_USS_U
    
    
    
    

    请帮助我解决这些问题。

    谢谢、

    Alphy

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

    谢谢您-我们的外部人员团队希望能够提供指导/帮助-但我们(再次)在这方面"超越我们的领导"。   在多种情况下、供应商代理(对其器件具有丰富的内部知识)注意到:"传输的 µDMA 传输时间短、不连贯、无法实现最佳的 µDMA 结果!"   这是预期的-是不是吗?

    大声思考-是否可以探索其他一些转移方式-这可以实现更大(因此更高效)的 µDMA 转移规模?   (例如、小型"CPLD "可能会实现从 SD 卡到 MCU (或其他) SRAM 的传输。   通过这种方式-从8或16字节限制中释放-µDMA 传输可以改进... (至少在理论上... 也许吧。)

    您是否已经说明了您使用 n ü µDMA 的目标?   我们引用的另一篇文章指出、用户的目标是"让代码运行"减小内核或(甚至)释放"。    µDMA 这种特殊的好处-很难注意到您的期望-激发您的兴趣。   同样、缺少(任何)现有代码(可能)表明供应商认为此类用法没有太大意义...

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

    您好、Alphy、

    还好,所以先得... SD 卡设置为8字节传输:

    /*配置 SSI0端口*/
    ROM_SSIConfigSetExpClk (SDC_SSI_base、ROM_SysCtlClockGet ()、
    SSI_FRF_MOTO_MODE_0、SSI_MODE_MASTER、400000、8); 

    因此、如果将 UDMA 大小设置为32字节不正确、则应为 UDMA_SIZE_8。

    基于此、 UDMA_dst_INC_32 也可能更改为 UDMA_dst_INC_8。

    关于 UDMA_ARB_8和其他仲裁值、这取决于您打算如何使用 DMA...  

    来自 D/S: 每个通道还具有可配置的仲裁大小。 仲裁数目是指 μ μDMA 控制器重新仲裁通道优先级之前以猝发方式传输的数据单元数。 通过仲裁数目、当外设每次产生 μ μDMA 服务请求时、可以精确控制与外设之间传输的数据单元数。

    这意味着、您将决定每次 UDMA 传输要读取的数据量。 如果您有很多数据、如 SD 卡应该有的数据、那么您可能需要将其设置为1024。 达到该数量后、您将必须重新配置 UDMA 通道、无论在乒乓模式下使用同一个通道还是辅助通道。

    另一点是中断、我认为您仍然需要  

    SSIDMAEnable (SSI0_BASE、SSI_DMA_RX); 

    还要确保为中断提供此设置:

    //
    //启用到处理器的中断。
    //
    ROM_IntMasterEnable(); 

    看看这些调整可以为您提供哪些信息、我们可以从这些信息中进行调整。

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

    您好!

    非常感谢大家的回复。

    您是否已经说明了您使用 n ü µDMA 的目标?  目标是以1 RPM 的值运行1毫秒的电机。 存储在 SD 卡中的文本文件具有不同的 RPM 值。我的目标是在完成1毫秒之前从 SD 卡中获取下一个 RPM 值、然后运行电机1毫秒。 但无法在1毫秒内完成读取。我想使用数组来存储从 SD 卡读取的所有数据、但 RAM 大小存在限制。 最后、我想使用 μ µDMA 读取 SD 卡中的数据、并使用内核运行电机。

    在多种情况下、供应商代理(对其器件具有丰富的内部知识)注意到:"传输的 µDMA 传输时间短、不连贯、无法实现最佳的 µDMA 结果!"   这是预期的-是不是吗?是的、我的考虑是这样的。  

     我已将 UDMA_dst_INC_32更改为 UDMA_dst_INC_8。 您提到的中断部分已经实现。 但它仍然不会中断。

    而不是 ROM_SSIIntEnable (SSI0_BASE、SSI_DMARX);如果我使用 ROM_SSIIntEnable (SSI0_BASE、SSI_RXFF)、则控制权将转到 ISR。  μ µDMA 配置是否存在任何问题?

    谢谢、

    Alphy

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

    您好、再次感谢您(  此处有几个问题需要回答、其中包括您显示的关注和详细信息)

    让我们更详细地查看您的回答:

    [引用 user="Alphy Ouseph "]…… 目标是以1 RPM 值运行电机1毫秒。

    这种回答(非常)很好地说明了"提问海报请求"的价值。   在过去十年中、我们的小型技术公司生产了各种电机控制器(用于 BLDC、有刷、步进等)。   电机-尤其是在"驱动负载"-遇到"惯性"时-该惯性会阻止大多数电机响应(控制命令)、时间为1ms!   (根据负载的不同、即使是50mS 的响应时间也很难满足!   对于我们遇到的大多数电机而言都是如此、但对于新型和轻载压电式电机而言、情况却是如此。)   因此-您可能已经选择了一个"无法到达的目标"-并且可能会"让您省去将 μ µDMA 与 SPI 模块"结合"所需的额外时间/精力。"

    [引用 user="Alphy Ouseph "]…… 存储在 SD 卡中的文本文件具有不同的 RPM 值。

    您是否没有通过使用"人类可读"文本文件来增加处理需求?   二进制值(即两个字节)不会提供65K 的电机速度-这种速度比"文本数据"传递速度快得多且容易得多?   同样、"设计决定"(也许)值得审查/重新思考。

    我们公司的大多数电机控制器都支持"运动曲线"、它允许:

    • 从停止到速度1的加速度(可变)
    • IN 速度#1的定时持续时间(电机电流和 RPM 经过严格测量和控制)
    • 加速或减速至速度2
    • IN 速度#2 (  电机电流和 RPM 经过严格测量和控制)时的定时持续时间
    • 这将持续多达32个不同的运动曲线 (特殊订单可提供更多)

    请注意、"以上都不是"会主动存储在(效率低下)文本文件中。   用户只需输入"十进制数据"(通过串行终端程序)(即文本文件)、该数据就会从文本高效转换、然后通过外部非易失性串行闪存(8引脚)存储器进行存储。

    您可能会受益于我们公司的"惯性车轮"(仅其中一个)。   很明显-即使是我们的一个10KW 电机控制器也无法"增加 RPM "@ 1ms 的间隔!   能够"测试/验证"我们的电机控制器成功控制(甚至)大型负载(甚至在交付前)的能力、提供了巨大的竞争优势...

    请注意、"您也"可能能够实现这样一个关键的"电机负载/测试"-并且以这种方式-"解锁"您系统的"现实世界响应要求"!   (极不可能与您(以某种方式选择)的1ms 控制速率匹配...)

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

    您好、Alphy、

    [引用 user="Alphy Ouseph µDMA 您是否已说明您使用 n ü r 的目标?  目标是以1 RPM 的值运行1毫秒的电机。 存储在 SD 卡中的文本文件具有不同的 RPM 值。我的目标是在完成1毫秒之前从 SD 卡中获取下一个 RPM 值、然后运行电机1毫秒。 但无法在1毫秒内完成读取。我想使用数组来存储从 SD 卡读取的所有数据、但 RAM 大小存在限制。 因此、最后我想使用 μ µDMA 读取 SD 卡中的数据、并使用内核运行电机。

    除了 CB1在这里的评论说、这在物理上甚至是不可能的-我不确定 UDMA 在这里会有多少帮助。 您还可能受到 SPI 传输时间和 SD 卡访问时间的限制-仅 SPI 通信多长时间?  您是否需要这些字节、如所示、实时读取一个字节、然后在1ms 内具有下一个字节、或者您是否可以构建一个字节缓冲区以允许延迟? 多少字节的数据? 您看到了多少间隔时间? UDMA 在后台运行和执行大型传输等方面非常有用 是否有其他软件瓶连接了这段读取时间、或者 SD 卡操作是否全部运行?

    我很怀疑这也是一项值得努力的工作——因为 CB1非常有效地怀疑电机甚至可以作出很好的反应。 我可以证明他的公司在电机方面拥有丰富的经验、请仔细阅读他的反馈...

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

    您好!

    很抱歉耽误你的回答。 您的回答解释得很好、让我思考很多问题。 非常感谢您的快速回复。

     在过去十年中、我们的小型技术公司生产了各种电机控制器(用于 BLDC、有刷、步进等)。   电机-尤其是在"驱动负载"-遇到"惯性"时-该惯性 会阻止大多数电机 响应(控制命令) 、时间为1ms!    (根据负载的不同、即使是50mS 的响应时间也很难满足!   对于我们遇到的大多数电机而言都是如此、但对于新型和轻载 压电式电机而言、情况却是如此。)   因此-您可能已经选择了一个"无法到达的目标"-并且可能会"让您省去将 μ µDMA 与 SPI 模块"结合"所需的额外时间/精力。"

    我正在使用 Panasonic Minas A6系列交流伺服电机。我正在使用计时器 PWM 运行电机。 电机在给定的 RPM 值下运行正常。   

    您是否没有通过使用"人类可读"文本文件来增加处理需求?   二进制值(即两个字节)不会提供65K 的电机速度-这种速度比"文本数据"传递速度快得多且容易得多?   同样、"设计决定"(也许)值得审查/重新思考。

    您能否告诉我、除了文本文件格式之外、哪种文件格式可以提高处理速度?

     您是否需要这些字节、如所示、实时读取一个字节、然后在1ms 内具有下一个字节、或者您是否可以构建一个字节缓冲区以允许延迟? 多少字节的数据? 您看到了多少间隔时间?  

    我将读取一个数据(最大大小为3字节)、然后开始运行电机 、然后再次开始获取新数据。但我看到大约2ms 的间隔。

    谢谢、

    Alphy

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

    减少退货问候、

    [引用 USER="Alphy Ouseph ]我正在使用 Panasonic Minas A6系列交流伺服电机。我正在使用计时器 PWM 运行电机。 电机在给定的 RPM 值下运行正常。   [/报价]

    原谅-但上面没有描述"追求1ms 电机速度更新"-也没有将电机作为组件"现实"-驱动"现实世界"负载!    (必须遵守惯性法!)   当您的电机"运行完美"时、我们"无法掌握您所寻求的(进一步)!"

    [引用 user="Alphy Ouseph "]您能否告诉我、除了文本文件格式之外、哪些文件格式可以提高处理速度?

    如前所述-两个二进制字节启用~64K 速度设置。   您的 SD 卡逻辑似乎不一致:

    • 您寻求快速的 SD 卡响应
    • 但是、您以"人类可读"(即文本格式)存储密钥/关键数据

    这是"自败"的-不是吗?   人类可读格式(始终)会减慢数据传输的速度并增加其复杂性-这不是我们的选择!

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

    您好、Alphy、

    [引用 user="Alphy Ouseph "]我将读取一个数据(最大大小为3字节)、然后开始运行电机 、然后再次开始获取新数据。但我看到的间隔约为2ms。

    您是否监测了 SPI 传输时间? 只需在 SPI 线路上处理此部件需要多长时间?

    如果您正在这样做、您认为 UDMA 如何提供帮助? 这听起来很活跃... 我在这里看不到 UDMA 为您提供了任何优势... SSI 和 SD 卡协议可能远不止一个瓶颈、我不清楚 UDMA 会如何将这一切缩短2ms。

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

    您好!

    再次感谢您的快速回复。

    "寻求1ms 电机速度更新"-也不"冒险研究电机作为组件的"现实"-驱动"现实世界"负载!    (必须遵守惯性法!)   当您的电机"运行完美"时、我们"无法掌握 您所寻求的(进一步)!"

    我使用电机来泵送液体。 我的目标是使用 UDMA 读取 SD 卡中的数据、并使用内核运行电机。  

    您是否监测了 SPI 传输时间? 只需在 SPI 线路上处理此部件需要多长时间?

    很抱歉、由于锁定、我无法去办公室、因此我没有逻辑分析仪来检查传输时间。  我已经使用1ms 计时器中断测试了数据读取和电机运行时序。

    如果您正在这样做、您认为 UDMA 如何提供帮助? 这听起来很活跃... 我在这里看不到 UDMA 为您提供了任何优势... SSI 和 SD 卡协议可能远不止一个瓶颈、我不清楚 UDMA 会如何将这一切缩短2ms。

    从 SD 卡获取数据的时间比我预期的要长。 因此、我想将 uDMA 用于 SD 卡和控制器接口、并将内核用于电机运行。  

    谢谢、  

    Alphy  

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

    您好!

    [引用 user="Alphy Ouseph "] 我已经使用1ms 计时器中断测试了数据读取和电机运行时序。

    但是、"为什么1ms?"   您的"液体循环系统"(真的)能否有效地支持和/或从这种频率中"受益"?   您执行了哪些实验来确认1ms 率带来的(任何)好处?

    我们不知道您的流体系统的程度和/或其局限性或敏感性。   我们观察到、当泵速率、容量和流体流动都达到"规格"时、许多此类(设计/开发适当)系统都能达到最佳(也是最长的)性能!   在您的系统和您的设计选择方面、我们始终(非常)处于阴暗状态...

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

    您好!

    非常感谢您的快速响应。

    我计算了不同电机速度下的流速(1ms 未测试)。 在测试固件时、我无法实现1ms、这就是我想使用 uDMA 的原因。 我的第一个目标是使固件在1ms 内正常运行、然后只有我可以检查电机1ms。

    谢谢、

    Alphy

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

    我的朋友、

    µDMA -供应商代理和我的团队都注意到、由于 T Ü V 使用而产生的(任何)好处不太可能。   也许是时候"继续"了吗?

    在您的泵研究中:  (离心、正位移、气动隔膜...) 您肯定注意到、"您的泵的运行曲线"。   理想情况下、您应在泵的最佳效率点附近操作。

    使用压力表和/或流量计可以提高您对泵在其曲线中运行位置的掌握。   

    "MCU ->电机->泵"控制是需要注意的一个(许多)项目。   怀疑(进一步)检查泵的工作曲线会"使您摆脱1ms (仅1ms)固定...

    您在 SD 卡中使用文本时(之前已注明)、会"减慢并增加复杂性"到您的电机控制处理。

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

    您好!

    再次感谢您的快速回答。

    我将检查您提到的所有要点。感谢您的所有帮助!

    谢谢、

    Alphy