您尚未登录。

楼主 # 2026-07-24 22:01:25

QL2017
会员
注册时间: 2026-02-19
已发帖子: 72
积分: 52

全志F133 W25Q256无法烧录问题

我原本是W25Q128,换成W25Q256后烧录程序(SD量产卡)能检测出来是W25Q256(SF: Detected w25q256 with page size 256 Bytes, erase size 64 KiB, total 32 MiB ),随后连擦除阶段都没进入,最后直接抛出错误:

sunxi sprite error : buffer is smaller than data size
sunxi sprite error : read mbr failed
sunxi sprite error : fetch mbr error
sprite_test - do a sprite test

不知道问题出在哪,用LiveSuit烧录直接提示timeout,这个固件用W25Q128的时候可以烧录,我现在一点头绪没有,希望大佬解答!以下是完整Log:

[45]HELLO! BOOT0 is starting!
[48]BOOT0 commit : 88480af
[50]set pll start
[52]periph0 has been enabled
[55]set pll end
[56][pmu]: bus read error
[59]board init ok
[61]ZQ value = 0x2e
[63]get_pmu_exist() = -1
[65]ddr_efuse_type: 0xa
[67]trefi:7.8ms
[69][AUTO DEBUG] single rank and full DQ!
[73]ddr_efuse_type: 0xa
[75]trefi:7.8ms
[77][AUTO DEBUG] rank 0 row = 13
[80][AUTO DEBUG] rank 0 bank = 4
[84][AUTO DEBUG] rank 0 page size = 2 KB
[87]DRAM BOOT DRIVE INFO: V0.33
[90]DRAM CLK = 528 MHz
[92]DRAM Type = 2 (2:DDR2,3:DDR3)
[96]DRAMC read ODT off.
[98]DRAM ODT off.
[100]ddr_efuse_type: 0xa
[102]DRAM SIZE =64 M
[104]dram_tpr4:0x0
[106]PLL_DDR_CTRL_REG:0xf8002b00
[109]DRAM_CLK_REG:0xc0000000
[112][TIMING DEBUG] MR2= 0x0
[116]DRAM simple test OK.
[119]dram size =64
[120]card no is 0
[122]sdcard 0 line count 4
[125][mmc]: mmc driver ver 2021-04-2 16:45
[134][mmc]: Wrong media type 0x0
[137][mmc]: Try SD card 0
[162][mmc]: HSSDR52/SDR25 4 bit
[164][mmc]: 50000000 Hz
[167][mmc]: 3781 MB
[169][mmc]: SD/MMC 0 init OK!!!
[218]Loading boot-pkg Succeed(index=0).
[221]Entry_name = opensbi
[225]Entry_name = u-boot
[228]Entry_name = dtb
[231]mmc not para
[233]Jump to second Boot.

OpenSBI auto-t113-linux-V0.8-3-ge39e937
____ _____ ____ _____
/ __ \ / ____| _ \_ _|
| | | |_ __ ___ _ __ | (___ | |_) || |
| | | | '_ \ / _ \ '_ \ \___ \| _ < | |
| |__| | |_) | __/ | | |____) | |_) || |_
\____/| .__/ \___|_| |_|_____/|____/_____|
| |
|_|

Platform Name : T-HEAD Xuantie Platform
Platform HART Features : RV64ACDFIMSUVX
Platform Max HARTs : 1
Current Hart : 0
Firmware Base : 0x41fc0400
Firmware Size : 75 KB
Runtime SBI Version : 0.2

