Page 4 of 4

Posted: 2026年 May 8日 19:48
by 愚者千虑必有一得

你好!针对你提出的三个屏幕引脚配置问题,基于 BK7258/T5 的硬件特性分析如下:

■ 问题1:TP 触摸 I2C 引脚 P13+P15

BK7258 的硬件 I2C0 默认引脚通常是 P14(SDA)+P15(SCL)。如果 TuyaOpen board 代码中 TP 用的是 P13+P15,那大概率是 GPIO 模拟 I2C(软件 I2C),而不是硬件 I2C。

如何确认:在 tuya_t5ai_ex_module.c 中检查 TP 初始化函数,如果调用的是 gpio_xxx() 系列函数来模拟 SDA/SCL 时序,就是软件 I2C。

关于改引脚:

  • 软件 I2C:可以直接改宏定义到其他 GPIO 引脚,不受硬件 I2C 引脚限制,任意 GPIO 均可
  • 硬件 I2C:必须使用 BK7258 I2C 复用功能支持的引脚,具体可查 BK7258 数据手册的 GPIO 复用表

如果想改用硬件 I2C 以提高通信速率:

  1. 在 board 配置中将 TP I2C 引脚改为 P14(SDA)+P15(SCL)
  2. 使用 tkl_i2c_init() / tkl_i2c_write() / tkl_i2c_read() 硬件 I2C 接口
  3. 需要确认 TuyaOpen 的触摸驱动是否支持硬件 I2C 模式切换

■ 问题2:屏幕背光 PWM duty 无效

软件 PWM 修改 duty 值后亮度没变化,可能原因:

  1. duty 范围不对:检查当前软件 PWM 的配置,确认 period(周期)和 duty 的比例关系。例如 period=10000 时,duty=1000 应该是 10% 亮度,duty=10000 是满亮度。但如果驱动代码里 duty 有不同的映射逻辑(如 duty=0 是最亮),则效果相反
  2. 初始化顺序:确认 PWM 初始化是在屏幕背光使能之后,如果背光使能引脚的电平状态和 PWM 冲突,可能导致调节无效
  3. GPIO 冲突:P9 是否被其他功能复用?如果同时有其他代码操作 P9,会导致 PWM 输出被覆盖

建议排查:

  • 打印 tkl_pwm_init() 和 tkl_pwm_set_duty() 的返回值,确认是否成功
  • 用万用表/示波器测量 P9 引脚的实际 PWM 波形,确认频率和占空比是否符合预期
  • 检查是否有其他地方对 P9 做了 GPIO 方向或电平设置

■ 问题3:SPI GPIO 模拟引脚是否可改

GPIO 模拟 SPI(软件 SPI)的引脚可以自由更改,只需修改对应的引脚宏定义即可。因为软件 SPI 本质上是通过 gpio_set()/gpio_get() 来控制 CLK/MOSI/MISO/CS 四根信号线,不依赖硬件 SPI 的引脚复用。

修改步骤:

  1. 找到 tuya_t5ai_ex_module.c 中 SPI 相关的引脚宏定义
  2. 将 CLK/MOSI/MISO/CS 改为你新板子上对应的 GPIO 编号
  3. 确保新引脚没有被其他外设占用
  4. 重新编译验证

■ 补充:关于自绘屏幕驱动板

既然你的目的是画一块新板来驱动其他屏幕,建议:

  1. 先在 TuyaOpen 代码中建立新的 board 目录(如 TUYA_T5AI_BOARD_CUSTOM),复制 TUYA_T5AI_BOARD 做基础
  2. 逐个修改引脚宏定义适配新板硬件
  3. 屏幕 SPI 初始化时序(reset/dcmd/wrcmd 等)需要参考目标屏幕的数据手册调整
  4. 触摸 IC 如果换了型号,需要对应修改 TP 驱动

以上分析基于 BK7258 硬件特性。由于 TuyaOpen 的 board 层代码结构和 TuyaOS 不同,具体的宏定义位置和修改方式请以你本地的 TuyaOpen 源码为准。如有具体代码片段,可以贴出来我帮你一起分析。