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.

[参考译文] CC2541:DMA 通道和 BLE 器件监控器

Guru**** 2579735 points
Other Parts Discussed in Thread: CC2540, CC2541

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/564625/cc2541-dma-channel-and-ble-device-monitor

器件型号:CC2541
主题中讨论的其他器件:CC2540

您好!

我的客户正在使用下面的所有 DMA 通道、并希望使用额外的 DMA 进行 UART 通信。 请帮助您如何使用额外的 DMA 吗? 似乎很难将 DMA 0、1、2通道用于 UART、是否有方法与 UART 共享用于 IR Timer1的 DMA 3、4通道?

DMA0:闪存

DMA2:AES

DMA3、4:红外定时器1

另一个问题是 BLE Device Monitor 上的 BLE 堆栈 v.1.3.2的兼容性问题。 "Event Log"(事件日志)窗口中出现错误、但 BLE 堆栈 v.1.41没有问题。 我的客户无法使用 BLE 堆栈 v.1.4x、因为他们无法更新 IAR 编译器版本。 您能在哪里获得与 BLE 堆栈 v.1.3.2兼容的 BLE Device Monitor 吗?

主机:COM6 115200波特、无流。

HCI_Ext_Build_Revision:STATUS=00 Rev=34414

BLE 主机 TI BLE 1.32 (已淘汰) CC2540

谢谢、

Shaka

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

    只要您的不同时使用 UART 和 IR、您就可以在这两个器件之间共享 DMA 资源。

    您是否曾尝试使用 BTool 查看其是否正常工作?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Christin:

    要共享 DMA 资源、您可以发送示例代码吗?

    是的、我们使用了 BTool、发现它适用于 BLE 堆栈 v.1.3.2、但我们需要使用与 BLE 堆栈 v.1.3.2兼容的 BLE Device Monitor。

    谢谢、

    Shaka

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

    您好、Shaka、

    为了共享 DMA、您首先需要确定 DMA 使用者可以共享的内容。

    1. 您是否可以完全控制 AES 何时需要 DMA?
    2. 您是否可以完全控制 UART 何时需要 DMA?
    3. 您是否可以完全控制 IR 何时需要 DMA?
    4. 您是否可以完全控制闪存何时需要 DMA?

    如果您可以对上述两个问题回答"是"、则可以共享 DMA 通道。 共享本身很容易。 在使用 DMA 之前、每个用户(闪存、AES、UART 或 IR)必须假定配置无效。 一个示例是 HalFlashWrite()例程。 此例程在每次访问之前完全配置 DMA。 只要在该例程执行时没有其他人使用 DMA、例程就可以安全地使用 DMA。 唯一能够破坏它的东西是中断。 可以禁用中断以确保不会发生这种情况。 但是、禁用中断对实时系统来说可能很危险、例如运行 BLE 堆栈。 因此、不建议在更长的时间(几百微秒)内禁用中断

    我建议您编写一个单独的模块、该模块可以授予访问权限以使用您要共享的 DMA 通道。 然后、每个模块都必须从您的新模块请求访问权限、然后才能配置和使用 DMA、 使用后、它应该会调用您的新模块以释放对 DMA 通道的访问权限。

    请记住使用 DMA 的中断驱动操作的可能性。 这关系到您是否可以对上面列出的问题回答"是"。

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

    BTool 可以执行 BLE 器件监控器正在执行的所有操作、包括 OAD、因此除了其用户界面之外、这些工具之间基本上没有区别。 您是否有任何原因只能使用设备监控器?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、Torbjorn、

    感谢您的详细解释、我们正在研究您的建议。 我们是否可以参考任何示例代码?

    您是否会就下面的新问题提供建议?
    BLE 连接已断开。 我们在将数据写入内部闪存时使用 HalFlashWrite(),而 CC2541通过 BLE 与 CC2540通信。 另请参阅 BTool 上的以下连接设置。
    最小连接间隔:6.
    最大连接间隔:6.
    从器件延迟:60.
    监护超时:100
    您是否会推荐更可靠的方法将数据存储到闪存中?

    尊敬的 Christine:

    感谢您的回答。 我们可以改用 BTool。

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

    您提到了什么示例代码? 已经有一个很好的示例说明如何在 HalFlashWrite()中配置 DMA。

    以写入 NV 而言。 请使用 osal_sv_read/write。 此模块将依次调用 HalFlashWrite()。 但是,它最大限度地减少了对 HalFlashEras()的调用次数。 后者可能需要20ms、这对于快速连接间隔而言可能会很成问题。 最好是将呼叫与有效连接事件同步。 应在此连接事件之后立即访问闪存。