这个问题大概率是烧录工具(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 配置还是工具的问题。
感觉不会便宜,估计40往上
tango_zhu wrote:
/files/members/734/image-20260120161603726-e3cb232d1dd717164197f55d4a81779d.png
看着像是ipc芯片但是有了video input 就没有了video output 要知道现在的ipc芯片都是视频输入输出一起的
没有video output就不能驱动大屏幕了,只能做单纯的IPC联网使用了, 不过接个SPI的的显示器做个小屏幕的应用应该问题不大
jflbr wrote:
解决xfel 不认SPINAND GD5F4GQ6UEXXX问题
xfel-windows-v1.3.5.rar
使用 xfel-windows-v1.3.5这个工具下载固件到SPI NAND很慢,有遇到过吗,量产效率很低
真的是很烦 wrote:
也可以看看这:
不知是哪位高人留下的洞府, 全志瑞芯微晶晨一网打尽https://github.com/DeciHD/rockchip_docs 瑞芯微
https://github.com/DeciHD/allwinner_docs 全志
https://github.com/DeciHD/amlogic_docs
这个资料真不错,参考设计真有用,收藏了!
zjswuyunbo wrote:
我使用D1S(T133-B,tina linux)播放1080P的视频,tplayerdemo 就oom 退出了.
如果,播放1280x720的视频是正常的,这么看应该是内存不够了.这个调整参数,F133能播放1080P的视频吗?
之前弄过,需要优化系统占用的内存,才能流畅播放
RMer055 wrote:
平台Linux4.15.0-rc8-licheepi-nano
一直没调通,能识别esp8089,但是就是扫描不到ssid,用wpa_supplicant连接也没反应
求助各位大佬!
多半还是驱动有问题,esp8089网上有很多版本,之前用v3s + esp8089, 用的Linux3.4, 可以连接wifi的网速很慢,后来是发现sido的速度时钟的问题,修改了设备树和内核的时钟驱动,网速起来了,但不稳定,时不时的掉线,找不到原因,放弃了。后来换成RTL8189F,跑起来相当稳定
@suibian
我用的 TINY200的板子,按照这个教程
https://blog.csdn.net/qq_28877125/article/details/123143116
build 一键编译 播放音频是可以的
ArtInChip wrote:
G730CES 的SDK资料有开源吗?
vectorspace wrote:
请问各位T113-s3 怎么增加openssl
1、用的sdk 是 https://pan.baidu.com/s/1h-yRCvY3I7fhlVL9tVIfvw?pwd=awol
2、/files/members/10661/1681205986459.png
3、编译报错,/files/members/10661/1681205818273.png
Ubuntu 中的openssl 版本太高,api接口不兼容,需要降级处理
板子刚收到,看了坛友的分享的历程,看到有串口发送的例子,没找到接收的,研究了一下,这个接收处理和STM32不太一样,貌似做了深度为16的循环fifo,
简单调了一下,实现收到PC端串口调试助手发送的数据,然后再发送回去。
void thread1_main(void)
{
uart8_init();
uint8_t rx_rp=0;
GPCOM8_RX_WP = 0;
char c;
while(1){
if(rx_rp!=GPCOM_GET_RX_WP(GPCOM8_BASE_ADDR))//判断是否接收到数据
{
c=GPCOM_GET_RX_DATA(GPCOM8_BASE_ADDR,rx_rp);//读取数据
printf("%c",c);
rx_rp++; //读取指针加1
rx_rp=rx_rp&0x0F;//越界处理
}
}
thread_end();
}
沉鱼 wrote:
这里有个avr版本的,
一片8脚的attiny85, 8k flash, 512字节ram, 实现流畅播放wav.
http://elm-chan.org/works/sd8p/report.html
这个不错,可以参考一下,移植到M0上来
之前调的hanshow2.13黑白电子价签局部刷新代码,共享给有需要的坛友,目前有残影,需要继续完善
epd_dis.rar
效果如图:
内部的MCU为MSP4302553, 代码工程为IAR
硬件资料可参考:
https://whycan.com/t_8290.html
gzhssl wrote:
声卡输出验证成功,可以播放歌曲,补充一点就是打上#13楼的补丁,修改设备树之后,要检查下Device Drivers->Sound card support->Advanced Linux Sound Architecture->ALSA for audio support->Allwinner SoC Audio support->Allwinner F1C100s Codec support有没有勾选
/files/members/2474/1441978-20200621134730715-1005027566_20200622-0958.png
另外有个问题就是每次播放完之后都会有爆音出现,不知道是哪里引起的。。。
打上补丁,修改设备树之后,ALSA for audio support-> 根本没有 Allwinner SoC Audio support选项,不知道哪里出了问题