主题中讨论的其他器件:UNIFLASH、 SEGGER、 CC3220SF、 CC3220MOD
您好!
您能否提供一个示例文件、用于通过 Cheetah 器件通过 SPI 进行刷写。 这会对我大有帮助。
非常感谢您的参与。
BR、
Arnaud
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.
您好、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、
好的、这从我的角度来说有点令人困惑。 我尝试通过 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、
您好、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
此外:
我已尝试以下过程。
因此,我假设 SPI 工具运行正常,因此故障可能发生在 Uniflash 生成的成组映像中? 我不知道发生什么错误。
zip 文件中随附了两个 hexfiles:
readback.hex 是从第3点开始的文件
uniflash_gangimage.hex 是 uniflash 生成的十六进制文件
BR、
Arnaud
您好、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、
可以、通过 Uniflash GUI 或 CLI (UART)可以实现这一点。
也可以通过 嵌入式编程和 UART 实现。 遗憾的是、TI 未提供包含供应商器件认证和嵌入式编程的官方文档。 但所需信息可在 Uniflash (映像创建器)的源代码中轻松找到、因为映像创建器是在 Python 中编写的。
1月
您好!
是的、没错。
我不使用供应商设备验证、也没有详细研究此功能。 从这一点看、我无法说、这是否有任何真正的技术原因不支持通过 SPI 编程。 可能原因是 Uniflash 不支持 OTP 内容的生成、而且最终用户也没有在如此低的级别记录功能。 但这只是我的猜测。 这需要更深入的调查。 但我看到 CC32xx 很多时候都是类似的。 即使功能不是 TI "官方"支持的、在技术上也是可能的。
1月