MIDELEG : 0x0000000000000222
MEDELEG : 0x000000000000b1ff
PMP0 : 0x0000000041fc0000-0x0000000041fdffff (A)
PMP1 : 0x0000000040000000-0x000000007fffffff (A,R,W,X)
PMP2 : 0x0000000080000000-0x00000000bfffffff (A,R,W,X)
PMP3 : 0x0000000000020000-0x0000000000027fff (A,_HHսс2018.07-ge987def5y

[00.318]DRAM: 64 MiB
[00.321]Relocation Offset is: 01ee9000
[00.325]secure enable bit: 0
[00.328]CPU=1008 MHz,PLL6=600 Mhz,AHB=200 Mhz, APB1=100Mhz MBus=300Mhz
sunxi flash map init
SPI ALL: ready
[00.338]flash init start
[00.340]workmode = 17,storage type = 1
try card 2
set card number 2
get card number 2
[00.348][mmc]: mmc driver ver uboot2018:2021-12-20 13:35:00
[00.354][mmc]: get sdc_type fail and use default host:tm4.
[00.360][mmc]: Is not Boot mode!
[00.363][mmc]: SUNXI SDMMC Controller Version:0x50310
[00.374][mmc]: Try SD card 2
[00.379][mmc]: mmc 2 cmd timeout 100 status 100
[00.383][mmc]: smc 2 err, cmd 8, RTO
[00.387][mmc]: mmc 2 close bus gating and reset
[00.392][mmc]: mmc 2 cmd timeout 100 status 100
[00.396][mmc]: smc 2 err, cmd 55, RTO
[00.399][mmc]: mmc 2 close bus gating and reset
[00.404][mmc]: Try MMC card 2
[00.412][mmc]: mmc 2 cmd timeout 100 status 100
[00.417][mmc]: smc 2 err, cmd 1, RTO
[00.420][mmc]: mmc 2 close bus gating and reset
[00.424][mmc]: Card did not respond to voltage select!
[00.429][mmc]: SD/MMC 2 init error!
[00.434][mmc]: mmc init product failed
MMC init failed
try emmc fail
[00.441]sunxi-spinand: AW SPINand MTD Layer Version: 1.8 20220106
[00.447]sunxi-spinand-phy: AW SPINand Phy Layer Version: 1.11 20211217
[00.455]sunxi-spinand-phy: request spi0 gpio ok
[00.459]sunxi-spinand-phy: request general tx dma channel ok!
[00.465]sunxi-spinand-phy: request general rx dma channel ok!
[00.470]sunxi-spinand-phy: set spic0 clk to 20 Mhz
[00.475]sunxi-spinand-phy: init spic0 clk ok
[01.479]sunxi-spinand-phy: read id failed : -110
try nand fail
[01.487]sunxi_upper_lock, invalid address!
[01.496]spi sunxi_slave->max_hz:100000000
[02.482]Sample mode:1 start:0 end:53 right_sample_delay:0x1a
SF: Detected w25q256 with page size 256 Bytes, erase size 64 KiB, total 32 MiB
[02.759][mmc]: mmc driver ver uboot2018:2021-12-20 13:35:00
[02.765][mmc]: get sdc_type fail and use default host:tm1.
[02.771][mmc]: can't find node "mmc0",will add new node
[02.776][mmc]: fdt err returned <no error>
[02.779][mmc]: Using default timing para
[02.783][mmc]: SUNXI SDMMC Controller Version:0x50310
[02.815][mmc]: card_caps:0x3000000a
[02.818][mmc]: host_caps:0x3000003f
[02.824]line:703 init_clocks
[02.827]init_clocks:finish
[02.829]drv_disp_init
[02.838]get flash lcd idx 0
[02.842]HDMI 2.0 driver init start!
[02.846]drv_disp_init finish
[02.849]boot_gui_init:start
[02.852]set disp.dev2_output_type fail. using defval=0
[02.856]lcd_panel_fun[0].cfg_open_flow is NULL
[02.861]lcd_panel_fun[0].cfg_panel_info is NULL
[02.865]disp 0, clk: pll(360000000),clk(360000000),dclk(30000000) dsi_rate(1500)
clk real:pll(360000000),clk(360000000),dclk(90000000) dsi_rate(150000000)
[02.880]LCD open finish
[02.882]switch device: sel=0, type=1, mode=4, format=0, bits=0, eotf=4, cs=260
[02.889]set disp.fb0_rot_used fail. using defval=0
[02.893]set disp.fb0_rot_degree fail. using defval=0
[02.899]boot_gui_init:finish
[02.902]Loading Environment from SUNXI_FLASH... OK
[02.906]try to burn key
[02.908]out of usb burn from boot: not need burn key
Hit any key to stop autoboot: 0
sunxi work mode=0x11
run card sprite
[02.920]try sprite_led_gpio config
[02.923]sprite_led_gpio start
[02.927]sunxi sprite begin
firmware name <NULL>
img start = 0x81f8
try to read mmc start 33272
read mmc ok
[02.939]firmware probe ok
[02.942]fetch download map
DOWNLOAD MAP DUMP*
total download part 5

download part[0] name :boot-resource
download part[0] download file :BOOT-RESOURCE_FE
download part[0] verify file :VBOOT-RESOURCE_F
download part[0] lenlo :0x1f8
download part[0] addrlo :0x8000
download part[0] encrypt :0x0
download part[0] verify :0x1

download part[1] name :env
download part[1] download file :ENV_FEX000000000
download part[1] verify file :VENV_FEX00000000
download part[1] lenlo :0x1f8
download part[1] addrlo :0x81f8
download part[1] encrypt :0x0
download part[1] verify :0x1

download part[2] name :env-redund
download part[2] download file :ENV_FEX000000000
download part[2] verify file :VENV_FEX00000000
download part[2] lenlo :0x1f8
download part[2] addrlo :0x83f0
download part[2] encrypt :0x0
download part[2] verify :0x1

download part[3] name :boot
download part[3] download file :BOOT_FEX00000000
download part[3] verify file :VBOOT_FEX0000000
download part[3] lenlo :0x5000
download part[3] addrlo :0x85e8
download part[3] encrypt :0x0
download part[3] verify :0x1

download part[4] name :rootfs
download part[4] download file :ROOTFS_FEX000000
download part[4] verify file :VROOTFS_FEX00000
download part[4] lenlo :0xbe00
download part[4] addrlo :0xd5e8
download part[4] encrypt :0x0
download part[4] verify :0x1

[03.080]fetch mbr
sunxi sprite error : buffer is smaller than data size
sunxi sprite error : read mbr failed
sunxi sprite error : fetch mbr error
sprite_test - do a sprite test

Usage:
sprite_test NULL
=>

离线

#1 2026-07-26 17:52:56

hameyou
会员
注册时间: 2018-04-15
已发帖子: 270
积分: 46.5

Re: 全志F133 W25Q256无法烧录问题

驱动能够识别到型号,看来不是驱动的问题。
建议看一下sys_partition.fex 分区的划分有没有问题,需要按照32MB来分配

离线

#2 2026-10-11 21:28:58

LAKKKA
会员
注册时间: 2026-10-11
已发帖子: 9
积分: 9

Re: 全志F133 W25Q256无法烧录问题

搜一下buffer is smaller than data size在什么地方产生的。分析一下附近的代码。

离线

#3 昨天 14:18:06

hameyou
会员
注册时间: 2018-04-15
已发帖子: 270
积分: 46.5

Re: 全志F133 W25Q256无法烧录问题

这个问题大概率是烧录工具(SD 量产卡和 LiveSuit 底层)不支持 32MB SPI Flash 的地址跨越(Bank 切换)导致的。W25Q256 容量是 32MB,但标准 SPI Flash 的 3 字节地址模式只能寻址 16MB(0x0000000 ~ 0x0FFFFFF)。访问 16MB 以上的空间,芯片需要切换 Bank(使用 4 字节地址或专用命令)。你的 Log 显示系统已经正确识别了 32MB 容量,但烧录工具在尝试读取 MBR 或写入数据时,可能因为仍然使用旧版地址逻辑,导致“buffer 小于 data size”或读取到错误数据。

具体解决步骤
修改并重新编译 sunxi-tools(针对 SD 卡烧录/LiveSuit 的底层工具)
你使用的 SD 量产卡和 LiveSuit 很可能都依赖或内置了旧版的 sunxi-fel 逻辑。旧版工具对超过 16MB 的 Flash 支持不完善,会循环覆盖前 16MB 的内容,或者因为地址越界报错。

你需要找到烧录工具源码中的 fel-spiflash.c 文件。

添加对 Bank 切换的支持代码。核心逻辑是:当操作地址 offset 超过 0x1000000(16MB)时,先发送 CMD_EXTNADDR_WREAR (0xC5) 命令来切换 Bank,再执行读写。

重新编译生成新的烧录工具。有用户反馈,在修改 sunxi-fel 增加 Bank 切换支持后,确实可以成功烧录 32MB 的 Flash 了。

检查 U-Boot 配置(针对 LiveSuit 超时)
LiveSuit 直接提示 timeout,除了工具本身的问题,也有可能是 U-Boot 环境变量或配置问题。因为你的固件原本是为 16MB 设计的,启动后寻找的分区表或镜像地址可能依然按 16MB 计算。

启用 CONFIG_SPI_FLASH_BAR:在 U-Boot 源码的配置中,确保 CONFIG_SPI_FLASH_BAR=y 已经启用。这是 U-Boot 层面支持 32MB Flash 地址切换的关键选项,如果没有开启,即使 Flash 被识别,后续读写也会出错。

检查分区表:确保 U-Boot 的 MTD 分区表(或内核的 mtdparts)总大小覆盖了 32MB,或者至少包含了正确的偏移量,避免因为分区表太小导致擦除/读写指令被拒绝。

排查硬件兼容性
虽然概率较低,但 W25Q256 存在多个版本(如 W25Q256FV vs W25Q256JV)。某些特定版本的芯片在 4K 扇区擦除指令或 Bank 切换时序上可能存在细微差异,可能导致工具操作失败。如果修改软件后依然不行,可以尝试更换另一片不同批次或型号(如 MX25L256)的 32MB Flash 验证是否为芯片本身导致。

建议操作顺序
优先处理 sunxi-tools 的 Bank 切换补丁,这是解决“buffer smaller than data size”最直接的路径。对于 LiveSuit timeout 问题,在确认工具支持 32MB 后,尝试用 U-Boot 命令行(通过串口)手动操作 Flash,看能否成功擦除或读取 0x2000000 偏移后的地址,以进一步定位是 U-Boot 配置还是工具的问题。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn


东莞哇酷科技有限公司开发