T5 3.13.6 播放url音频卡顿

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


愚者千虑必有一得
Posts: 931

你好!按你提供的信息(编译失败 + 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

也就是说:

  1. 你要的 P14P19 = CONFIG_PIN_SDIO_GROUP_0(默认未开启,默认走 P2 组)
  2. 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 等子目录。

你那边解压失败大概率是:

  1. git clone 时网络中断导致文件截断 → 重 git pull 或单独覆盖该文件
  2. 杀软误处理大文件
  3. 用了 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,但我没法直接看到完整内容。常见编译失败原因(按概率):

  1. 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。

  2. 没切到 DESKTOP 板
    SD 路径 /t5_fs/... 主要在 T5AI_BOARD_DESKTOP/ui/desk_func_*.c 中使用;检查 make.yaml 里 app_board 是否选了 T5AI_BOARD_DESKTOP。

  3. 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 卡是合理的。

【下一步建议】

请回贴:

  1. 完整 make 报错(前 30 行)
  2. make.yaml 的 app_board 字段
  3. menuconfig 里 TUYA_FILE_SYSTEM 的当前选择

定位精确后再给具体补丁。

Post Reply