【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 即可。

欢迎登录大大通,阅读原文,浏览更多该原厂系列技术内容!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值