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.

[参考译文] CC3220SF:C2000至 CC3220SF 至 AWS (数据传输和存储问题)

Guru**** 2539500 points
Other Parts Discussed in Thread: CC3220SF

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1043226/cc3220sf-c2000-to-cc3220sf-to-aws-data-transfer-and-storing-problem

器件型号:CC3220SF

大家好、

我们希望在下面就我们客户的询问寻求您的帮助。

我已通过 SPI 协议将 TI C2000 (主器件)连接到 CC3220SF (从器件)、然后将 CC3220SF 连接到 AWS IoT 以进行数据存储。 我能够 通过 MATLAB Simulink 块、通过 SPI 将来自 TI C2000电路板的随机数据(例如电压、电流、SOC)阵列发送到在 Code Composer Studio 中编码的 CC3220SF。 CC3220SF 还能够连接到 AWS IoT 并通过 MQTT 将数据存储到 AWS DynamoDB。 但是、在将数据存储到 AWS 时、它只能发布大约25次(在 MQTT 测试客户端中):  

然后、突然、MQTT 测试客户端中接收到的数据为空:

然后、在检查 AWS DynamoDB 时、25个[1x3]数据数组中只有大约9个与日期-时间一起存储。 在这些接触中、C2000和 CC3220SF 仍在相互交换数据:

查看我的 MATLAB Simulink 代码、在启动后、C2000的 SPI 接收块始终会获得"1"的状态、这是由于溢出导致的数据丢失、如以下 MATLAB 文档所示: https://www.mathworks.com/help/supportpkg/texasinstrumentsc2000/ref/c28xspireceive.html

有时 、C2000 会接收显示在连接到 C2000 SPI 接收块(Rx 端口)的显示块中的垃圾数据(6.554e+04):

有时为"0"。 以下是代码块:

之前、我能够在 uint16_t 数据类型下将值'56'从 CC3220SF 发送到 C2000 (MATLAB Simulink)。 但现在、我无法确定 C2000 SPI 接收块为什么不能接收来自 CC3220SF 的任何数据而没有任何错误。

我已经在 CCS 中对 CC3220SF 代码进行了多次修改、但仍然无法正常工作。 这是我之前使用过的代码片段(但现在不使用):

uint16_t slaveTxBuffer[SPI_MSG_LENGTH]
//…… 这里有一些代码... 

//复制消息到发送缓冲区
z = 56
slaveTxBuffer[0]= z

//在数据交换期间循环内部
slaveTxBuffer[0]= 0
memset (void *) slaveRxBuffer、02)
transaction.count = 3
transaction.txBuf =(void *) slaveTxBuffer
transaction.rxBuf =(void *) slaveRxBuffer

问题:

1) 1)来自 MATLAB Simulink 的 SPI 接收块错误是否是向 AWS 发送数据的流程不稳定且不成功的原因?

2) 2)无论原因如何、您能否帮助我确定为什么 C2000 SPI 接收块始终会出现错误? 以及如何修复它?

3) 3)我是否在该过程中遗漏了某个内容、或者是否有其他原因导致数据传输和存储失败至 AWS?

此致、

