页次: 1
看这个现象,我觉得重点不在 AiBurn 版本,而是在最前面的 PBP/SPL 没拿到正确的 PSRAM 参数。
日志里这句其实已经把方向说出来了:
SD can't get the psram table, return the default info.
USB/UART can't get the psram table, return the default info.D133EBS 能跑,换 D133ECS 后烧录时设备传完 image.updater.spl 就 lost,大概率是 updater spl 跑起来后初始化 PSRAM 失败或者用了错误的默认 PSRAM 参数,后面 USB 升级协议就断了。所以不是单纯 os 分区的问题,应该先查启动头/board 配置里给 PBP 用的 psram table。
我会按这个顺序排:
先确认 D133EBS 和 D133ECS 的 PSRAM 型号、容量、IO 模式、频率是不是一致。你说换成 16MB PSRAM 版本,那原来 EBS 很可能不是同一套参数。PSRAM 不是只改个容量就完事,timing/drive/latency 有时候也要跟着变。
找工程里和 psram table、dram_para、boot0/bootloader header、board.dts、sys_config 类似的配置。这个表通常不是应用层用的,而是给 PBP/SPL 很早期初始化内存用的;如果镜像里没带,PBP 就会打印你看到的 “can't get the psram table, return the default info”。
注意 AiBurn 烧录用的是 image.updater.spl。也就是说你要改的不只是正常启动用的 spl,有些 SDK 会单独生成 updater spl / usb burn spl。正常启动镜像改了,但 updater 还是旧板子的 PSRAM 参数,也会出现“启动能看到一点打印,但烧录马上掉线”。
先不要烧完整 os,建议只选 spl 或最小镜像测试。只要 updater spl 能稳定起来,USB 设备不会 lost,后面 os/rodata/data 再说。现在 log 是发完 spl 后等设备重连失败,说明第一阶段就没站稳。
串口乱码那个 Pr▒-Boot Program 也可以顺手确认一下波特率/时钟,不过这个不是主因。主因还是后面明确报了 psram table fallback。
所以回答“16MB PSRAM 版本需要改哪里”:优先改板级 PSRAM 参数表,并确认这个参数表同时进了正常启动 spl 和 AiBurn 用的 updater spl。改完后看串口里还会不会出现 can't get the psram table,如果这句消失,再看是否还能在传完 spl 后掉 USB。
这个我补充一个比较落地的做法:如果你的图片已经是 lvimgtool 生成的 bin,其实不用先把 1MB 全部搬进 RAM,关键是把“外部 flash 的随机读”包装成 LVGL 能读的文件接口。
我以前处理这种小 RAM 场景,一般会先做一个很土但是好用的只读资源表,不一定一上来就搞 fatfs/littlefs:
typedef struct {
const char *name;
uint32_t addr;
uint32_t size;
} res_item_t;
static const res_item_t res_table[] = {
{"bg.bin", 0x00100000, 1024 * 1024},
};然后 LVGL 的 fs_open/fs_read/fs_seek 里面根据文件名找到 flash 地址,read 的时候就是:
w25qxx_read(handle->base + handle->pos, buf, btr);
handle->pos += btr;这样上层还是:
lv_image_set_src(img, "F:/bg.bin");但底层根本不需要真正的 FAT 文件系统。对 W25Q64 这种固定资源显示来说,这个方案反而简单、快、坑少。
64KB RAM 能不能显示 1MB 图片?能,但要注意两件事:
LVGL 的 draw buffer 不要开全屏,开几行就行,比如 5 行、10 行。
图片格式最好别用需要大块临时解码缓存的格式。bin/raw RGB565 最省事,代价就是 flash 占用大一点。
还有一个容易踩的点:如果图片在 flash 里不是 lvgl image bin,而是你自己裸 RGB565 数组,那 lv_image_set_src() 不会自动知道宽高和格式。要么你自己补 LVGL 图片头,要么自己写 decoder,要么就绕开 lv_image,自己按行读出来后直接 blit 到屏幕区域。
所以我建议先不要纠结文件系统,先把路径读通:F:/bg.bin -> fs_open -> 找 offset -> fs_read -> w25qxx_read。
这个闭环跑通以后,再考虑换 littlefs/fatfs,就很清楚问题在哪一层了。
页次: 1