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.

[参考译文] MSP430F5438A:使用 DMA 的16位 SPI 通信

Guru**** 2582405 points
Other Parts Discussed in Thread: MSP430F5438A

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/613536/msp430f5438a-16-bit-spi-communication-using-dma

器件型号:

大家好、我开发了一款无线传感器件。

由于 TI-MSP430F5438A MCU 不提供16位 SPI 通信模式、而是仅提供8位或7位 SPI 通信模式、

已将16位 SPI 协议传感器芯片与 MCU 结合使用

控制 CS 引脚、然后是 GPIO 协议。

获取16位 SPI 数据后、MCU 将通过 UART 协议发送到蓝牙芯片。

这很好。

但是、我想增加吞吐量。

因此、我更改为通过在 MCU 中操作 DMA 来控制 UART。

但是、MCU 中的 SPI 协议基于8位通信、

因此、在制定16位 SPI 协议时很难调整 DMA。

我不知道如何制定此协议。

如何通过使用 DMA 使 MCU 处理16-SPI 协议?

我需要添加数据处理算法、

因此、我需要使用 DMA 来减轻 CPU 的负担。

你能提出什么想法吗?

P.S. 16位 SPI 通信传感器芯片(从器件)仅在 CS 引脚通过下降沿时回复 SPI 协议。

因此、当 MCU - CS 引脚始终处于下引脚状态时、传感器芯片绝不会回复。

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

    [引用用户="DONGHYEON Hul"]

    器件型号: MSP430F5438A

    获取16位 SPI 数据后、MCU 将通过 UART 协议发送到蓝牙芯片。

    这很好。

    但是、我想增加吞吐量。  

    因此、我更改为通过在 MCU 中操作 DMA 来控制 UART。

    [/报价]

    也许您会朝着正确的方向前进、但我的体验是不同的。 我花了大量时间为我的双 CDC - UART 桥找到最快 UART 吞吐量的解决方案、最后我放弃了使用 DMA。

    http://forum.43oh.com/topic/2972-sbw-msp430f550x-based-programr/?do=findComment&comment=53730

     两个桥都在1Mbps 并行、全双工模式下工作、没有任何问题。

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

    嗯... 它看起来很奇怪。

    在 MSP430F550x 系列数据表的第34页中、 最大 UART 波特率为1MHz、但 在链接页面中的后续汇编代码中、您说可以通过在16MHz 系统时钟上设置 BR=4将其设置为4KHz。 只有这样、是否可以使结果吞吐量为1Mbps?

    P.S. 这意味着1Mbps 是什么? 吞吐量? 或适当的波特率?

    P.S.2什么是 CDC?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我担心过度设置。 您是否遇到过任何问题? 如果没有、看起来不错、因为蓝牙芯片的最大 UART 波特率为4MHz、所以我可以尝试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我完成了 UART 基准测试...  http://forum.43oh.com/topic/3413-msp430-uart-benchmark/

    在数据表中有...

    《SLAU144 MSP430x2xx 系列用户指南  18.2.6 USART 波特率生成》
    最大 USART 波特率是 UART 源时钟频率 BRCLK 的三分之一。

    《SLAU208 MSP430x5xx MSP430x6xx 系列用户指南  32.3.9.1低频波特率生成》
    在此模式下、最大 USCI 波特率是 UART 源时钟频率 BRCLK 的三分之一。

    1Mbps 是波特率。 在随附的图片中、您可以看到 Win CLI 中的两个桥(连接到2xx UART)均以-br (波特率) 4000000 (4Mbps)打开。 但在本示例中、两个2xx 器件仅通过 UART 发送数据(桥接器通过 USB = CDC 将此数据发送到 PC)、而不是全双工。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我阅读您的帖子(2013年2月 ~五月)。 现在、我了解您对"三分之一"这个词的理解。
    如果我理解正确、我可以尝试将更高的波特率设置为高达8Mbps、因为最大系统频率为25MHz。
    感谢您提供有关如何提高吞吐量的建议! 我会尝试并说出结果!

    --------------------------------------------------------------------
    无论如何、我的实际兴趣不是关于 UART、而是关于 SPI。 (原因如下所示。)
    我想回顾一下有关 SPI 的原始问题。

    我在接收 SPI 数据后立即压缩了数据、
    在 UART 上使用 DMA 后、无需提高 UART 性能
    因为我们只需要检查批量数据传输是否已完成。

    因此、整个限制范围不是来自 UART 中的低速、而是来自 CPU 检查和数据处理负载(压缩技术)的 SPI 负载。

    ----------------------------------------------------------------------
    我的想法很简单。 为了专注于 MCU 中 CPU 的数据处理(=压缩)、
    我不仅要操作 UART 的 DMA、还需要操作16位 SPI 通信。
    使用 DMA 的16位 SPI 通信是否存在任何 IDES?
    我需要别人的帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、zrno。
    我测试了将 MCU 的 UART 波特率提高到5MHz。
    测试 MCU:MSP430F5438A
    -内部电压:最高内部频率的最大状态。
    测试波特率:921.6 kbps (默认值)、1.25 Mbps、1.5 Mbps、2 Mbps、2.5 Mbps、 4Mbps、5Mbps
    ->结果:921.6 kbps (成功),1.25 Mbps (成功),其它(失败)
    我很好奇、因为我的 MCU 之一 TM4C MCU 可以与同一蓝牙器件进行2.5Mbps 的通信。
    通过遵循上述结果、我考虑了 MSP430 MCU 不能处于最大内部频率模式(25MHz)。
    由于我使用了蓝牙堆栈代码(来自 TI)、我认为问题必须在堆栈代码中、我发现存在一个奇怪的情况。
    "最大频率= 22.8MHz"
    我不知道为什么无法在蓝牙堆栈代码中将 MCU 设置为25MHz。
    在以下数据表中、内部频率可设置为25MHz。
    也许 TI 的蓝牙团队知道这一原因。

    无论如何、我可以按照您的建议尝试提高波特率、系统可能会增加吞吐量。

    感谢你的帮助。

    现在、我应该解决如何更高效地运行16位 SPI 协议。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    *更正某些内容。
    *在蓝牙堆栈代码中,最高频率设置为22.1184MHz