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.

[参考译文] LAUNCHCC3220MODASF:CC3220:如何使用 SPI 对 CC3220进行编程

Guru**** 2538930 points
Other Parts Discussed in Thread: UNIFLASH, SEGGER, CC3220SF, CC3220MOD

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/973050/launchcc3220modasf-cc3220-how-to-program-the-cc3220-using-spi

器件型号:LAUNCHCC3220MODASF
主题中讨论的其他器件:UNIFLASHSEGGERCC3220SFCC3220MOD

您好!

您能否提供一个示例文件、用于通过 Cheetah 器件通过 SPI 进行刷写。 这会对我大有帮助。

非常感谢您的参与。

BR、

Arnaud

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

    使用 Uniflash、您可以创建一个".bin"或".hex"(Intel Hex)格式的 Gang 映像、该映像可用于对闪存进行编程。

    BR、

    Kobi

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

    您好、Kobi、

    为什么 bin 文件与闪存大小不匹配。 我尝试通过 RPI 下的 flashrom 对闪存进行编程。

    输出:

    Linux 5.4.83-v7+上的 flashrom v1.2-190-ga2d9a40 (armv7l)
    flashrom 是免费软件、可从 https://flashrom.org 获取源代码

    将 clock_gettime 用于延迟循环(clk_id:1、分辨率:1ns)。
    在 Linux_SPI 上找到了 Macronix 闪存芯片"MX25R3235F"(4096 KB、SPI)。
    错误:图像大小(4186344 B)与闪存芯片的大小(4194304 B)不匹配!

    您能解释一下。

    bin 是通过 uniflash 创建的。

    BR、

    Arnaud

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

    请参阅文章

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

    您好、Arnaud、


    您是否尝试使用 Total Phase 在 Windows 上提供的闪存中心软件? 我以前没有使用过闪存、但使用闪存中心成功对 CC3220串行闪存进行编程。

    需要记住的主要一点是、您可能需要将 SPI 闪存特性添加到配置文件中、并将其添加到软件中、如我在这里的文章中所述:

    https://e2e.ti.com/support/wireless-connectivity/wifi/f/968/p/930433/3437653#3437653

    这是因为闪存中心开箱即用不支持 MX25R3235F。

    闪存中心软件应该能够自动将 Uniflash 给出的.bin 填充到串行闪存的大小。 您是否尝试填充.bin 文件以匹配串行闪存大小?

    此致、

    Michael

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

    您好、Michael、

    否目前、我尚未尝试使用 TotalPhase 软件、因为此时我没有 TotalPhase 工具。

    我必须将文件放置在何处? 在开始或结束时?

    BR、

    Arnaud

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

    您好、Arnaud、

    当您提到正在寻找有关通过 Cheetah 器件进行刷写的说明时、我曾以为您拥有该器件:

    https://www.totalphase.com/products/cheetah-spi/

    您能否澄清一下您要使用的 SPI 闪存工具是什么?

    您应该在二进制文件的完整内容之后的末尾填充该文件。

    此致、

    Michael

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

    您好、Michael、

    好的、这从我的角度来说有点令人困惑。 我尝试通过 Raspberry PI 的闪存 ROM 进行编程、以遇到任何问题。 我认为 TotalPhase 工具的配置文件可能会对我有所帮助。 在下一步中、我将尝试通过 J-Flash-SPI 组织 SEGGER jlink-Plus 和闪存。 如果这也不起作用、我们在生产中会遇到问题、因为我们在这里使用 SEGGER 工具进行编程。

    最后一种选择是购买一个总相器件。

    BR、

    Arnaud

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

    您好、Arnaud、

    只是一个评论。

    您在使用闪存时看到的行为是正确和预期的。 Flashrom 的设计用途与生产编程不同。 因此、严格要求映像的大小和存储器的大小。  在您的情况下、您可以向 Uniflash 生成的文件添加填充、也可以禁用闪存内部的此检查并编译自己的版本。

    Uniflash 生成的映像可能小于 Macronix 闪存大小的原因非常简单。 在生产编程期间、对 sFlash 未使用的内容进行编程会浪费时间。

    1月

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

    尊敬的 Jan、Michael:

    我现在已尝试通过 J-Flash SPI V6.95b (SEGGER_LOG.txt)进行刷写。 从工具的角度来看、一切都很顺利。

    输出 J-Flash SPI V6.95b begin ================================================================================ :

    正在连接到 SPI 闪存...
    - VTarget = 3.238V
    -读取 SPI 闪存 ID = 0xC2 28 16
    -找到 SPI 闪存:Macronix MX25L3273F
    -连接成功
    打开数据文件[C:\Users\8489\Pictures\Gangimage_test\test_Gangimage_Programming.hex]...
    -数据文件已成功打开(168342字节、3个范围、数据 CRC = 0xC00D6F73、文件 CRC = 0x51DDEDD1)
    编程和验证目标(168342字节,3个范围)...
    -正在读取受影响的扇区...
    -目标存储器读取成功。 (327680字节、3个范围)
    -擦除受影响的部门.
    -擦除操作成功完成
    -编程目标(168342字节,3个范围)...
    -目标已成功编程
    -验证目标(168342字节,3个范围)...
    -所有已加载字节均已验证!
    -目标编程和验证成功。 - 9.910秒后完成

    输出 J-Flash SPI V6.95b 结束================================================================ :

    但 POR 之后的映像不会通过 MCU 启动。 Uniflash 回读显示以下结果(使用 J-FlashSPI.PNG 进行 Step3_AfterFlashing)。 我想它不会起作用。

    在通过 uniflash 映像(Step4_ProgrammingViaUniFlash.PNG)进行刷写后、由于 UART 终端的结果、MCU 会在 POR 后启动。 使用 Uniflash 回读是很好的 Step5_AfterPRogrammingWithUniflash_Connect.PNG。

    作为起点、我使用了 SimpleLink CC32xx SDK 4.40.00.07中的 local_time_CC3220SF_LAUNCHXL_tirtos_ccs 项目。 还附加了 bin 文件。

    还附加了 Uniflash 工程(test_angimage_210127092757.zip)。 还随附了所用的十六进制文件。

    Gang 映像创建如(Step1.PNG、Step2.PNG)所示

    还附加了 uniflash 用于创建组映像的二进制文件(local_time_CC3220SF_LAUNCHXL_tirtos_ccs.bin)

    我把所有东西压缩在一起。

    使用的板是 CC3220SF_Launchpad、可访问 SPI 的 J12。

    你能帮我解决什么问题吗?

    BR、

    e2e.ti.com/.../gangimage_5F00_test.zip

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

    您好、Arnaud、

    遗憾的是、我无法测试您的二进制文件、因为我没有任何合适的 SPI 闪存编程器。

    但我认为问题可能是在您的编程过程中缺少 sFlash 的整体擦除(完全闪存错误)。

    1月

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

    您好、Michael、

    快速响应。 我已经完成了完全擦除和编程镜像、之后没有什么比这更好的了。 POR 图像无法启动后。

    使用 uniflash 回读、为我提供反馈、某处发生崩溃、因此不加载新映像。

    输出 J-Flash SPI V6.95b begin ================================================================================ :

    正在擦除芯片...
    -擦除64个扇区、1个范围、0x0 - 0x3FFFFF
    -擦除操作成功完成。 -72.145秒后完成
    正在读取整个闪存芯片...
    64个扇区、1个范围、0x0 - 0x3FFFFF
    -目标存储器读取成功。 (4194304字节、1个范围)- 3.360秒后完成
    打开数据文件[C:\Users\8489\Pictures\Gangimage_test\test_Gangimage_Programming.hex]...
    -数据文件已成功打开(168342字节、3个范围、数据 CRC = 0xC00D6F73、文件 CRC = 0x51DDEDD1)
    编程和验证目标(168342字节,3个范围)...
    -正在读取受影响的扇区...
    -目标存储器读取成功。 (327680字节、3个范围)
    -编程目标(168342字节,3个范围)...
    -目标已成功编程
    -验证目标(168342字节,3个范围)...
    -所有已加载字节均已验证!
    -目标编程和验证成功。 - 2.855秒后完成
    正在读取整个闪存芯片...
    64个扇区、1个范围、0x0 - 0x3FFFFF
    -目标存储器读取成功。 (4194304字节、1个范围)- 3.327秒后完成
    正在验证目标(4194304字节,1个范围)...
    -所有已加载字节均已验证! - 3.310秒后完成

    输出 J-Flash SPI V6.95b 结束================================================================ :

    有些我需要一些帮助。

    BR、

    Arnaud

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

    您好、Arnaud、

    遗憾的是、如果不测试 SPI 闪存编程器、我无法说出您的案例到底有什么问题。 请等待 Michael 的回答。

    但有一件事是在您之前的日志中可疑的。 有以下闪存标识:

    正在连接到 SPI 闪存...
    - VTarget = 3.238V
    -读取 SPI 闪存 ID = 0xC2 28 16
    -找到 SPI 闪存:Macronix MX25L3273F
    -连接成功 

    器件 ID 为 C2 28 16的闪存由 j-link 标识为 MX25L3273F。 但该 ID 适用于实际上位于 CC3220MOD 内的 MX25R3235F。 这让我想知道、如果闪存类型识别不能正常工作、那么在 j-link 中其他功能不起作用。

    1月

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

    您好、Michael、

    嗯、是的、没错、SEGGER 工具假定它是 MX25L3273F 这一点有点令人困惑。 数据表

    MX25R3235F 告诉我与您说的相同:0xC2 0x28 0x16。

    MX25L3273F 的数据表告诉我:0xC2 0x20 0x16。 奇怪。 在这种情况下、我联系了 SEGGER。

    但除此之外,我可能在创建我的 Gang 映像时做了一些错误的事情?

    BR、

    Arnaud

    此外:

    我已尝试以下过程。

    1. 通过 Uniflash 对映像进行编程。
    2. 检查 POR 正常后程序是否正在运行
    3. 通过 Segger-Tool 从 SPI-Flash 读回数据
    4. 擦除完整的 SPI 闪存
    5. 执行 POR 编程未运行、这是我假定的
    6. 写回在第3点下读取的数据
    7. 正在运行 POR 程序

    因此,我假设 SPI 工具运行正常,因此故障可能发生在 Uniflash 生成的成组映像中? 我不知道发生什么错误。

    zip 文件中随附了两个 hexfiles:

    readback.hex 是从第3点开始的文件

    uniflash_gangimage.hex 是 uniflash 生成的十六进制文件

    BR、

    Arnaud

    e2e.ti.com/.../hexfiles.zip

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

    您好、Arnaud、

    我目前无法访问 SPI 编程器、如果需要、我需要几天时间才能获取 SPI 编程器并进行设置。 因此、我无法对您的二进制十六进制文件进行编程、以查看它们是否起作用。

    需要快速检查的一点是、您是否将 CC32xx 的 SOP 引脚设置为000、而不是典型的010操作+ UART 闪存模式? 为了让 CC32xx 解压缩十六进制二进制文件、引导加载程序需要在 SOP[2:0]= 000模式下启动。

    此致、
    Michael

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

    您好、Michael、Jan、

     同时、我还做了一些其他测试。

    测试1:
    通过 JFLASH-SPI 和 SOP 0:0:0:0 cc3220sf_out_for_box_tirtos_Programming.hex 闪存至由 Out of Box project.Discontnet 编程器创建的芯片、这意味着复位被释放。
    刷写板开始工作1分钟后、LED 在绿色和白色之间切换。

    一切都很成功、但我不知道为什么。 它必须与 uniflash 相关。

    经过一段时间通过 SPI 擦除芯片并释放 MCU 后、断开与 SPI 闪存工具的连接。 器件无法启动我的假设。

    测试2:

    通过 JFLASH-SPI 和 SOP 0:1:0 cc3220sf_out_for_box_tirtos_Programming.hex 闪存至由 Out of Box project.Discontnet 编程器创建的芯片、这意味着复位被释放。

    1分钟后、无法成功启动 POR 等待大约1分钟、无法成功启动。 切换到 SOP 0:0:0 POR 等待一分钟... 器件开始成功运行。

    测试3:

    从 uniflash 切换回我的十六进制文件(test_gangimage_Programming.hex)。 SOP 0:0:0:0通过 SPI.Discontnet 编程器闪烁、这意味着复位被释放。 90秒后、控制器没有生命体征。

    测试3:

    将 cc3220sf_out_for_box_tirtos 与我的测试 MCU 映像 uniflash 配合使用不会让我添加 bin 文件。 操作失败:图像创建失败。。 。

    切换回从 local_time 示例派生的 uniflash 项目、并添加了 dummy-root-ca-cert、dummy_ota_vendor_cert.der 和 ota.dat。 通过 SPI SOP 0:0:0进行闪存。 Disconnet 编程器、这意味着复位被释放。
    37秒后、器件开始运行。 是的,它是有效的!

    我认为问题可能是证书文件丢失了,您能给我反馈吗?哪些文件是必需的?

    产生的问题:


    -是否可以创建一个教程来创建使用所有所需证书等正确的 GANG_IMAGE?
    -您能给我反馈哪些文件是 GANG_IMAGE 必须包含在使用 uniflash 创建的映像文件中的。
    -在图像中的 cc3220sf_out_of_box_tirtos 中,有一个 mcubootinfo.bin 文件的作用是什么? 什么是 mcubootinfo.bin?


    从我的侧边看、闪过闪存的闪存、覆盆子 PI 也起作用。

    我不会将文件填充为正确的大小。 我修改了程序源以跳过针对 sflash 大小的文件检查。

    闪存输出开始:

    在 Linux 5.4.83-v7+上使用 flashrom v1.2-190-ga2d9a40-mad脏(armv7l)
    flashrom 是免费软件、可从 https://flashrom.org 获取源代码

    将 clock_gettime 用于延迟循环(clk_id:1、分辨率:1ns)。
    在 Linux_SPI 上找到了 Macronix 闪存芯片"MX25R3235F"(4096 KB、SPI)。
    错误:图像大小(4188680 B)与闪存芯片的大小(4194304 B)不匹配!
    错误:无法读取完整文件。 已获得4188680字节、需要4194304!
    正在读取旧的闪存芯片内容... 完成。
    正在擦除和写入闪存芯片...
    警告:芯片内容与请求的图像相同。
    擦除/写入完成。

    闪存输出结束:

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

    您好、Arnaud、

    我很高兴、一旦 CC3220设置为 SOP 000、您就可以使用 SPI 编程过程。

    有关如何设置自己的.hex 文件的指南、我建议您在此处查看 Uniflash Imagecreator SimpleLink Academy 模块:

    https://dev.ti.com/tirex/explore/node?node=ABEoqU9o3snoxDcmIpW0EA__fc2e6sr__LATEST

    这将引导您完成项目设置。 通常,如果使用虚拟证书存储文件(除非您已经从受信任根 CA 机构购买了签名证书,否则您需要执行此操作),则只需提供 dummy-root-ca-cert 文件。

    此致、

    Michael

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

    您好、Michael、

    感谢您的回答。 我已经确认、通过 SPI 进行闪存只需要 dummy-root-ca-cert、如果我要进行 OTA、我将需要 OTA cert 但我想我可以使用具有自签名证书的供应商证书目录、然后必须创建 OTP 文件、我准备好使用它们。 或者我是否出错了? 是否使用  供应商证书目录(虽然可通过 SPI 闪存编程使用)或是否必须通过 UART 引导加载程序进行 Uniflash 烧录?

    BR、

    Arnaud

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

    您好、Arnaud、

    如果您讨论供应商器件身份验证、则不支持通过 Gang 编程来实现此功能(请参阅 4章中的本文档)。

    1月

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

    您好、Jan、

    谢谢您、我可能已阅读过该内容。是的、我将讨论  供应商设备身份验证。 但我认为使用 uniflash 和 uartbootloader 是可能的、对吧?

    添加:  

    但是,当我通过 SPI 从 CA 闪存中购买认证产品时,是否可以正确地完成可信根证书目录?

    BR、

    Arnaud

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

    您好、Arnaud、

    可以、通过 Uniflash GUI 或 CLI (UART)可以实现这一点。

    也可以通过 嵌入式编程和 UART 实现。 遗憾的是、TI 未提供包含供应商器件认证和嵌入式编程的官方文档。 但所需信息可在 Uniflash (映像创建器)的源代码中轻松找到、因为映像创建器是在 Python 中编写的。

    1月

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

    添加:  

    但是,当我通过 SPI 从 CA 闪存中购买认证产品时,是否可以正确地完成可信根证书目录?

    BR、

    Arnaud

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

    您好!

    是的、没错。

    我不使用供应商设备验证、也没有详细研究此功能。 从这一点看、我无法说、这是否有任何真正的技术原因不支持通过 SPI 编程。 可能原因是 Uniflash 不支持 OTP 内容的生成、而且最终用户也没有在如此低的级别记录功能。 但这只是我的猜测。 这需要更深入的调查。 但我看到 CC32xx 很多时候都是类似的。 即使功能不是 TI "官方"支持的、在技术上也是可能的。

    1月

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

    您好、Jan、Michael、

    @您对此的陈述是什么。

    BR、

    Arnaud

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

    您好、Arnaud、

    正如 Jan 指出的、OTP 供应商证书目录功能不支持使用 SPI GANG 编程。 这是因为引导加载程序 SPI 十六进制映像解压缩过程无法执行所需的 OTP 功能。

    此致、

    Michael