【SemeDrive】【X9H】OSPI PARTITION 烧录失败--primary partition table not match

前言:

硬件平台:X9H
软件版本:PTG4.0
以下为使用 SDFactoryTool 烧录 pac 包时出现 "primary partition table not match"错误的分析和解决过程。

【问题描述】

添加了新的的 flash 后,每次都在烧录 OSPI_PARTITION 分区时出现 Failed: remote: 0002:primary partition table not match 的错误。

【问题分析】

1. OSPI_SFS 分区烧录成功,此镜像为 norflash 的 json 配置,烧录进 OSPI1 Nor Flash 的第一个 sector。烧录成功表示 Flash 的驱动没有问题。

2. 这条错误在 rtos/lk_boot/lib/dloader/dloader.c 的 flash_gpt_table 函数中被报告,错误报告原因则是调用 check_partition_table 时返回错误。

3. 需要查看烧录时的 log 来定位 check_partition_table 失败的原因, 但终端没有烧录期间的打印信息。根据Semidrive 9 系列 BOOT 与升级指南》 :OSPI 的镜像烧录由 dloader 引导, dloader 由 FDA 进行校验,而 FDA 由 secure 的 boot rom 进行校验。由此可推断 OSPI 的烧录 log 在 secure domain 打印。

4. secure domain 对应的 debug 端口为 UART10 ,而 UART10 没有引出可连接的端口, 使用飞线+串口转 USB 的方法获取 secure 的 log。


5. 对比发生错误和正确烧录的 log,发现在对比烧录进来的分区表和实际 flash 分区的大小时,出现错误:
partition size error: first lba:122864 last_lba:65479!

last_lba 的单位是 “block”,表示内存偏移大小,正常烧录时应为 131015。错误原因是内存大小出错。



6. bpt 分区表设定的 OSPI Flash 大小为 64MB, 实际的 Flash 大小为 256M bit, 即 32MB。

【解决方法】

1. 换为 64MB 的 Flash 芯片
2. 修改分区表为 32MB,重新 make genpac,烧录成功。



总结:分区表设定的 Flash 大小为 64M bytes, 而实际硬件 Flash 大小为 32M bytes, 所以程序在 erase flash 的时候出现了冲突,所以报错。修改分区表的 disk_size 为 32MB,或者换到 64MB 的 Flash 即可。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论