21nc

21nc

0个粉丝

2

问答

0

专栏

0

资料

21nc  发布于  2026-05-10 22:16:38
采纳率 50%
2个问答
537

SS928自定义屏幕时序问题

     

我在调试海鸥派 Euler Pi / SS928V100 上的 HDMI 显示输出,我用的是自购的HDMI显示屏,时序与普通屏幕略有不同,想问一下 SS928 的 HDMI/VO 是否支持在应用层通过 MPP sample 修改 HDMI 输出时序,以适配一块 1080×1920 竖屏。

1. 当前硬件和软件环境

板卡:海鸥派 Euler Pi
SoC:SS928V100
烧录固件:openEuler Embedded v1.1.2
MPP/SDK:SS928V100_SDK_V2.0.2.2,对应板端 /root/device_sample 程序
摄像头:IMX347
转接板:EULER_4SEN V1.0
摄像头接法:IMX347 接 EULER_4SEN 的 sensor0,2lane,I2C7
当前摄像头链路已经跑通,使用的是单目 IMX347,
所以目前 VI / ISP / IMX347 / I2C7 / MIPI 2lane 基本确认是通的。

2. 当前屏幕情况

现在主要问题在 HDMI 显示屏时序适配。屏幕厂家给的时序如下:

TIMING g_TimingStr =
{
    137028, // PixelClock/1000,单位 kHz
    1176,   // Htotal
    1080,   // Hactive
    72,     // Hfp
    8,      // Hsw
    16,     // Hbp
    1942,   // Vtotal
    1920,   // Vactive
    14,     // Vfp
    2,      // Vsw
    6,      // Vbp
    1,      // Hspol,正极性
    1       // Vspol,正极性
};

也就是说厂家给的是一块竖屏 HDMI timing:

分辨率:1080 × 1920
刷新率:60Hz
Pixel Clock:约 137.028 MHz
Htotal:1176
Vtotal:1942
Hactive:1080
Vactive:1920
HFP / HSW / HBP:72 / 8 / 16
VFP / VSW / VBP:14 / 2 / 6
HSYNC / VSYNC:正极性

另外,我从板端 /proc/umap/hdmi0_sink 里读到屏幕 EDID,驱动解析出的 detail timing 是:

hact = 1080
vact = 1920
pclk = 137m
hfb = 72
hpw = 8
hbb = 24
vfb = 14
vpw = 2
vbb = 8
ihs = YES
ivs = YES
idv = NO

这里 EDID 解析出的后肩和厂家给的参数略有不同:

厂家:HBP=16, VBP=6
EDID:HBP=24, VBP=8

所以后续我尝试时优先按 EDID 解析出的 detail timing 做过配置。

3. 原始问题现象

原版 sample_viosample_hdmi 在接这块屏时,HDMI 初始化阶段会失败:

ss_mpi_hdmi_set_attr failed at sample_comm_vo_hdmi_start: LINE: 534/535 with 0xa0288015!

sample_hdmi 也会报同样错误:

ss_mpi_hdmi_set_attr failed at sample_comm_vo_hdmi_start: LINE: 535 with 0xa0288015!
sample_hdmi_start:[646]:ret is failure!
test case <hdmi_mst_audio_start_hdmi>not pass

这说明问题是公共的 HDMI/VO 输出配置。

后来发现,运行 sample_hdmi 进入交互命令后,执行:

hdmi_color_mode 00

也就是把 HDMI color mode 改成 RGB 后,显示器可以出现输出,屏幕显示只有一半内容(如图)

4. 当前已经成功的修改

我修改了 sample_comm_vo.c,只做了一个保守改动:把 HDMI 默认 color mode 改为 RGB。

核心改动是把:

static td_bool g_vo_hdmi_rgb_mode = TD_FALSE;

改成:

static td_bool g_vo_hdmi_rgb_mode = TD_TRUE;

改完后重新编译 sample_hdmisample_vio,可以做到程序启动后不需要手动输入 hdmi_color_mode 00,HDMI 就可以直接输出。

