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.

[参考译文] CC3120BOOST:SWPA230 CC3120嵌入式编程说明

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/889171/cc3120boost-clarification-on-swpa230-cc3120-embedded-programming

器件型号:CC3120BOOST
主题中讨论的其他器件:CC3120UNIFLASH

你好。

参阅文档 SWPA230A–CC3120和 CC3220 SimpleLinkTmWi-Fi 嵌入式编程,我不清楚一些内容。  希望获得一些信息、而是尝试一下、并可能使其变砖。

首先、我使用31XXEMUBOOST 和 Uniflash 对器件进行了编程。 所有器件均按预期工作。 但是、我们不会向全球客户分发数千个这些编程器板和 Uniflash 应用程序。  因此、目的是使用上述指南通过 CC3120上的 UART 对其进行编程。

对于初始开发、我只需使用基于 PC 的程序、就可以按预期与器件进行通信。

首先、要对器件进行编程、我假设我使用来自 Uniflash 的输出?   有四个输出文件:

  • bin -看起来像存储器中某个内容的二进制映像...  这只是闪存的直接映像?
  • 十六进制- ASCII 表示、但此文件较小(??!!)
  • SLI - 另一个二进制文件、用于"image creator"
  • UCF -主机使用的另一个二进制文件

我是否应该通过 UART 通过 CC3120下载 UCF 文件以对闪存 RAM 进行编程?  不是 SLI?

这些映像是否还包含我使用 Uniflash 添加的文件?  例如、三个/sys/cert/...  文件?  或者、这些文件是否必须手动存储(例如、通过 SPI 总线使用 API)?

接下来、在文档230第5.2节中、有流程图。  但是、在第5.3节中、是流程图中详细介绍的各个步骤。

第5.3.4节规定:

为了对 ROM 引导加载程序进行一些修复、有必要下载 SRAM 的补丁。 。
获取 SRAM 存储信息的步骤如下:

(强调已添加)  这说明了如何获取有关 SRAM 的信息、但没有任何内容说明"下载补丁所需..."  什么修补程序?  执行此操作的命令是什么?  只需转到第5.3.5节 "原始存储擦除"即可。   如果任何"补丁"被下载到 SRAM、它们将在此步骤中被擦除。

第5.3.7节再次说明"ROM 与编程的补丁一起执行" 什么是"补丁"?

第5.3.10节说明 SFLASH 内容必须驻留在“块33的8字节偏移”中。  内容不能容纳8个字节。  这意味着它从块33的第8个字节开始、并以线性方式继续?   无需在每个块上执行8字节偏移、只需执行第一个?   

步骤5.3.6中加载的映像加载到 SRAM 是否与步骤5.3.10中加载到 SFLASH 的映像相同?

从概念上讲、是否需要加载 SRAM 以及是否也加载 SFLASH?  逻辑上说、一旦加载了 SFLASH、并且器件复位或下电上电、它将从 SFLASH 启动、并且 SRAM 将被清除。