Danilo

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

    您好 Danilo、

    下周我将在这里跟进。

    最棒的
    Jacob

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

    您好 Danilo、

    SPI 接收错误可能是您的数据并非全部通过 MQTT 发送到 AWS 的原因。 但是、可能还有其他因素会导致这种情况。

    2.我会尽力而为。

    3.成功的 MQTT 数据传输取决于许多条件,包括数据包形成和与代理的 TCP 连接。  

    让我们首先关注 C2000和 CC3220之间的 SPI。 您是否在 SPI 通信期间使用 DMA? 您尝试使用的比特率是多少? 您要发送1x3整数数数组、那么12字节的数据呢?  

    谢谢、
    Jacob

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

    您好、Jacob、

    我们收到了客户的反馈、

    要回答问题:
    1) 您是否在 SPI 通信期间使用 DMA?
    我不确定 DMA,但当我进行调试时,我可以在上个月的错误中看到 DMA 函数。 一个 E2E 论坛主题说、对于 SPI 驱动程序、TI 驱动程序实际上默认已使用 DMA 进行高效传输。 我还在使用 spislave 示例、并对其进行了修改、以便在 MATLAB Simulink 中与 C2000进行通信、因此、我认为我在 SPI 通信期间使用了 DMA、因为代码中使用了 TI 驱动程序。 如果有特定的检查方法、请告知我。

    2) 您尝试使用的比特率是多少?
    -在我的代码中,spiParams.bitrate = 10000000;



    3) 您要发送1x3整数数数组、那么12字节的数据呢?
    -我将发送范围为0到9999的[1x3]数据数组(整数)。

    此致、

    Danilo

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

    您好 Danilo、

    如果我正确理解客户的连接、它看起来是这样的:

          SPITM         SPI           MQTT

    MATLAB --> C2000 <--- > CC3220SF -> AWS

    客户的其他问题:

    如何对 C2000进行编程? 您是使用 SDK 中的示例、还是使用 MATLAB 对器件进行编程?  

    您是否能够对 C2000和 CC3220SF 之间的 SPI 通信进行逻辑分析仪跟踪?

    您的整数是 uint16还是 uint32?

    谢谢、
    Jacob  

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

    您好、Jacob、

    请参阅以下客户的回复。

    对于问题:
    1.如何对 C2000进行编程? 您是使用 SDK 中的示例、还是使用 MATLAB 对器件进行编程?
    -我正在使用 MATLAB Simulink 块对 C2000进行编程、如文章中所示、以便与 CC3220SF 之间传输和接收数据。

    2.您是否能够对 C2000和 CC3220SF 之间的 SPI 通信进行逻辑分析仪跟踪?
    我还没有尝试过,也不知道怎么做。

    3.整数是 uint16还是 uint32?
    我使用 uint16、因为 uint16是 MATLAB Simulink SPI 块唯一可以接收/发送的数据类型。

    此致、

    Danilo

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

    您好 Danilo、

    感谢您的参与。 我将在本周在这里作出答复。

    谢谢、
    Jacob

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

    您好、Jacob、

    我们收到了客户的进一步询问、

    我能够解决 C2000到 CC3220SF 到 AWS 之间的数据传输一致性问题。 由于我将与 CC3220SF 交换1x3数据、因此通过将 MATLAB Simulink SPI 接收块的数据长度从1修改为3来解决了该问题。 因此、数据传输现在始终向 AWS MQTT 测试客户端发送1x3数据阵列。 我每隔1秒通过 MQTT 向 AWS DynamoDB 发送1x3数据数组、其中 data-time 是主密钥。 但是、在检查存储1x3数据阵列的 AWS DynamoDB 时、似乎每隔1秒就无法存储这些数据。



    如上图所示、MQTT 测试客户端中显示每秒接收的数据数组。 但是、在下图(AWS DynamoDB 表)中、数据数组不是每1秒存储一次、我不知道导致这种情况的问题是什么。



    我使用以下 AWS IoT 规则将这些数据存储到 AWS DynamoDB:



    问题:
    1.您是否了解为何数据不每隔1秒存储在 AWS DynamoDB 中的所有可能原因?
    在这种情况下、我将使用 TI 的 AWS subscribe_publish_sample 项目。 在持续发送大约6分钟后、CC3220SF 会停止向 AWS 发送数据。 如何在示例项目代码中删除向 MQTT 发送数据的限制?

    此致、

    Danilo

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

    您好 Danilo、

    很高兴听到至少变速器问题已解决。 本周我将跟进客户的其他问题。

    谢谢、
    Jacob

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

    您好、Jacob、

    我们将在本周等待您的反馈。

    谢谢、

    Danilo

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

    您好 Danilo、

    1.您是否了解为何数据不每隔1秒存储在 AWS DynamoDB 中的所有可能原因?

       客户能否共享他们在 MQTT 客户端示例中使用的 QoS? QoS 为0时、有时数据可能会丢失


    在这种情况下、我将使用 TI 的 AWS subscribe_publish_sample 项目。 在持续发送大约6分钟后、CC3220SF 会停止向 AWS 发送数据。 如何在示例项目代码中删除向 MQTT 发送数据的限制?

       要解决此问题、客户能否共享 NWP 日志 (NWP 指南的第20节)和应用程序日志(运行 MQTT 客户端示例时的输出以及 AWS 的任何其他输出)?

    谢谢、
    Jacob

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

    您好、Jacob、

    我们收到了客户的反馈、

    我正在使用 QoS 0、但当我尝试在 CC3220SF 中使用 QoS 1时、它仅发送1组数据。 当我使用 QoS 0时、它会按预期每秒发送一次数据。 我刚刚在 CC3220SF 参数代码中将 QoS 0更改为 QoS 1、这与示例中的代码相同。 除了这一点之外、我还需要做什么其他的事吗?

    2.我将随机1x3数据阵列发送到 AWS DynamoDB、QoS 为0。 这里是 NWP 日志、MQTT 客户端的应用程序输出以及 AWS DynamoDB 相对于日期时间存储的数据。

    e2e.ti.com/.../NWP-logs.log



    此致、

    Danilo

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

    您好 Danilo、

    感谢您的日志、我将在本周稍后的时间跟进。

    此致、
    Jacob

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

    您好 Danilo、

    1.客户一定要使用 QoS 1. QoS 为1时、在 发送更多数据包之前需要服务器确认。 如果客户除了发送第一个数据包之外没有发送任何数据、则可能意味着 MQTT 配置存在不正确的情况。 如果 使用 SDK 中的 MQTT 客户端示例、则更改 QoS 所需的位置仅位于 MQTT_IF_Subscribe、MQTT_IF_Publish 和 MQTT_Will _QoS 中。

    2.我认为监听器日志在这里非常有用、因为问题可能是通过 MQTT 连接发送的数据中的问题。 客户能否捕获 Wi-Fi 监听器日志? 此外、对于应用程序代码、我指的是 CCS 项目的代码输出:

    上面的图片很有用、但从 MQTT 客户端示例获取应用程序输出更有帮助。

    谢谢、
    Jacob

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

    您好、Jacob、

    根据我们的客户、

    在本例中、我将使用 AWS CC3220SF SDK 中的 subscribe_publish_sample 项目、并将其修改为我需要执行的操作。 但是、我无法确定应该更改哪些 MQTT 配置、使其从 QoS 0更改为 QoS 1级别。

    我已经尝试了可以在 CC3220SF SDK 中运行 MQTT_CLIENT 示例的操作、但无法成功连接到 AWS 并正确获取所有监听器日志。 以下是运行 MQTT_CLIENT 示例的代码和输出:






    我不确定接下来要修改什么、我已经花了很多时间让示例代码运行、但失败了。 您也可以指导我完成这一过程吗?

    此致、

    Danilo

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

    您好 Danilo、

    我稍后会跟进一些更多信息。

    谢谢、
    Jacob

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

    您好 Danilo、

    这些应用程序日志有两个错误:-1和-456。 -1表示 BSD 套接字错误、-456表示证书文件错误。 让我们重点关注-456、因为它更具体。 您是否可以要求客户仔细检查文件路径和提供的 CA 文件? 此错误通常是由文件路径中的错误或证书错误引起的。

    谢谢、
    Jacob

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

    您好、Jacob、

    我们收到了客户的反馈、

    感谢您为我提供最新信息。 我已经解决了数据存储中的问题。 我可以通过将"date-time"变量名称更改为"datetime"、并将格式从"mm-dd-yyyy - hh:mm:ss"更改为"yyyy-mm-dd hh:mm:ss"来解决该问题。 唯一的问题是如何使 CC3220SF 无限地向 AWS MQTT 发送数据。 在发送数据数组的1000次(不确定数量、仅估算值)次之后、CC3220SF 会停止发送数据。 我要实现的目标是 CC3220SF 应发送从 C2000接收的数据、直到我手动停止发送。

    您知道如何实现这一点吗? 我觉得修改 CC3220SF 代码的可能性更大、但我无法确定要修改哪个代码才能实现我需要的目标。 提醒一下、我使用 AWS SDK 中的 subscribe_publish_sample 项目作为代码的参考。

    此致、

    Danilo

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

    您好 Danilo、

    明天或星期一、我将尝试推荐一个解决方案。

    谢谢、
    Jacob

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

    您好 Danilo、

    很抱歉我的回答有延迟。 您能否指导客户在 debug_if.h 中将日志消息 if_severity 更新为 E_trace 而不是 E_info?

    在默认 MQTT_CLIENT_CC3220SF CCS 工程中、消息通过 MQTT_IF_Publish 命令发送到远程服务器。  这在等待按下按钮并发送一些有关 LED 切换的文本的 while 循环中。 客户是否更新了 while 循环条件? 他们如何通过 MQTT_IF_Publish 命令发送数据?

    我相信 MQTT 数据包的最大速度是256MB。

    谢谢、
    Jacob