此时 sample_vio 已经可以跑通并显示摄像头画面,但显示方向和显示区域不对:画面方向不符合竖屏,且有半屏/部分区域不亮或显示不完整。

5. 当前成功基线下的 /proc 状态

在保守版 RGB 修改成功运行后,我用 Ctrl+Z 暂停 sample_vio,读取 /proc/umap/vo/proc/umap/hdmi0/proc/umap/hdmi0_vo/proc/umap/hdmi0_sink

当前成功基线实际仍然是标准 1080P60 横屏输出:

VO device:
intf_sync = 1080P@60
src_clk = 148500
pixel_clk = 148500
dev_frame_rate = 60

VO video layer:
disp_width = 1920
disp_height = 1080
img_width = 1920
img_height = 1080
pixel_format = YVU-SP420

VO channel:
chn_width = 1920
chn_height = 1080
rotation_angle = 0

HDMI 状态里也显示:

video timing = 1920*1080p60 16:9
disp fmt = 1080P@60
current format = 1920*1080p60 16:9(vic=16)
pixel clk = 148500
in color space = RGB
out color space = RGB

所以现在虽然 RGB 输出能点亮屏幕,但物理 HDMI 时序仍然是:

1920 × 1080 @ 60Hz
Pixel Clock = 148.5 MHz

而屏幕原生需要:

1080 × 1920 @ 60Hz
Pixel Clock ≈ 137 MHz

这应该就是显示方向和半屏显示异常的根因。

6. 已尝试过的应用层时序适配

我尝试在 sample_comm_vo.c 中改 HDMI/VO 输出时序,主要试了以下几条路线。

6.1 尝试使用内置枚举 OT_VO_OUT_1080x1920_60

我发现 sample 里或头文件里存在类似:

OT_VO_OUT_1080x1920_60

于是尝试把 VO 配置从:

OT_VO_OUT_1080P60
1920x1080

改成:

OT_VO_OUT_1080x1920_60
1080x1920

运行后日志显示:

vo_start: intf_type=0x10 intf_sync=47 rect=1080x1920 img=1080x1920 fps=60
sample_comm_vo_start_dev failed with 0xa00f800c

也就是说这个枚举虽然存在,但当前板端运行时 VO HDMI 驱动不接受该输出制式。

6.2 尝试 OT_VO_OUT_USER + 1080×1920 自定义时序

之后我尝试走 USER timing:

intf_sync = OT_VO_OUT_USER
disp_rect = 1080x1920
image_size = 1080x1920
dev_frame_rate = 60

并设置 sync 参数为 EDID 解析出的 detail timing:

hact = 1080
hfb = 72
hpw = 8
hbb = 24

vact = 1920
vfb = 14
vpw = 2
vbb = 8

iop = 1
ihs = 0
ivs = 0

PLL 尝试过整数 137MHz,也尝试过小数 PLL 约 137.020MHz。例如:

fb_div = 91
frac = 5813300
ref_div = 2
post_div1 = 4
post_div2 = 2
pre_div = 1
dev_div = 1
clk_reverse = 0
fps = 60

运行结果:

vo_start user-timing: intf_type=0x10 intf_sync=48 rect=1080x1920 img=1080x1920 fps=60
set_pub_attr USER sync: hact=1080 hfb=72 hpw=8 hbb=24 vact=1920 vfb=14 vpw=2 vbb=8 iop=1 ihs=0 ivs=0
set_user_sync_info: fb_div=91 frac=5813300 ref_div=2 post_div1=4 post_div2=2 pre_div=1 dev_div=1 clk_reverse=0 fps=60
ss_mpi_vo_set_user_sync_info failed with 0xa00f8007

也就是说:

ss_mpi_vo_set_pub_attr() 似乎能过,
但 ss_mpi_vo_set_user_sync_info() 失败,错误码 0xa00f8007。

7. 当前我的判断

目前我可以稳定做到:

sample_vio 跑通
IMX347 出图
HDMI RGB 输出
1080P60 横屏标准时序下显示器能亮