当我提出更多问题时、我会跟进。  谢谢。

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

    尊敬的 Chris:

    是的、对于嵌入式编程、您需要使用 Uniflash 提供的 UCF 文件输出。 UCF 文件将包含文件系统的完整内容、包括应用程序二进制文件、证书以及您在 Uniflash 中添加的其他用户文件。

    在该部分中生成的修补程序与引导加载程序修补程序相关。 与 NWP 主要通过 ROM 代码运行的方式类似、但能够通过服务回送加载补丁、引导加载程序也可以加载其 ROM 代码的补丁。 加载下载补丁时、您会有效地指示引导加载程序在 SRAM 中使用某些补丁。 在第5.3.6节中使用原始存储写入命令下载补丁。 编写后、将在第5.3.7节中执行该修补程序。

    是的、SFLASH 补丁应从块33开始以8字节偏移加载到闪存中、然后以线性方式继续。 SFLASH 和 SRAM 修补程序不相同、必须加载这两个修补程序。 您可以认为 SRAM 修补程序是 SFLASH 修补程序正常工作的先决条件。

    如果您有关于 CC3120嵌入式编程的更多问题、请告诉我。 通常、浏览 TI 提供的嵌入式编程工具的 python 源文件对于了解编程流程非常有用。 您还可以对嵌入式编程工具以及 Uniflash 执行逻辑分析仪捕获、以查看这些工具如何发送原始引导加载程序命令来刷写器件。 最后、我在这里的这个线程中有一些调试提示和信息、以防你遇到问题: https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/t/825953

    此致、
    Michael

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

    Michael、

    谢谢、但是...

    [引用用户="Michael Reymond "]

     SFLASH 和 SRAM 修补程序不相同、必须加载这两个修补程序。 您可以认为 SRAM 修补程序是 SFLASH 修补程序正常工作的先决条件。

    [/报价]

    这些修补程序在哪里/什么位置?  除了本文档之外、我找不到其他对它们的引用。

    第5.x...节 清楚地演示了如何下载修补程序(或任何二进制数据)。  但没有任何解释说明该二进制数据来自何处/来自何处。

    已更新: 找到它们。  我认为它们是 PTC 文件吗?

    对于 SRAM,该文档显示擦除3个块,每个块为4096字节(根据 GetStorageInfo)。   

    我的 GetStorageInfo 告诉我 SRAM (ID=0)为4096字节 X 25块= 100K。  是这样吗?  在 CC3120器件中、我没有找到任何有关 M4 CPU 的规格、说明有多少 SRAM。 因此、我无法了解...

    但我也怀疑...  因为同一命令告诉我 CC3120升压 SFLASH (ID=2)具有4096字节 X 512块= 2MEG。  这是不正确的。  升压板上的 SFLASH 芯片为16Meg。   

    [引用用户="Michael Reymond "]

    是的、对于嵌入式编程、您需要使用 Uniflash 提供的 UCF 文件输出。 UCF 文件将包含文件系统的完整内容、包括应用程序二进制文件、证书以及您在 Uniflash 中添加的其他用户文件。

    [/报价]

    我还深入研究了 UCF 文件的二进制数据。 我看到四个文件名条目以 ASCII 显示... 但我找不到"/sys/cert/client.der "的可见条目 、尽管我在使用 EMUBOOST 板刷写器件时包含了该文件。  因此,如果它位于 UCF 中,我不能说。

    我假设 UCF 文件是步骤5.3.11中使用的文件吗?  但是、现在我甚至无法到达那里、因为我在步骤5.3.6和5.3.1上受阻。

    (在 doc 的第5.3.11节中、"FS Programming"应该为"linked"、就像前面几节中的命令一样。)

    我只是假设"FS 编程"命令知道它不会写入那些"修补程序"所在的位置? 它知道将图像放置在何处?  因为"修补程序"被加载到命令中指定的块中。

    这些都是我还不清楚的事情。

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

    尊敬的 Chris:

    是的、这些补丁是您找到的与嵌入式编程工具源一起分发的.PTC 文件。

    当您通过嵌入式编程工具使用 UART 引导加载程序接口时、您实际上是在与 NWP ARM 内核通信。 这确实具有独立于您在 CC32xx 器件上找到的主256KB M4 ARM 内核的 SRAM。

    SFLASH 大小将是正确的假设您使用的是16Mbit 闪存、这是 CC3120 BoosterPack 上的闪存、该命令应以字节为单位返回每个块的大小、而不是以位为单位。

    创建器件映像时在 uniflash 中拥有的任何文件也应添加到生成的 UCF 中。 请注意、如果您对要在 Uniflash 中编程的文件进行了更改、则必须再次单击"Create Image"以重建器件映像。 单击"Save UCF"仅保存先前创建的映像。

    UCF 文件实际上是您在步骤5.3.11中使用的文件

    是的、使用 FS 编程 API 不会覆盖您在前面的步骤中创建的补丁。 这是因为虽然原始写入将盲目写入您指定的存储器地址、但 FS 编程 API 是对 NWP 的函数调用、实际上与使用主机驱动程序执行 sl_FS*调用非常相似、 如在中所示,NWP 将有自己的代码来智能地处理文件编程请求,并从 UCF 文件中提取所需数据并构建其文件系统。

    如果您有进一步的问题或需要更多的澄清、请告诉我。

    此致、

    Michael

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

    Michael、

    编辑:不需要很长时间就能失败。  请参阅以下文章...

    [引用用户="Michael Reymond "]

    是的、这些补丁是您找到的与嵌入式编程工具源一起分发的.PTC 文件。

    [/报价]

    当您在 TI 网站上开始搜索时、您会转到 CC3120芯片(两个月前、当我被告知评估此芯片以将其集成到我们的产品中时、我开始使用该芯片)。  然后在4打文档、白皮书和注释中、没有任何内容会将您定向到此修补程序页面。  即使是 swpa230文档也不会告诉您这些"修补程序"是什么或在哪里。

    有人能不能使这一点变得模糊?

    [引用用户="Michael Reymond "]

    当您通过嵌入式编程工具使用 UART 引导加载程序接口时、您实际上是在与 NWP ARM 内核通信。 这确实具有独立于您在 CC32xx 器件上找到的主256KB M4 ARM 内核的 SRAM。

    [/报价]

    是的、在我设计连接到芯片的 MCU 接口时、只需查看升压原理图就可以明显看出这一点。

    (为什么在 doc swas034文档中、NWP"无线网络处理器"的缩写?  这是一种读写障碍……)

    [引用用户="Michael Reymond "]

    SFLASH 大小将是正确的假设您使用的是16Mbit 闪存、这是 CC3120 BoosterPack 上的闪存、该命令应以字节为单位返回每个块的大小、而不是以位为单位。

    [/报价]

    同样、正如文档的第4.4.5节中定义的那样、如果每个块大小为4096字节、并且有512个块、那么块 X 字节= 2meg。  从器件接收到的响应为(SFLASH):

    00 0A 11 (长度和校验和)
    10 00 -4096字节
    02 00 <- 512块
    00 C2 28 15 (保留,我不知道这是什么...) 

    在某个位置、它会关闭8倍。

    [引用用户="Michael Reymond "]

    创建器件映像时在 uniflash 中拥有的任何文件也应添加到生成的 UCF 中。 请注意、如果您对要在 Uniflash 中编程的文件进行了更改、则必须再次单击"Create Image"以重建器件映像。 单击"Save UCF"仅保存先前创建的映像。

    [/报价]
    是的、我按正确的顺序使用了 Uniflash。  我创建了图像、然后使用了"保存"功能。  并保存了所有四种文件类型。
    1.添加文件...
    2. 创建映像
    3.保存铀转化设施
    用户文件的文件名在 UCF 中的任何位置都不可见。  但其他文件名是可见的。
    虽然我还没有进入这个阶段、但我希望他们不在最终刻录的图像中...
    随着我的进步、我将在出现其他问题时发布这些问题。  到目前为止,谨慎遵守第5.3节的小步骤进展顺利。  这个过程是我见过的一些更好的文档。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Michael、

    我正在尝试执行第5.3.5节的步骤1-6。   以下是通信:

    第5.3.1节
    输入-> 00 cc
    OUT->00 03 27 27
    输入-> 00 cc
    in ->84
    section 5.3.2
    OUT->00 03 2f 2f
    输入-> 00 cc
    In ->00 1e 35 01 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 30 00 00 00 00 00 00 00 00 00 00 00 00
    out->00 cc
    第5.3.4节
    out->00 07 31 00 00 00 00 00
    输入-> 00 cc
    In ->00 0A 29 10 00 19 00 00 00 00 00 00
    out->00 cc
    section 5.3.5
    step 1 out->00 0f 33 30 00 00 00 00 00 00 00 00 00 00 00 00 00 03
    第2步输入->00 cc
    第3步输出->00 cc
    第4步输出->00 03 23
    第5步输入->
    

     根据第5.3.5节第4步、主机正在发送 GetStatus

    在步骤5中、器件应以 ACK 后跟最后状态进行响应。

    但是、在等待15分钟后、不会发送任何内容。

    有什么建议吗?

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

    有人曾告诉我、如果我没有抱怨 TI 的糟糕文档和支持、我可能会获得更好的结果。

    两周后、没有帮助...

    真相是伤害的。

    尽管 TI 忽略了我的帮助请求(我使用过的其他三家供应商实际上允许我打开"案例"并直接与工程师沟通、 其中一家甚至打电话给我、虽然是印度的供应商、但至少他们关心)、 但我还是花了我的公司时间与监听器对 UART 通信进行逆向工程、 并使其正常工作。

    如果有人遇到此主题、 请勿执行第5.3.5节中的步骤3。  它会使器件停止、任何东西都不会向前移动。

    本节中的其余步骤似乎正常工作。

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

    您好!

    为什么不将 Python 代码用作嵌入式编程的基础? 此代码非常易于理解。

    我的逻辑器件正在为我开发嵌入式 C#编程代码、他需要两天时间来实施 TI 提供的所有相关文档。

    1月

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

    [引用 user="hnz"]

    为什么不将 Python 代码用作嵌入式编程的基础? 此代码非常易于理解。

    [/报价]

    哈哈!!  真有趣。  在运行 TI RTOS 的 AM335x 中使用 Python。

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

    您好!

    您想说、将 Python 中的代码重新写入 C 是如此困难? 我不同意这一点。

    BTW... 在 Cortex-A8上运行 Python 代码没有任何问题。 因为即使在 Cortex-M3中、MicroPython 也能很好地工作。 这真的不是一种魔法。

    1月

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

    我们必须研究符合标准的 JPG 和 G4压缩、以及驱动复杂的 FPGA 外设。  近50万行代码被分别放置在主项目和可重用库中。

    不会放弃一切来实现这一目的。