.ptn文件相关问题点理清
之前文档我们已经讨论DFU 的有线升级方式,当前开始我们将讨论OTA的升级方式,而OTA (through gaia)升级绕不开.ptn文件;本文将浅谈.ptn文件;
问题点1:.ptn文件在OTA升级中的作用?
OTA升级和使用UART或USB等有线方式升级的最大差异是:其需要BT 模组外挂一颗external flash;这颗flash的作用是:保存通过gaia 传送到BT 模组的数据,然后再把数据从外部flash copy 到内部flash;外部flash 起到了临时保存数据的作用,所以在gaia OTA升级中,一般是指定一块partition(并不是整颗flash)用于保存数据;而partition的设置(编号、size 大小、类型等)就通过.ptn文件进行设置;
Attention:OTA 升级中,只使用一块partition用于保存dfu data, 而其他partition可以继续用于其他用途;
问题点2:.ptn文件是什么?
.ptn文件用于设置external flash 中partition大小,可以直接使用.txt文件修改为.ptn文件后缀。
在《CS-334172-UG-2(SQIF Configuration User Guide).pdf》中有较为完整的内容描述;.ptn文件除了用于CSR867x(如:CSR8670)等OTA升级、外挂Audio Prompt外,像qcc300x等不带内部flash的BT chip,其也使用.ptn文件进行设置;
注意Partition type 定义为“PS”的partition,此为PS Key专用,且每个ptn文件只有一个,如sample ptn截图所示,以下截图是qcc3008的ptn设置;
PS Partition 一般大小为8K;其余的XUV size,需要基于实际xuv size进行设置(只大不小原则);
问题点3:.ptn文件如何操作?
ptn文件操作使用nvscmd指令;
nvscmd -usb 0 dump 实际路径\back.ptn ,其作用是把device(如CSR8670)中的.ptn文件dump 出来;--当device中没有.ptn文件时,具体错误提示如截图:
烧录ptn文件:通过nvscmd -usb 0 burn 实际路径\sqif.ptn all, 写ptn file 到SQIF中;Note:执行烧录动作,需把对应partition定义的文件放置在同一目录下,在文档《CS-334172-UG-2.pdf》P13有描述到“5. Make sure the folder contains PTN file and all of the other required XUV image files before programming SQIF with the contents. See”
删除flash: nvscmd -usb 0 erase
读取Flash 相关信息:nvscmd -usb 0 identify
问题点4:如何计算每个partition 的size大小?
在计算每个partition的size大小前,需先使用“nvscmd -usb 0 identify”指令来读取当前device上外挂的flash 总大小,如以下截图所示:
如截图显示,当前external flash 为32Mbit;
32Mbit = 2048Kword;
此时.ptn中就按照2048K word 大小进行设置;
Attention:需理解的是,描述SQIF Flash大小使用的单位是Mbit;而ptn文件中partition分区中的“K”,指的是Kword,注意两者换算;
在《CS-334172-UG-2(SQIF Configuration User Guide).pdf》Page12中,
“Run FSSizeCheck to display the file size for the image files in each SQIF partition.
The read-write partition for PS Keys uses 8192 words and there is no need to run FSSizeCheck for it.” 由以上描述得知:使用FSSizeCheck 检测每个image 文件的大小,然后再确认需定义多大的partition size 。
问题点5:如何确认ptn文件中应该要分区多少个partition?
在《38845_CS-227835-AN-2.pdf》Page4 描述有“A maximum of 255 partitions can be created. ”即最大partition分区是255个;同时描述了分区只能使用nvscmd指令创建,且需同时创建;但实际Project中分区数量,需依Project 实际应用来定义;在《CS-00403484-UG.pdf》Page12中,描述了平时都有哪些内容被烧录到flash中,就能知道应该要设置多少个partition分区。
Partition的分区数量,直接和API GaiaDfuRequest 和UpgradeInit 关联 以及.upd文件关联:
GaiaDfuRequest 设置了具体哪一个partition用于DFU数据保存,如当前设置partition 0;
UpgradeInit 则设置partiton mapping table;
Note:如果.ptn只用于进行OTA 升级,那么最简单的设置是:
设置partition 0作为升级用Partiton,具体如截图所示:
Note:partition 0的大小按照实际定义: