Re: T5 3.13.6 播放url音频卡顿
你好!按你提供的信息(编译失败 + P14P19 1线模式 + t5_fs.zip 损坏),逐项处理如下,先不急着上 SD,建议先把方向校准。
【方向校准】
3 个音频共 67MB,这个体量其实不必上 SD 卡。9楼建议 SD 是因为 DESKTOP 板需要近百 MB 的 UI 资源;你只是想播 3 个 MP3,正确路径是:
A. 继续 URL 流式播放(已实现,调好 buffer 即可) —— 推荐,难度低
B. 嵌入到固件 const 数组里 —— 67MB 接近极限,不推荐
C. 外挂 SPI Flash + LittleFS(FILE_SYSTEM_LFS_SPI_FLASH) —— 可行
D. SD 卡 + LittleFS(你现在尝试的) —— 仅当还要存别的 UI/字体/录音
如果只是这 3 个文件能稳定播,建议先回 A 路线,把上次回复里改的 AI_PLAYER_FRAMEBUF_SIZE=16KB 和 AI_PLAYER_HTTP_YIELD_MS=100 试一下,URL 流式不会卡。
下面给你 D 路线的完整答复。
【一、SD 卡 1 线模式 + P14P19 配置】
T5(BK7258)的 SDIO 引脚在源码里是硬编码的,不是通过 tuya_app_config.h 暴露给应用层的开关,要改需要动 vendor 层。
依据:vendor/T5/t5_os/ap/middleware/driver/sdcard/sdio_driver.c 第 5667 行:
Code: Select all
#if (CONFIG_PIN_SDIO_GROUP_0)
#define PIN_ID_SDIO_CLK (GPIO_14)
#define PIN_ID_SDIO_CMD (GPIO_15)
#define PIN_ID_SDIO_D0 (GPIO_16)
#define PIN_ID_SDIO_D1 (GPIO_17)
#define PIN_ID_SDIO_D2 (GPIO_18)
#define PIN_ID_SDIO_D3 (GPIO_19)
#else
#define PIN_ID_SDIO_CLK (GPIO_2)
... (默认是 P2/3/4/5/10/11)
#endif
#if CONFIG_SDCARD_BUSWIDTH_4LINE
// 映射 D1/D2/D3
#endif也就是说:
- 你要的 P14P19 = CONFIG_PIN_SDIO_GROUP_0(默认未开启,默认走 P2 组)
- 1 线模式由 CONFIG_SDCARD_BUSWIDTH_4LINE 控制——不开就是 1 线(仅用 D0=P16),4 线才用 D0D3
配置方法
在 vendor/T5/t5_os/ap/projects/<你的工程>/sdkconfig 或 sdkconfig.defaults 中加:
Code: Select all
CONFIG_SDCARD=y
CONFIG_PIN_SDIO_GROUP_0=y
# 不要写 CONFIG_SDCARD_BUSWIDTH_4LINE=y,不写就是 1 线1 线模式下:CLK=P14、CMD=P15、D0=P16;P17/P18/P19 空闲可作他用。
【二、t5_fs.zip 损坏问题】
文件存在仓库内:
Code: Select all
apps/tuyaos_demo_wukong_ai/src/boards/T5AI_BOARD_DESKTOP/doc/t5_fs.zip我这边校验了一下,仓库里的 t5_fs.zip 是完整的(11.4 MB,114 个文件,正常解压),里面包含 t5_fs/font、t5_fs/data_file、t5_fs/music 等子目录。
你那边解压失败大概率是:
- git clone 时网络中断导致文件截断 → 重 git pull 或单独覆盖该文件
- 杀软误处理大文件
- 用了 git lfs 但没拉真实内容(看 zip 起始 4 字节是不是 PK\x03\x04)
排查命令(Windows PowerShell):
Code: Select all
# 看本地文件大小,应该约 11 MB(11384238 字节)
ls apps/tuyaos_demo_wukong_ai/src/boards/T5AI_BOARD_DESKTOP/doc/t5_fs.zip
# 看头部,应该是 50 4B 03 04(PK..)
Format-Hex -Path apps/tuyaos_demo_wukong_ai/src/boards/T5AI_BOARD_DESKTOP/doc/t5_fs.zip -Count 8如果还是损坏,可以单独从 gitee/github 仓库 raw 重新下载这一个文件,路径同上。
【三、tuya_app_config.h 编译失败排查】
附件里你贴了 tuya_app_config.h,但我没法直接看到完整内容。常见编译失败原因(按概率):
TUYA_FILE_SYSTEM 已经定义但没选 medium
默认配置是 // CONFIG_TUYA_FILE_SYSTEM is not set;如果你直接把宏改成 #define TUYA_FILE_SYSTEM 1 而不开 FILE_SYSTEM_LFS_SD 或 FILE_SYSTEM_LFS_SPI_FLASH,编译时 lv_conf.h、tuya_ai_display.c 等多处条件分支会报符号未定义。
正确做法:用 make menuconfig APP_NAME=tuyaos_demo_wukong_ai 进入图形界面,开启 Enable file system 后选择 littlefs on SD card,不要手改 tuya_app_config.h。没切到 DESKTOP 板
SD 路径 /t5_fs/... 主要在 T5AI_BOARD_DESKTOP/ui/desk_func_*.c 中使用;检查 make.yaml 里 app_board 是否选了 T5AI_BOARD_DESKTOP。vendor 层 CONFIG_SDCARD 没开
上面提到的 CONFIG_SDCARD=y、CONFIG_PIN_SDIO_GROUP_0=y 必须改 vendor 的 sdkconfig,不是 app 的 tuya_app_config.h。
依据:apps/tuyaos_demo_wukong_ai/build/APPconfig 第 225242 行:
Code: Select all
config TUYA_FILE_SYSTEM
bool "enable file system (littlefs/fatfs)"
default n
if (TUYA_FILE_SYSTEM)
choice
prompt "Select littlefs storage medium"
default FILE_SYSTEM_LFS_SPI_FLASH
config FILE_SYSTEM_LFS_SD
bool "littlefs on SD card"
config FILE_SYSTEM_LFS_SPI_FLASH
bool "littlefs on SPI FLASH"
endchoice
endif请把完整编译报错(前 30 行)贴上来,否则只能猜。
【推荐做法(如果只想播 3 个 67MB MP3)】
不建议沿用:搬 SD 卡 + 文件系统 + LFS 这一套
推荐改为:继续 URL 流式播放,把 ai_player 的 framebuf 调大
迁移步骤(5 分钟):
Code: Select all
// apps/tuyaos_demo_wukong_ai/src/miscs/audio_player/include/svc_ai_player.h
- #define AI_PLAYER_FRAMEBUF_SIZE (4 * 1024)
- #define AI_PLAYER_HTTP_YIELD_MS 10
+ #define AI_PLAYER_FRAMEBUF_SIZE (16 * 1024)
+ #define AI_PLAYER_HTTP_YIELD_MS 100例外情况:必须离线播 / 必须本地化 / 同时还要做录音和图片缓存 → 那走 SD 卡是合理的。
【下一步建议】
请回贴:
- 完整 make 报错(前 30 行)
- make.yaml 的 app_board 字段
- menuconfig 里 TUYA_FILE_SYSTEM 的当前选择
定位精确后再给具体补丁。