但无法在应用层成功切到:

1080×1920@60
137MHz pixel clock

我已经验证过:

1. RGB only + 1080P60:成功
2. OT_VO_OUT_1080x1920_60:VO start 失败,0xa00f800c
3. OT_VO_OUT_USER + 1080×1920:ss_mpi_vo_set_user_sync_info 失败,0xa00f8007
4. OT_VO_OUT_USER + 原版 1080P60 参数:同样 ss_mpi_vo_set_user_sync_info 失败,0xa00f8007

所以我想确认:
在海鸥派 Euler Pi / SS928V100 / openEuler Embedded 当前发布固件中,是否支持通过应用层 MPP 接口修改 HDMI/VO 输出时序?尤其是:

ss_mpi_vo_set_pub_attr()
ss_mpi_vo_set_user_sync_info()
ss_mpi_hdmi_set_attr()

这几类接口能否用于 HDMI 自定义时序?

8. 想确认的问题

  1. 当前 SS928V100 openEuler 固件下,HDMI VO 是否支持 OT_VO_OUT_USER
  2. ss_mpi_vo_set_user_sync_info() 在 HDMI 输出接口下是否可用?还是只支持 BT/MIPI/LCD 等其他输出接口?
  3. 如果应用层不能使用 USER timing,是否需要修改内核/驱动/MPP 库里的 VO timing table?
  4. 是否可以在驱动或固件中新增 1080x1920@60 这个 HDMI 输出制式?
  5. OT_VO_OUT_1080x1920_60 枚举虽然存在,但运行时报 0xa00f800c,是否说明当前驱动没有注册或没有支持该 timing?
  6. 对这块屏,是否有推荐的适配方式?是继续从应用层 sample 改,还是需要贵司提供适配后的固件/库?
  7. 是否有官方示例可以演示 HDMI 输出自定义 pixel clock、H/V total、front porch、sync width、back porch?
  8. 如果不能改 HDMI 物理时序,我是否只能保持 1080P60 + RGB,然后在 VPSS/VGS/VO channel 上做旋转、缩放、裁切来适配显示?

目前最希望确认的是:
有没有办法只通过应用层修改 sample_comm_vo.c / sample_vio.c,让 HDMI 输出真正变成 1080×1920@60、137MHz,以适配这块竖屏?
如果不支持,希望能确认需要修改哪一层:MPP sample、MPP 库、内核驱动、设备树,还是需要重新打包固件。

我来回答
回答4个
时间排序
认可量排序

UncleRoderick

69个粉丝

20

问答

6

专栏

20

资料

UncleRoderick 2026-05-11 08:40:33
认可0

固件都是基于海思SDK的,只要海思SDK支持即可,如果担心openEuler固件是否支持问题,可以尝试切换Linux固件,这个我有验证过HDMI输出自定义时序

Sunshine

13个粉丝

2

问答

12

专栏

19

资料

Sunshine 2026-05-11 09:04:29
认可0
  1. VO自定义时序可参考这篇 https://www.ebaina.com/articles/140000017938
  2. 具体的参数说明参考手册 《MPP 媒体处理软件 V5.0 开发参考.pdf》

    从这里往后看手册

mm

3个粉丝

2

问答

0

专栏

0

资料

mm 2026-05-11 11:04:08
认可0

输入的分辨率是多少?

Totoro

0个粉丝

2

问答

0

专栏

0

资料

Totoro 2026-07-14 09:08:56
认可0

1.SS928V100的HDMI VO是支持OT_VO_OUT_USER的
2.ss_mpi_vo_set_user_sync_info() 在 HDMI 输出接口下是可用的,支持 BT输出接口也可以支持,其他接口暂未试过
3.如1和2
4.不需要
5.OT_VO_OUT_1080x1920_60如果vo设置这个,看下这个是否设置,如果不能设置,需要看下是否处在低延时模式

6和7.一般屏幕适配关注 pixel clock、H/V total、front porch、sync width、back porch这些参数,以及时钟频率略大于或者接近屏幕要求即可

或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区